From 678b6d02aca2fab258c3101a05331bd3b6367a62 Mon Sep 17 00:00:00 2001 From: Rafaël Carré Date: Tue, 18 Nov 2008 17:15:56 +0000 Subject: 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 --- firmware/target/arm/as3525/app.lds | 41 +++++++++++++++++++++++++++----------- firmware/target/arm/crt0.S | 32 ++++++++++++++++++++++++----- 2 files changed, 56 insertions(+), 17 deletions(-) (limited to 'firmware/target/arm') diff --git a/firmware/target/arm/as3525/app.lds b/firmware/target/arm/as3525/app.lds index 08b119eb3f..c2d3ed83ee 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 829004193f..35d0aecccb 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 -- cgit v1.2.3