From 0218397cf4f0420a258a8ff6d87cc630cb3bada6 Mon Sep 17 00:00:00 2001 From: Michael Sevakis Date: Mon, 5 May 2008 13:30:29 +0000 Subject: [PATCH] Gigabeat S bootloader: 1) Switch order of .vectors to be contiguous with initialized sections. 2) Clean all caches in main before doing anything else because vector copying counts as self-modifying code. Up to v.00000012. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@17381 a1c6a512-1295-4272-9138-f99709370657 --- bootloader/gigabeat-s.c | 5 ++++- firmware/target/arm/imx31/boot.lds | 24 ++++++++++++------------ 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/bootloader/gigabeat-s.c b/bootloader/gigabeat-s.c index 8858479de3..abfe57ce1f 100644 --- a/bootloader/gigabeat-s.c +++ b/bootloader/gigabeat-s.c @@ -147,8 +147,11 @@ void main(void) char tarstring[6]; char model[5]; + /* Flush and invalidate all caches (because vectors were written) */ + invalidate_icache(); + lcd_clear_display(); - printf("Gigabeat S Rockbox Bootloader v.00000011"); + printf("Gigabeat S Rockbox Bootloader v.00000012"); system_init(); kernel_init(); printf("kernel init done"); diff --git a/firmware/target/arm/imx31/boot.lds b/firmware/target/arm/imx31/boot.lds index d8bb2fc3d1..a7570c1cf0 100644 --- a/firmware/target/arm/imx31/boot.lds +++ b/firmware/target/arm/imx31/boot.lds @@ -56,8 +56,17 @@ SECTIONS . = ALIGN(0x4); _dataend = . ; } > DRAM + + .vectors 0x0 : + { + _vectorsstart = .; + *(.vectors); + KEEP(*(.vectors)); + _vectorsend = .; + } AT > DRAM + _vectorscopy = LOADADDR(.vectors); - .stack : + .stack (NOLOAD) : { *(.stack) _stackbegin = .; @@ -67,7 +76,7 @@ SECTIONS stackend = .; } > IRAM - .bss : + .bss (NOLOAD) : { _edata = .; *(.bss*); @@ -75,16 +84,7 @@ SECTIONS *(COMMON) _end = .; } > DRAM - - .vectors 0x0 : - { - _vectorsstart = .; - *(.vectors); - KEEP(*(.vectors)); - _vectorsend = .; - } AT > DRAM - _vectorscopy = LOADADDR(.vectors); - + .devbss (NOLOAD) : { _devbssdata = .;