iPod Classic: disable IRAM1
On Classic, IRAM1 (second 128Kb of a total of 256KB available IRAM) is slower than DRAM. Codecs that actually are using regions of IRAM1 runs faster when DRAM is used, so IRAM1 is disabled and only IRAM0 remains enabled: 48KB for core and 80KB for codecs/plugins. The next test_codec results shows how decode time is decreased: file boosted unboosted *.ra ~1.5% ~0.5% *.mpc ~21% ~4.5% *.ogg ~0.5% ~0% nero_he*.m4a ~8% ~1% nero*.m4a ~25% ~7% wmapro*.wma ~4.5% ~0% wma*.wma ~25% ~7% In addition there is a small power save when IRAM1 HW is disabled. Change-Id: I102adee11458e82037f23076d5d5956e23235de8
This commit is contained in:
parent
8f38f85fbd
commit
7442742208
11 changed files with 25 additions and 20 deletions
|
@ -159,9 +159,10 @@ OUTPUT_FORMAT(elf32-littlemips)
|
||||||
|
|
||||||
#elif CONFIG_CPU==S5L8702
|
#elif CONFIG_CPU==S5L8702
|
||||||
/* S5L8702 have 256KB of IRAM */
|
/* S5L8702 have 256KB of IRAM */
|
||||||
|
/* IRAM1 (2nd 128KB block) is not used because it is slower than DRAM */
|
||||||
#define DRAMORIG 0x08000000
|
#define DRAMORIG 0x08000000
|
||||||
#define IRAMORIG (0x00000000 + (56*1024))
|
#define IRAMORIG (0x00000000 + (48*1024))
|
||||||
#define IRAMSIZE (200*1024)
|
#define IRAMSIZE (80*1024)
|
||||||
|
|
||||||
#elif CONFIG_CPU == JZ4732 || CONFIG_CPU == JZ4760B
|
#elif CONFIG_CPU == JZ4732 || CONFIG_CPU == JZ4760B
|
||||||
#undef STUBOFFSET
|
#undef STUBOFFSET
|
||||||
|
|
|
@ -19,7 +19,7 @@ STARTUP(target/arm/s5l8702/crt0.o)
|
||||||
|
|
||||||
#define DRAMSIZE (DRAM_SIZE - PLUGINSIZE - CODECSIZE - TTB_SIZE)
|
#define DRAMSIZE (DRAM_SIZE - PLUGINSIZE - CODECSIZE - TTB_SIZE)
|
||||||
#define CODECORIG (ENDAUDIOADDR)
|
#define CODECORIG (ENDAUDIOADDR)
|
||||||
#define IRAMSIZE (56*1024) /* 256KB total - 56KB for core, 200KB for codecs */
|
#define IRAMSIZE (48*1024) /* 256KB total - 48KB for core, 200KB for codecs */
|
||||||
|
|
||||||
/* Where the codec buffer ends, and the plugin buffer starts */
|
/* Where the codec buffer ends, and the plugin buffer starts */
|
||||||
#define ENDADDR (ENDAUDIOADDR + CODECSIZE)
|
#define ENDADDR (ENDAUDIOADDR + CODECSIZE)
|
||||||
|
|
|
@ -207,7 +207,6 @@ void pcm_dma_apply_settings(void)
|
||||||
|
|
||||||
void pcm_play_dma_init(void)
|
void pcm_play_dma_init(void)
|
||||||
{
|
{
|
||||||
PWRCON(0) &= ~(1 << 4);
|
|
||||||
PWRCON(1) &= ~(1 << 7);
|
PWRCON(1) &= ~(1 << 7);
|
||||||
|
|
||||||
dmac_ch_init(&dma_play_ch, &dma_play_ch_cfg);
|
dmac_ch_init(&dma_play_ch, &dma_play_ch_cfg);
|
||||||
|
@ -406,7 +405,6 @@ void pcm_rec_dma_init(void)
|
||||||
if (pcm_rec_initialized)
|
if (pcm_rec_initialized)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
PWRCON(0) &= ~(1 << 4);
|
|
||||||
PWRCON(1) &= ~(1 << 7);
|
PWRCON(1) &= ~(1 << 7);
|
||||||
|
|
||||||
dmac_ch_init(&dma_rec_ch, &dma_rec_ch_cfg);
|
dmac_ch_init(&dma_rec_ch, &dma_rec_ch_cfg);
|
||||||
|
|
|
@ -199,6 +199,9 @@ enum {
|
||||||
|
|
||||||
void system_init(void)
|
void system_init(void)
|
||||||
{
|
{
|
||||||
|
/* disable IRAM1 (not used because it is slower than DRAM) */
|
||||||
|
clockgate_enable(CLOCKGATE_SM1, false);
|
||||||
|
|
||||||
clocking_init(clk_modes, 0);
|
clocking_init(clk_modes, 0);
|
||||||
#ifndef BOOTLOADER
|
#ifndef BOOTLOADER
|
||||||
gpio_preinit();
|
gpio_preinit();
|
||||||
|
|
|
@ -29,15 +29,16 @@
|
||||||
|
|
||||||
#include "codeclib.h"
|
#include "codeclib.h"
|
||||||
|
|
||||||
#if (CONFIG_CPU == PP5022) || (CONFIG_CPU == PP5024) || (CONFIG_CPU == MCF5250)
|
#if (CONFIG_CPU == PP5022) || (CONFIG_CPU == PP5024) || \
|
||||||
/* PP5022/24, MCF5250 have large IRAM */
|
(CONFIG_CPU == MCF5250) || (CONFIG_CPU == S5L8702)
|
||||||
|
/* PP5022/24, S5L8702, MCF5250 have large IRAM */
|
||||||
#define IBSS_ATTR_COOK_LARGE_IRAM IBSS_ATTR
|
#define IBSS_ATTR_COOK_LARGE_IRAM IBSS_ATTR
|
||||||
#define ICODE_ATTR_COOK_LARGE_IRAM ICODE_ATTR
|
#define ICODE_ATTR_COOK_LARGE_IRAM ICODE_ATTR
|
||||||
#define ICONST_ATTR_COOK_LARGE_IRAM ICONST_ATTR
|
#define ICONST_ATTR_COOK_LARGE_IRAM ICONST_ATTR
|
||||||
#define IBSS_ATTR_COOK_VLCBUF
|
#define IBSS_ATTR_COOK_VLCBUF
|
||||||
#define ICODE_ATTR_COOK_DECODE
|
#define ICODE_ATTR_COOK_DECODE
|
||||||
|
|
||||||
#elif defined(CPU_S5L870X)
|
#elif (CONFIG_CPU == S5L8700) || (CONFIG_CPU == S5L8701)
|
||||||
/* S5L870X have even larger IRAM and it is faster to use ICODE_ATTR. */
|
/* S5L870X have even larger IRAM and it is faster to use ICODE_ATTR. */
|
||||||
#define IBSS_ATTR_COOK_LARGE_IRAM IBSS_ATTR
|
#define IBSS_ATTR_COOK_LARGE_IRAM IBSS_ATTR
|
||||||
#define ICODE_ATTR_COOK_LARGE_IRAM ICODE_ATTR
|
#define ICODE_ATTR_COOK_LARGE_IRAM ICODE_ATTR
|
||||||
|
|
|
@ -58,14 +58,14 @@ extern struct codec_api* ci;
|
||||||
#define ICONST_ATTR_FAAD_LARGE_IRAM ICONST_ATTR
|
#define ICONST_ATTR_FAAD_LARGE_IRAM ICONST_ATTR
|
||||||
#define IBSS_ATTR_FAAD_XLR
|
#define IBSS_ATTR_FAAD_XLR
|
||||||
|
|
||||||
#elif (CONFIG_CPU == PP5022) || (CONFIG_CPU == PP5024)
|
#elif (CONFIG_CPU == PP5022) || (CONFIG_CPU == PP5024) || (CONFIG_CPU == S5L8702)
|
||||||
/* Enough IRAM to move additional data and code to it. */
|
/* Enough IRAM to move additional data and code to it. */
|
||||||
#define IBSS_ATTR_FAAD_LARGE_IRAM IBSS_ATTR
|
#define IBSS_ATTR_FAAD_LARGE_IRAM IBSS_ATTR
|
||||||
#define ICODE_ATTR_FAAD_LARGE_IRAM ICODE_ATTR
|
#define ICODE_ATTR_FAAD_LARGE_IRAM ICODE_ATTR
|
||||||
#define ICONST_ATTR_FAAD_LARGE_IRAM ICONST_ATTR
|
#define ICONST_ATTR_FAAD_LARGE_IRAM ICONST_ATTR
|
||||||
#define IBSS_ATTR_FAAD_XLR
|
#define IBSS_ATTR_FAAD_XLR
|
||||||
|
|
||||||
#elif defined(CPU_S5L870X)
|
#elif (CONFIG_CPU == S5L8700) || (CONFIG_CPU == S5L8701)
|
||||||
/* Very large IRAM. Move even more data to it. */
|
/* Very large IRAM. Move even more data to it. */
|
||||||
#define IBSS_ATTR_FAAD_LARGE_IRAM IBSS_ATTR
|
#define IBSS_ATTR_FAAD_LARGE_IRAM IBSS_ATTR
|
||||||
#define ICODE_ATTR_FAAD_LARGE_IRAM ICODE_ATTR
|
#define ICODE_ATTR_FAAD_LARGE_IRAM ICODE_ATTR
|
||||||
|
|
|
@ -18,14 +18,15 @@
|
||||||
#define ICODE_ATTR
|
#define ICODE_ATTR
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if (CONFIG_CPU == MCF5250) || (CONFIG_CPU == PP5022) || (CONFIG_CPU == PP5024)
|
#if (CONFIG_CPU == MCF5250) || (CONFIG_CPU == PP5022) || \
|
||||||
|
(CONFIG_CPU == PP5024) || (CONFIG_CPU == S5L8702)
|
||||||
#define ICODE_ATTR_FLAC ICODE_ATTR
|
#define ICODE_ATTR_FLAC ICODE_ATTR
|
||||||
#define IBSS_ATTR_FLAC IBSS_ATTR
|
#define IBSS_ATTR_FLAC IBSS_ATTR
|
||||||
/* Enough IRAM to move additional data to it. */
|
/* Enough IRAM to move additional data to it. */
|
||||||
#define IBSS_ATTR_FLAC_LARGE_IRAM IBSS_ATTR
|
#define IBSS_ATTR_FLAC_LARGE_IRAM IBSS_ATTR
|
||||||
#define IBSS_ATTR_FLAC_XLARGE_IRAM
|
#define IBSS_ATTR_FLAC_XLARGE_IRAM
|
||||||
|
|
||||||
#elif defined(CPU_S5L870X)
|
#elif (CONFIG_CPU == S5L8700) || (CONFIG_CPU == S5L8701)
|
||||||
#define ICODE_ATTR_FLAC ICODE_ATTR
|
#define ICODE_ATTR_FLAC ICODE_ATTR
|
||||||
#define IBSS_ATTR_FLAC IBSS_ATTR
|
#define IBSS_ATTR_FLAC IBSS_ATTR
|
||||||
/* Enough IRAM to move even more additional data to it. */
|
/* Enough IRAM to move even more additional data to it. */
|
||||||
|
|
|
@ -58,7 +58,7 @@ extern "C" {
|
||||||
/* Keep the data arrays of bitsreadr.c in IRAM. */
|
/* Keep the data arrays of bitsreadr.c in IRAM. */
|
||||||
#define ICONST_ATTR_MPC_BITSREADER ICONST_ATTR
|
#define ICONST_ATTR_MPC_BITSREADER ICONST_ATTR
|
||||||
|
|
||||||
#elif (CONFIG_CPU == PP5022) || (CONFIG_CPU == PP5024)
|
#elif (CONFIG_CPU == PP5022) || (CONFIG_CPU == PP5024) || (CONFIG_CPU == S5L8702)
|
||||||
/* Enough IRAM to move additional data and code to it. */
|
/* Enough IRAM to move additional data and code to it. */
|
||||||
#define IBSS_ATTR_MPC_LARGE_IRAM IBSS_ATTR
|
#define IBSS_ATTR_MPC_LARGE_IRAM IBSS_ATTR
|
||||||
#define ICODE_ATTR_MPC_LARGE_IRAM ICODE_ATTR
|
#define ICODE_ATTR_MPC_LARGE_IRAM ICODE_ATTR
|
||||||
|
@ -70,7 +70,7 @@ extern "C" {
|
||||||
* sv7/sv8 bitstream demuxing into IRAM. This config is faster. */
|
* sv7/sv8 bitstream demuxing into IRAM. This config is faster. */
|
||||||
#define ICONST_ATTR_MPC_BITSREADER
|
#define ICONST_ATTR_MPC_BITSREADER
|
||||||
|
|
||||||
#elif defined(CPU_S5L870X)
|
#elif (CONFIG_CPU == S5L8700) || (CONFIG_CPU == S5L8701)
|
||||||
/* Enough IRAM to move additional data and code to it. */
|
/* Enough IRAM to move additional data and code to it. */
|
||||||
#define IBSS_ATTR_MPC_LARGE_IRAM IBSS_ATTR
|
#define IBSS_ATTR_MPC_LARGE_IRAM IBSS_ATTR
|
||||||
#define ICODE_ATTR_MPC_LARGE_IRAM ICODE_ATTR
|
#define ICODE_ATTR_MPC_LARGE_IRAM ICODE_ATTR
|
||||||
|
|
|
@ -95,7 +95,7 @@
|
||||||
/* Not enough IRAM available to move further data to it. */
|
/* Not enough IRAM available to move further data to it. */
|
||||||
#define IBSS_ATTR_SPC_LARGE_IRAM
|
#define IBSS_ATTR_SPC_LARGE_IRAM
|
||||||
|
|
||||||
#elif (CONFIG_CPU == PP5022) || (CONFIG_CPU == PP5024)
|
#elif (CONFIG_CPU == PP5022) || (CONFIG_CPU == PP5024) || (CONFIG_CPU == S5L8702)
|
||||||
#define IBSS_ATTR_SPC IBSS_ATTR
|
#define IBSS_ATTR_SPC IBSS_ATTR
|
||||||
#define ICODE_ATTR_SPC ICODE_ATTR
|
#define ICODE_ATTR_SPC ICODE_ATTR
|
||||||
#define ICONST_ATTR_SPC ICONST_ATTR
|
#define ICONST_ATTR_SPC ICONST_ATTR
|
||||||
|
@ -103,7 +103,7 @@
|
||||||
/* Not enough IRAM available to move further data to it. */
|
/* Not enough IRAM available to move further data to it. */
|
||||||
#define IBSS_ATTR_SPC_LARGE_IRAM
|
#define IBSS_ATTR_SPC_LARGE_IRAM
|
||||||
|
|
||||||
#elif defined(CPU_S5L870X)
|
#elif (CONFIG_CPU == S5L8700) || (CONFIG_CPU == S5L8701)
|
||||||
#define IBSS_ATTR_SPC IBSS_ATTR
|
#define IBSS_ATTR_SPC IBSS_ATTR
|
||||||
#define ICODE_ATTR_SPC ICODE_ATTR
|
#define ICODE_ATTR_SPC ICODE_ATTR
|
||||||
#define ICONST_ATTR_SPC ICONST_ATTR
|
#define ICONST_ATTR_SPC ICONST_ATTR
|
||||||
|
|
|
@ -52,13 +52,14 @@
|
||||||
#define LSP_POW_BITS 7
|
#define LSP_POW_BITS 7
|
||||||
|
|
||||||
|
|
||||||
#if (CONFIG_CPU == PP5022) || (CONFIG_CPU == PP5024) || (CONFIG_CPU == MCF5250)
|
#if (CONFIG_CPU == PP5022) || (CONFIG_CPU == PP5024) || \
|
||||||
|
(CONFIG_CPU == MCF5250) || (CONFIG_CPU == S5L8702)
|
||||||
/* PP5022/24 and MCF5250 have 128KB of IRAM. 80KB are allocated for codecs */
|
/* PP5022/24 and MCF5250 have 128KB of IRAM. 80KB are allocated for codecs */
|
||||||
#define IBSS_ATTR_WMA_LARGE_IRAM IBSS_ATTR
|
#define IBSS_ATTR_WMA_LARGE_IRAM IBSS_ATTR
|
||||||
#define IBSS_ATTR_WMA_XL_IRAM
|
#define IBSS_ATTR_WMA_XL_IRAM
|
||||||
#define ICONST_ATTR_WMA_XL_IRAM
|
#define ICONST_ATTR_WMA_XL_IRAM
|
||||||
|
|
||||||
#elif defined(CPU_S5L870X)
|
#elif (CONFIG_CPU == S5L8700) || (CONFIG_CPU == S5L8701)
|
||||||
/* S5L870x has even more IRAM. Use it. */
|
/* S5L870x has even more IRAM. Use it. */
|
||||||
#define IBSS_ATTR_WMA_LARGE_IRAM IBSS_ATTR
|
#define IBSS_ATTR_WMA_LARGE_IRAM IBSS_ATTR
|
||||||
#define IBSS_ATTR_WMA_XL_IRAM IBSS_ATTR
|
#define IBSS_ATTR_WMA_XL_IRAM IBSS_ATTR
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
#define IBSS_ATTR_WMAPRO_VLC_TABLES
|
#define IBSS_ATTR_WMAPRO_VLC_TABLES
|
||||||
#define ICONST_ATTR_WMAPRO_WIN_VS_TMP
|
#define ICONST_ATTR_WMAPRO_WIN_VS_TMP
|
||||||
|
|
||||||
#elif (CONFIG_CPU == PP5022) || (CONFIG_CPU == PP5024)
|
#elif (CONFIG_CPU == PP5022) || (CONFIG_CPU == PP5024) || (CONFIG_CPU == S5L8702)
|
||||||
/* Enough IRAM to move additional data and code to it. */
|
/* Enough IRAM to move additional data and code to it. */
|
||||||
#define IBSS_ATTR_WMAPRO_LARGE_IRAM IBSS_ATTR
|
#define IBSS_ATTR_WMAPRO_LARGE_IRAM IBSS_ATTR
|
||||||
#define ICODE_ATTR_WMAPRO_LARGE_IRAM ICODE_ATTR
|
#define ICODE_ATTR_WMAPRO_LARGE_IRAM ICODE_ATTR
|
||||||
|
@ -18,7 +18,7 @@
|
||||||
#define IBSS_ATTR_WMAPRO_VLC_TABLES
|
#define IBSS_ATTR_WMAPRO_VLC_TABLES
|
||||||
#define ICONST_ATTR_WMAPRO_WIN_VS_TMP
|
#define ICONST_ATTR_WMAPRO_WIN_VS_TMP
|
||||||
|
|
||||||
#elif defined(CPU_S5L870X)
|
#elif (CONFIG_CPU == S5L8700) || (CONFIG_CPU == S5L8701)
|
||||||
/* Enough IRAM to move additional data and code to it. */
|
/* Enough IRAM to move additional data and code to it. */
|
||||||
#define IBSS_ATTR_WMAPRO_LARGE_IRAM IBSS_ATTR
|
#define IBSS_ATTR_WMAPRO_LARGE_IRAM IBSS_ATTR
|
||||||
#define ICODE_ATTR_WMAPRO_LARGE_IRAM ICODE_ATTR
|
#define ICODE_ATTR_WMAPRO_LARGE_IRAM ICODE_ATTR
|
||||||
|
|
Loading…
Reference in a new issue