From 82ecc75e68ee3edc22514c8a33aa7774e02fd4d4 Mon Sep 17 00:00:00 2001 From: Amaury Pouly Date: Sat, 2 Jul 2011 02:12:10 +0000 Subject: imx233/fuze+: make config.h more correct, remove logo from bootloader, update linker file and crt0 to produce a single blob into dram git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30111 a1c6a512-1295-4272-9138-f99709370657 --- firmware/target/arm/imx233/boot.lds | 51 +++++++++++++++++-------------------- firmware/target/arm/imx233/crt0.S | 37 ++++++++++++++++++++++++--- 2 files changed, 56 insertions(+), 32 deletions(-) (limited to 'firmware/target/arm') diff --git a/firmware/target/arm/imx233/boot.lds b/firmware/target/arm/imx233/boot.lds index 39e570a03e..cb925b055e 100644 --- a/firmware/target/arm/imx233/boot.lds +++ b/firmware/target/arm/imx233/boot.lds @@ -14,32 +14,6 @@ MEMORY SECTIONS { - .vectors 0 : - { - *(.vectors); - . = ALIGN(0x4); - } > IRAM - - .itext : - { - *(.icode) - *(.init.text) - . = ALIGN(0x4); - } > IRAM - - .idata : - { - *(.qharray) - *(.idata) - *(.irodata) - . = ALIGN(0x4); - } > IRAM - - .ibss : - { - *(.ibss) - } > IRAM - .text : { *(.text*) @@ -52,13 +26,34 @@ SECTIONS _dataend = . ; } > DRAM + .iram : + { + _iramstart = .; // always 0 + *(.vectors) + KEEP(*(.vectors));// otherwise there are no reference to it and the linker strip it + *(.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 = .; } > DRAM diff --git a/firmware/target/arm/imx233/crt0.S b/firmware/target/arm/imx233/crt0.S index 836c3e88cb..e233d439e0 100644 --- a/firmware/target/arm/imx233/crt0.S +++ b/firmware/target/arm/imx233/crt0.S @@ -23,10 +23,8 @@ .section .vectors,"ax",%progbits .code 32 -.global start -start: /* most handlers are in DRAM which is too far away for a relative jump */ - ldr pc, =newstart + ldr pc, =start ldr pc, =undef_instr_handler ldr pc, =software_int_handler ldr pc, =prefetch_abort_handler @@ -36,8 +34,39 @@ start: ldr pc, =fiq_handler .text -newstart: +.global start +start: msr cpsr_c, #0xd3 /* enter supervisor mode, disable IRQ/FIQ */ + /* 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 */ + /* must be done before bss is zeroed */ + ldr r2, =_iramcopy + ldr r3, =_iramstart + ldr r4, =_iramend +1: + cmp r4, r3 + ldrhi r5, [r2], #4 + strhi r5, [r3], #4 + bhi 1b + + /* Initialise bss section to zero */ + ldr r2, =_edata + ldr r3, =_end + mov r4, #0 +1: + cmp r3, r2 + strhi r4, [r2], #4 + bhi 1b + + /* Set up some stack and munge it with 0xdeadbeef */ ldr sp, =stackend ldr r2, =stackbegin -- cgit v1.2.3