7442742208
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
141 lines
2.5 KiB
Text
141 lines
2.5 KiB
Text
#define ASM
|
|
#include "config.h"
|
|
#include "cpu.h"
|
|
|
|
ENTRY(start)
|
|
|
|
OUTPUT_FORMAT(elf32-littlearm)
|
|
OUTPUT_ARCH(arm)
|
|
STARTUP(target/arm/s5l8702/crt0.o)
|
|
|
|
#define PLUGINSIZE PLUGIN_BUFFER_SIZE
|
|
#define CODECSIZE CODEC_SIZE
|
|
|
|
#define IRAMORIG 0x0
|
|
#define DRAMORIG 0x08000000
|
|
|
|
/* End of the audio buffer, where the codec buffer starts */
|
|
#define ENDAUDIOADDR (DRAMORIG + DRAMSIZE)
|
|
|
|
#define DRAMSIZE (DRAM_SIZE - PLUGINSIZE - CODECSIZE - TTB_SIZE)
|
|
#define CODECORIG (ENDAUDIOADDR)
|
|
#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)
|
|
|
|
MEMORY
|
|
{
|
|
IRAM : ORIGIN = IRAMORIG, LENGTH = IRAMSIZE
|
|
DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE
|
|
}
|
|
|
|
SECTIONS
|
|
{
|
|
loadaddress = DRAMORIG;
|
|
|
|
.intvect : {
|
|
_intvectstart = . ;
|
|
*(.intvect)
|
|
_intvectend = _newstart ;
|
|
} >IRAM AT> DRAM
|
|
_intvectcopy = LOADADDR(.intvect) ;
|
|
|
|
.text :
|
|
{
|
|
_loadaddress = .;
|
|
_textstart = .;
|
|
*(.init.text)
|
|
*(.text*)
|
|
*(.glue_7)
|
|
*(.glue_7t)
|
|
. = ALIGN(0x4);
|
|
} > DRAM
|
|
|
|
.rodata :
|
|
{
|
|
*(.rodata*)
|
|
. = ALIGN(0x4);
|
|
} > DRAM
|
|
|
|
.data :
|
|
{
|
|
*(.data*)
|
|
. = ALIGN(0x4);
|
|
} > DRAM
|
|
|
|
/DISCARD/ :
|
|
{
|
|
*(.eh_frame)
|
|
}
|
|
|
|
.iram :
|
|
{
|
|
_iramstart = .;
|
|
*(.icode*)
|
|
*(.irodata*)
|
|
*(.idata*)
|
|
. = ALIGN(0x4);
|
|
_iramend = .;
|
|
} > IRAM AT> DRAM
|
|
_iramcopy = LOADADDR(.iram) ;
|
|
|
|
.ibss (NOLOAD) :
|
|
{
|
|
_iedata = .;
|
|
*(.qharray)
|
|
*(.ibss*)
|
|
. = ALIGN(0x4);
|
|
_iend = .;
|
|
} > IRAM
|
|
|
|
.stack (NOLOAD) :
|
|
{
|
|
*(.stack)
|
|
stackbegin = .;
|
|
_stackbegin = .;
|
|
. += 0x2000;
|
|
stackend = .;
|
|
_stackend = .;
|
|
_irqstackbegin = .;
|
|
. += 0x400;
|
|
_irqstackend = .;
|
|
_fiqstackbegin = .;
|
|
. += 0x400;
|
|
_fiqstackend = .;
|
|
} > IRAM
|
|
|
|
.bss (NOLOAD) :
|
|
{
|
|
_edata = .;
|
|
*(.bss*)
|
|
*(COMMON)
|
|
. = ALIGN(0x4);
|
|
_end = .;
|
|
} > DRAM
|
|
|
|
.audiobuf (NOLOAD) :
|
|
{
|
|
. = ALIGN(4);
|
|
_audiobuffer = .;
|
|
audiobuffer = .;
|
|
} > DRAM
|
|
|
|
.audiobufend ENDAUDIOADDR (NOLOAD) :
|
|
{
|
|
audiobufend = .;
|
|
_audiobufend = .;
|
|
} > DRAM
|
|
|
|
.codec CODECORIG (NOLOAD) :
|
|
{
|
|
codecbuf = .;
|
|
_codecbuf = .;
|
|
} > DRAM
|
|
|
|
.plugin ENDADDR (NOLOAD) :
|
|
{
|
|
_pluginbuf = .;
|
|
pluginbuf = .;
|
|
}
|
|
}
|