diff --git a/apps/plugins/plugin.lds b/apps/plugins/plugin.lds index aea44e7d40..7037496be4 100644 --- a/apps/plugins/plugin.lds +++ b/apps/plugins/plugin.lds @@ -159,9 +159,10 @@ OUTPUT_FORMAT(elf32-littlemips) #elif CONFIG_CPU==S5L8702 /* S5L8702 have 256KB of IRAM */ +/* IRAM1 (2nd 128KB block) is not used because it is slower than DRAM */ #define DRAMORIG 0x08000000 -#define IRAMORIG (0x00000000 + (56*1024)) -#define IRAMSIZE (200*1024) +#define IRAMORIG (0x00000000 + (48*1024)) +#define IRAMSIZE (80*1024) #elif CONFIG_CPU == JZ4732 || CONFIG_CPU == JZ4760B #undef STUBOFFSET diff --git a/firmware/target/arm/s5l8702/app.lds b/firmware/target/arm/s5l8702/app.lds index 60ecdc6738..fceb732e4f 100644 --- a/firmware/target/arm/s5l8702/app.lds +++ b/firmware/target/arm/s5l8702/app.lds @@ -19,7 +19,7 @@ STARTUP(target/arm/s5l8702/crt0.o) #define DRAMSIZE (DRAM_SIZE - PLUGINSIZE - CODECSIZE - TTB_SIZE) #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 */ #define ENDADDR (ENDAUDIOADDR + CODECSIZE) diff --git a/firmware/target/arm/s5l8702/pcm-s5l8702.c b/firmware/target/arm/s5l8702/pcm-s5l8702.c index e053b309b7..86a0edd54a 100644 --- a/firmware/target/arm/s5l8702/pcm-s5l8702.c +++ b/firmware/target/arm/s5l8702/pcm-s5l8702.c @@ -207,7 +207,6 @@ void pcm_dma_apply_settings(void) void pcm_play_dma_init(void) { - PWRCON(0) &= ~(1 << 4); PWRCON(1) &= ~(1 << 7); dmac_ch_init(&dma_play_ch, &dma_play_ch_cfg); @@ -406,7 +405,6 @@ void pcm_rec_dma_init(void) if (pcm_rec_initialized) return; - PWRCON(0) &= ~(1 << 4); PWRCON(1) &= ~(1 << 7); dmac_ch_init(&dma_rec_ch, &dma_rec_ch_cfg); diff --git a/firmware/target/arm/s5l8702/system-s5l8702.c b/firmware/target/arm/s5l8702/system-s5l8702.c index 459f4c36c6..9257aff85a 100644 --- a/firmware/target/arm/s5l8702/system-s5l8702.c +++ b/firmware/target/arm/s5l8702/system-s5l8702.c @@ -199,6 +199,9 @@ enum { void system_init(void) { + /* disable IRAM1 (not used because it is slower than DRAM) */ + clockgate_enable(CLOCKGATE_SM1, false); + clocking_init(clk_modes, 0); #ifndef BOOTLOADER gpio_preinit(); diff --git a/lib/rbcodec/codecs/libcook/cook.h b/lib/rbcodec/codecs/libcook/cook.h index fcb437a0e1..c2a5357c98 100644 --- a/lib/rbcodec/codecs/libcook/cook.h +++ b/lib/rbcodec/codecs/libcook/cook.h @@ -29,15 +29,16 @@ #include "codeclib.h" -#if (CONFIG_CPU == PP5022) || (CONFIG_CPU == PP5024) || (CONFIG_CPU == MCF5250) -/* PP5022/24, MCF5250 have large IRAM */ +#if (CONFIG_CPU == PP5022) || (CONFIG_CPU == PP5024) || \ + (CONFIG_CPU == MCF5250) || (CONFIG_CPU == S5L8702) +/* PP5022/24, S5L8702, MCF5250 have large IRAM */ #define IBSS_ATTR_COOK_LARGE_IRAM IBSS_ATTR #define ICODE_ATTR_COOK_LARGE_IRAM ICODE_ATTR #define ICONST_ATTR_COOK_LARGE_IRAM ICONST_ATTR #define IBSS_ATTR_COOK_VLCBUF #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. */ #define IBSS_ATTR_COOK_LARGE_IRAM IBSS_ATTR #define ICODE_ATTR_COOK_LARGE_IRAM ICODE_ATTR diff --git a/lib/rbcodec/codecs/libfaad/common.h b/lib/rbcodec/codecs/libfaad/common.h index 720042b4aa..c5eaa0aa51 100644 --- a/lib/rbcodec/codecs/libfaad/common.h +++ b/lib/rbcodec/codecs/libfaad/common.h @@ -58,14 +58,14 @@ extern struct codec_api* ci; #define ICONST_ATTR_FAAD_LARGE_IRAM ICONST_ATTR #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. */ #define IBSS_ATTR_FAAD_LARGE_IRAM IBSS_ATTR #define ICODE_ATTR_FAAD_LARGE_IRAM ICODE_ATTR #define ICONST_ATTR_FAAD_LARGE_IRAM ICONST_ATTR #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. */ #define IBSS_ATTR_FAAD_LARGE_IRAM IBSS_ATTR #define ICODE_ATTR_FAAD_LARGE_IRAM ICODE_ATTR diff --git a/lib/rbcodec/codecs/libffmpegFLAC/bitstream.h b/lib/rbcodec/codecs/libffmpegFLAC/bitstream.h index 2ec54c42fa..cd9589de40 100644 --- a/lib/rbcodec/codecs/libffmpegFLAC/bitstream.h +++ b/lib/rbcodec/codecs/libffmpegFLAC/bitstream.h @@ -18,14 +18,15 @@ #define ICODE_ATTR #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 IBSS_ATTR_FLAC IBSS_ATTR /* Enough IRAM to move additional data to it. */ #define IBSS_ATTR_FLAC_LARGE_IRAM IBSS_ATTR #define IBSS_ATTR_FLAC_XLARGE_IRAM -#elif defined(CPU_S5L870X) +#elif (CONFIG_CPU == S5L8700) || (CONFIG_CPU == S5L8701) #define ICODE_ATTR_FLAC ICODE_ATTR #define IBSS_ATTR_FLAC IBSS_ATTR /* Enough IRAM to move even more additional data to it. */ diff --git a/lib/rbcodec/codecs/libmusepack/mpcdec.h b/lib/rbcodec/codecs/libmusepack/mpcdec.h index 02003cb01b..24c06bc4a0 100644 --- a/lib/rbcodec/codecs/libmusepack/mpcdec.h +++ b/lib/rbcodec/codecs/libmusepack/mpcdec.h @@ -58,7 +58,7 @@ extern "C" { /* Keep the data arrays of bitsreadr.c in IRAM. */ #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. */ #define IBSS_ATTR_MPC_LARGE_IRAM IBSS_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. */ #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. */ #define IBSS_ATTR_MPC_LARGE_IRAM IBSS_ATTR #define ICODE_ATTR_MPC_LARGE_IRAM ICODE_ATTR diff --git a/lib/rbcodec/codecs/libspc/spc_codec.h b/lib/rbcodec/codecs/libspc/spc_codec.h index 446690f726..75c344474e 100644 --- a/lib/rbcodec/codecs/libspc/spc_codec.h +++ b/lib/rbcodec/codecs/libspc/spc_codec.h @@ -95,7 +95,7 @@ /* Not enough IRAM available to move further data to it. */ #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 ICODE_ATTR_SPC ICODE_ATTR #define ICONST_ATTR_SPC ICONST_ATTR @@ -103,7 +103,7 @@ /* Not enough IRAM available to move further data to it. */ #define IBSS_ATTR_SPC_LARGE_IRAM -#elif defined(CPU_S5L870X) +#elif (CONFIG_CPU == S5L8700) || (CONFIG_CPU == S5L8701) #define IBSS_ATTR_SPC IBSS_ATTR #define ICODE_ATTR_SPC ICODE_ATTR #define ICONST_ATTR_SPC ICONST_ATTR diff --git a/lib/rbcodec/codecs/libwma/wmadec.h b/lib/rbcodec/codecs/libwma/wmadec.h index 76429dede1..b3bca4f452 100644 --- a/lib/rbcodec/codecs/libwma/wmadec.h +++ b/lib/rbcodec/codecs/libwma/wmadec.h @@ -52,13 +52,14 @@ #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 */ #define IBSS_ATTR_WMA_LARGE_IRAM IBSS_ATTR #define IBSS_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. */ #define IBSS_ATTR_WMA_LARGE_IRAM IBSS_ATTR #define IBSS_ATTR_WMA_XL_IRAM IBSS_ATTR diff --git a/lib/rbcodec/codecs/libwmapro/wmaprodec.h b/lib/rbcodec/codecs/libwmapro/wmaprodec.h index d8398fc9f1..46b4770f46 100644 --- a/lib/rbcodec/codecs/libwmapro/wmaprodec.h +++ b/lib/rbcodec/codecs/libwmapro/wmaprodec.h @@ -10,7 +10,7 @@ #define IBSS_ATTR_WMAPRO_VLC_TABLES #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. */ #define IBSS_ATTR_WMAPRO_LARGE_IRAM IBSS_ATTR #define ICODE_ATTR_WMAPRO_LARGE_IRAM ICODE_ATTR @@ -18,7 +18,7 @@ #define IBSS_ATTR_WMAPRO_VLC_TABLES #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. */ #define IBSS_ATTR_WMAPRO_LARGE_IRAM IBSS_ATTR #define ICODE_ATTR_WMAPRO_LARGE_IRAM ICODE_ATTR