diff options
Diffstat (limited to 'arch/blackfin/mach-common/interrupt.S')
-rw-r--r-- | arch/blackfin/mach-common/interrupt.S | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/arch/blackfin/mach-common/interrupt.S b/arch/blackfin/mach-common/interrupt.S index 0a0c088ead8c..cee62cf4acd4 100644 --- a/arch/blackfin/mach-common/interrupt.S +++ b/arch/blackfin/mach-common/interrupt.S | |||
@@ -194,12 +194,28 @@ ENTRY(_evt_ivhw) | |||
194 | ENDPROC(_evt_ivhw) | 194 | ENDPROC(_evt_ivhw) |
195 | 195 | ||
196 | /* Interrupt routine for evt2 (NMI). | 196 | /* Interrupt routine for evt2 (NMI). |
197 | * We don't actually use this, so just return. | ||
198 | * For inner circle type details, please see: | 197 | * For inner circle type details, please see: |
199 | * http://docs.blackfin.uclinux.org/doku.php?id=linux-kernel:nmi | 198 | * http://docs.blackfin.uclinux.org/doku.php?id=linux-kernel:nmi |
200 | */ | 199 | */ |
201 | ENTRY(_evt_nmi) | 200 | ENTRY(_evt_nmi) |
201 | #ifndef CONFIG_NMI_WATCHDOG | ||
202 | .weak _evt_nmi | 202 | .weak _evt_nmi |
203 | #else | ||
204 | /* Not take account of CPLBs, this handler will not return */ | ||
205 | SAVE_ALL_SYS | ||
206 | r0 = sp; | ||
207 | r1 = retn; | ||
208 | [sp + PT_PC] = r1; | ||
209 | trace_buffer_save(p4,r5); | ||
210 | |||
211 | ANOMALY_283_315_WORKAROUND(p4, r5) | ||
212 | |||
213 | SP += -12; | ||
214 | call _do_nmi; | ||
215 | SP += 12; | ||
216 | 1: | ||
217 | jump 1b; | ||
218 | #endif | ||
203 | rtn; | 219 | rtn; |
204 | ENDPROC(_evt_nmi) | 220 | ENDPROC(_evt_nmi) |
205 | 221 | ||