diff options
| author | Rafaël Carré <rafael.carre@gmail.com> | 2008-11-18 17:15:56 +0000 |
|---|---|---|
| committer | Rafaël Carré <rafael.carre@gmail.com> | 2008-11-18 17:15:56 +0000 |
| commit | 678b6d02aca2fab258c3101a05331bd3b6367a62 (patch) | |
| tree | 6a16485af212c951d3d383e671939621ea8e2330 | |
| parent | b18eda1c95332503e3e4b2d5e4ca34d22daf2976 (diff) | |
| download | rockbox-678b6d02aca2fab258c3101a05331bd3b6367a62.zip rockbox-678b6d02aca2fab258c3101a05331bd3b6367a62.tar.gz rockbox-678b6d02aca2fab258c3101a05331bd3b6367a62.tar.bz2 rockbox-678b6d02aca2fab258c3101a05331bd3b6367a62.tar.xz | |
Sansa AMS: Use IRAM (in app linker script and crt0.S)
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@19137 a1c6a512-1295-4272-9138-f99709370657
| -rw-r--r-- | firmware/target/arm/as3525/app.lds | 41 | ||||
| -rw-r--r-- | firmware/target/arm/crt0.S | 32 |
2 files changed, 56 insertions, 17 deletions
diff --git a/firmware/target/arm/as3525/app.lds b/firmware/target/arm/as3525/app.lds index 08b119e..c2d3ed8 100644 --- a/firmware/target/arm/as3525/app.lds +++ b/firmware/target/arm/as3525/app.lds @@ -38,20 +38,11 @@ SECTIONS { loadaddress = 0x30000000; - .vectors DRAMORIG : - { - _vectorstart = .; - *(.vectors*); - *(.init.text) - . = ALIGN(0x4); - } > DRAM - .text : { _textstart = .; *(.text) *(.text*) - *(.icode) *(.glue_7) *(.glue_7t) . = ALIGN(0x4); @@ -63,14 +54,12 @@ SECTIONS *(.rodata*) *(.rodata.str1.1) *(.rodata.str1.4) - *(.irodata*) . = ALIGN(0x4); } > DRAM .data : { *(.data*) - *(.idata*) . = ALIGN(0x4); } > DRAM @@ -93,12 +82,40 @@ SECTIONS { _edata = .; *(.bss*) - *(.ibss*) *(COMMON) . = ALIGN(0x4); _end = .; } > DRAM + .vectors IRAMORIG: + { + _vectors_start = .; + *(.init.text) + } > IRAM AT > DRAM + + _vectorscopy = LOADADDR(.vectors); + + .ibss (NOLOAD) : + { + _iedata = .; + *(.qharray) + *(.ibss) + . = ALIGN(0x4); + _iend = .; + } > IRAM + + .iram _iend : + { + _iramstart = .; + *(.icode) + *(.irodata) + *(.idata) + . = ALIGN(0x4); + _iramend = .; + } > IRAM AT> DRAM + + _iramcopy = LOADADDR(.iram); + .audiobuf (NOLOAD) : { . = ALIGN(4); diff --git a/firmware/target/arm/crt0.S b/firmware/target/arm/crt0.S index 8290041..35d0aec 100644 --- a/firmware/target/arm/crt0.S +++ b/firmware/target/arm/crt0.S @@ -50,22 +50,43 @@ start: .word irq_handler .word fiq_handler -vectors_end: +_vectorsend: .text newstart: msr cpsr_c, #0xd3 /* enter supervisor mode, disable IRQ/FIQ */ -#if CONFIG_CPU==AS3525 && !defined(BOOTLOADER) /* relocate vectors */ +#if CONFIG_CPU==AS3525 && !defined(BOOTLOADER) + + /* relocate vectors */ mov r1, #0 @ destination - ldr r2, =start @ source - ldr r3, =vectors_end @ end + ldr r2, =_vectorscopy @ source + ldr r3, =_vectorsend @ end 1: ldr r0, [r2], #4 str r0, [r1], #4 - cmp r3, r2 + cmp r1, r3 bne 1b + + /* Zero out IBSS */ + ldr r2, =_iedata + ldr r3, =_iend + mov r4, #0 +1: + cmp r3, r2 + strhi r4, [r2], #4 + bhi 1b + + /* Copy the IRAM */ + ldr r2, =_iramcopy + ldr r3, =_iramstart + ldr r4, =_iramend +1: + cmp r4, r3 + ldrhi r5, [r2], #4 + strhi r5, [r3], #4 + bhi 1b #endif /* Initialise bss section to zero */ @@ -102,6 +123,7 @@ newstart: /* Switch back to supervisor mode */ msr cpsr_c, #0xd3 + bl main |