diff options
Diffstat (limited to 'firmware/target/arm/tms320dm320/system-dm320.c')
-rw-r--r-- | firmware/target/arm/tms320dm320/system-dm320.c | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/firmware/target/arm/tms320dm320/system-dm320.c b/firmware/target/arm/tms320dm320/system-dm320.c index 434b0065a5..9dff1afc20 100644 --- a/firmware/target/arm/tms320dm320/system-dm320.c +++ b/firmware/target/arm/tms320dm320/system-dm320.c | |||
@@ -155,17 +155,17 @@ void fiq_handler(void) | |||
155 | * Based on: linux/arch/arm/kernel/entry-armv.S and system-meg-fx.c | 155 | * Based on: linux/arch/arm/kernel/entry-armv.S and system-meg-fx.c |
156 | */ | 156 | */ |
157 | 157 | ||
158 | asm volatile ( | 158 | asm volatile( "stmfd sp!, {r0-r7, ip, lr} \n" /* Store context */ |
159 | "sub lr, lr, #4 \r\n" | 159 | "sub sp, sp, #8 \n"); /* Reserve stack */ |
160 | "stmfd sp!, {r0-r3, ip, lr} \r\n" | 160 | unsigned short addr = IO_INTC_FIQENTRY0>>2; |
161 | "mov r0, #0x00030000 \r\n" | 161 | if(addr != 0) |
162 | "ldr r0, [r0, #0x510] \r\n" /* Fetch value from IO_INTC_FIQENTRY0 */ | 162 | { |
163 | "sub r0, r0, #1 \r\n" | 163 | addr--; |
164 | "ldr r1, =irqvector \r\n" | 164 | irqvector[addr](); |
165 | "ldr r1, [r1, r0, lsl #2] \r\n" /* Divide value by 4 (TBA0/TBA1 is set to 0) and load appropriate pointer from the vector list */ | 165 | } |
166 | "blx r1 \r\n" /* Jump to handler */ | 166 | asm volatile( "add sp, sp, #8 \n" /* Cleanup stack */ |
167 | "ldmfd sp!, {r0-r3, ip, pc}^ \r\n" /* Return from FIQ */ | 167 | "ldmfd sp!, {r0-r7, ip, lr} \n" /* Restore context */ |
168 | ); | 168 | "subs pc, lr, #4 \n"); /* Return from FIQ */ |
169 | } | 169 | } |
170 | 170 | ||
171 | void system_reboot(void) | 171 | void system_reboot(void) |