summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRafaël Carré <rafael.carre@gmail.com>2008-11-18 17:15:56 +0000
committerRafaël Carré <rafael.carre@gmail.com>2008-11-18 17:15:56 +0000
commit678b6d02aca2fab258c3101a05331bd3b6367a62 (patch)
tree6a16485af212c951d3d383e671939621ea8e2330
parentb18eda1c95332503e3e4b2d5e4ca34d22daf2976 (diff)
downloadrockbox-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.lds41
-rw-r--r--firmware/target/arm/crt0.S32
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