summaryrefslogtreecommitdiff
path: root/bootloader/gigabeat.c
diff options
context:
space:
mode:
Diffstat (limited to 'bootloader/gigabeat.c')
-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)
75 int(*kernel_entry)(void); 75 int(*kernel_entry)(void);
76 76
77 system_init(); 77 system_init();
78 kernel_init(); /* Need the kernel to sleep */
79
80 enable_interrupt(IRQ_FIQ_STATUS);
81
78 lcd_init(); 82 lcd_init();
79 backlight_init(); 83 backlight_init();
80 button_init(); 84 button_init();
81 font_init(); 85 font_init();
82 kernel_init(); /* Need the kernel to sleep */
83 adc_init(); 86 adc_init();
84 87
85 lcd_setfont(FONT_SYSFIXED); 88 lcd_setfont(FONT_SYSFIXED);
@@ -192,6 +195,9 @@ void main(void)
192 195
193 printf("Loading firmware"); 196 printf("Loading firmware");
194 197
198 /* Flush out anything pending first */
199 invalidate_icache();
200
195 loadbuffer = (unsigned char*) 0x31000000; 201 loadbuffer = (unsigned char*) 0x31000000;
196 buffer_size = (unsigned char*)0x31400000 - loadbuffer; 202 buffer_size = (unsigned char*)0x31400000 - loadbuffer;
197 203
@@ -199,10 +205,22 @@ void main(void)
199 if(rc < 0) 205 if(rc < 0)
200 error(EBOOTFILE, rc); 206 error(EBOOTFILE, rc);
201 207
208 storage_close();
209 system_prepare_fw_start();
210
202 if (rc == EOK) 211 if (rc == EOK)
203 { 212 {
213 invalidate_icache();
204 kernel_entry = (void*) loadbuffer; 214 kernel_entry = (void*) loadbuffer;
205 rc = kernel_entry(); 215 rc = kernel_entry();
206 } 216 }
217
218#if 0
219 /* Halt */
220 while (1)
221 core_idle();
222#else
223 /* Return and restart */
224#endif
207} 225}
208 226