summaryrefslogtreecommitdiffstats
path: root/bootloader
diff options
context:
space:
mode:
Diffstat (limited to 'bootloader')
-rw-r--r--bootloader/gigabeat.c20
1 files changed, 19 insertions, 1 deletions
diff --git a/bootloader/gigabeat.c b/bootloader/gigabeat.c
index 11ab93a5e2..a3732b0e06 100644
--- a/bootloader/gigabeat.c
+++ b/bootloader/gigabeat.c
@@ -75,11 +75,14 @@ void main(void)
int(*kernel_entry)(void);
system_init();
+ kernel_init(); /* Need the kernel to sleep */
+
+ enable_interrupt(IRQ_FIQ_STATUS);
+
lcd_init();
backlight_init();
button_init();
font_init();
- kernel_init(); /* Need the kernel to sleep */
adc_init();
lcd_setfont(FONT_SYSFIXED);
@@ -192,6 +195,9 @@ void main(void)
printf("Loading firmware");
+ /* Flush out anything pending first */
+ invalidate_icache();
+
loadbuffer = (unsigned char*) 0x31000000;
buffer_size = (unsigned char*)0x31400000 - loadbuffer;
@@ -199,10 +205,22 @@ void main(void)
if(rc < 0)
error(EBOOTFILE, rc);
+ storage_close();
+ system_prepare_fw_start();
+
if (rc == EOK)
{
+ invalidate_icache();
kernel_entry = (void*) loadbuffer;
rc = kernel_entry();
}
+
+#if 0
+ /* Halt */
+ while (1)
+ core_idle();
+#else
+ /* Return and restart */
+#endif
}