aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/avr32/kernel/entry-avr32b.S28
1 files changed, 25 insertions, 3 deletions
diff --git a/arch/avr32/kernel/entry-avr32b.S b/arch/avr32/kernel/entry-avr32b.S
index 5f5f7e42f51b..484e08310f15 100644
--- a/arch/avr32/kernel/entry-avr32b.S
+++ b/arch/avr32/kernel/entry-avr32b.S
@@ -340,12 +340,34 @@ do_bus_error_read:
340do_nmi_ll: 340do_nmi_ll:
341 sub sp, 4 341 sub sp, 4
342 stmts --sp, r0-lr 342 stmts --sp, r0-lr
343 /* FIXME: Make sure RAR_NMI and RSR_NMI are pushed instead of *_EX */ 343 mfsr r9, SYSREG_RSR_NMI
344 rcall save_full_context_ex 344 mfsr r8, SYSREG_RAR_NMI
345 bfextu r0, r9, MODE_SHIFT, 3
346 brne 2f
347
3481: pushm r8, r9 /* PC and SR */
345 mfsr r12, SYSREG_ECR 349 mfsr r12, SYSREG_ECR
346 mov r11, sp 350 mov r11, sp
347 rcall do_nmi 351 rcall do_nmi
348 rjmp bad_return 352 popm r8-r9
353 mtsr SYSREG_RAR_NMI, r8
354 tst r0, r0
355 mtsr SYSREG_RSR_NMI, r9
356 brne 3f
357
358 ldmts sp++, r0-lr
359 sub sp, -4 /* skip r12_orig */
360 rete
361
3622: sub r10, sp, -(FRAME_SIZE_FULL - REG_LR)
363 stdsp sp[4], r10 /* replace saved SP */
364 rjmp 1b
365
3663: popm lr
367 sub sp, -4 /* skip sp */
368 popm r0-r12
369 sub sp, -4 /* skip r12_orig */
370 rete
349 371
350handle_address_fault: 372handle_address_fault:
351 sub sp, 4 373 sub sp, 4