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 = .;