diff options
Diffstat (limited to 'firmware/crt0.S')
-rw-r--r-- | firmware/crt0.S | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/firmware/crt0.S b/firmware/crt0.S index 5946276604..82d275411e 100644 --- a/firmware/crt0.S +++ b/firmware/crt0.S | |||
@@ -251,6 +251,9 @@ boot_table: | |||
251 | /* Set up stack for IRQ mode */ | 251 | /* Set up stack for IRQ mode */ |
252 | msr cpsr_c, #0xd2 | 252 | msr cpsr_c, #0xd2 |
253 | ldr sp, =irq_stack | 253 | ldr sp, =irq_stack |
254 | /* Set up stack for FIQ mode */ | ||
255 | msr cpsr_c, #0xd1 | ||
256 | ldr sp, =fiq_stack | ||
254 | /* Let abort mode use IRQ stack */ | 257 | /* Let abort mode use IRQ stack */ |
255 | msr cpsr_c, #0xd7 | 258 | msr cpsr_c, #0xd7 |
256 | ldr sp, =irq_stack | 259 | ldr sp, =irq_stack |
@@ -287,6 +290,7 @@ vectors: | |||
287 | 290 | ||
288 | #ifndef STUB | 291 | #ifndef STUB |
289 | .global irq | 292 | .global irq |
293 | .global fiq | ||
290 | .global UIE | 294 | .global UIE |
291 | #endif | 295 | #endif |
292 | 296 | ||
@@ -313,6 +317,10 @@ prefetch_abort_handler: | |||
313 | b UIE | 317 | b UIE |
314 | 318 | ||
315 | fiq_handler: | 319 | fiq_handler: |
320 | stmfd sp!, {r0-r3, r12, lr} | ||
321 | mov lr, pc | ||
322 | ldr pc, =fiq | ||
323 | ldmfd sp!, {r0-r3, r12, lr} | ||
316 | subs pc, lr, #4 | 324 | subs pc, lr, #4 |
317 | 325 | ||
318 | data_abort_handler: | 326 | data_abort_handler: |
@@ -337,6 +345,10 @@ UIE: | |||
337 | .space 256*4 | 345 | .space 256*4 |
338 | irq_stack: | 346 | irq_stack: |
339 | 347 | ||
348 | /* 256 words of FIQ stack */ | ||
349 | .space 256*4 | ||
350 | fiq_stack: | ||
351 | |||
340 | #endif /* BOOTLOADER */ | 352 | #endif /* BOOTLOADER */ |
341 | 353 | ||
342 | #elif CONFIG_CPU == TCC730 | 354 | #elif CONFIG_CPU == TCC730 |