Merge remote-tracking branch 'spi/fix/core' into spi-linus
[linux-drm-fsl-dcu.git] / arch / arc / kernel / entry.S
index b908dde8a331c26a00a4912309af78cf643fc05b..47d09d07f09371d62804680b18bfec19c5fbbe3d 100644 (file)
@@ -250,6 +250,14 @@ ARC_ENTRY handle_interrupt_level1
        lr  r0, [icause1]
        and r0, r0, 0x1f
 
+#ifdef CONFIG_TRACE_IRQFLAGS
+       ; icause1 needs to be read early, before calling tracing, which
+       ; can clobber scratch regs, hence use of stack to stash it
+       push r0
+       TRACE_ASM_IRQ_DISABLE
+       pop  r0
+#endif
+
        bl.d  @arch_do_IRQ
        mov r1, sp
 
@@ -337,9 +345,9 @@ ARC_ENTRY EV_TLBProtV
        ;  vineetg: Mar 6th: Random Seg Fault issue #1
        ;  ecr and efa were not saved in case an Intr sneaks in
        ;  after fake rtie
-       ;
+
        lr  r2, [ecr]
-       lr  r1, [efa]   ; Faulting Data address
+       lr  r0, [efa]   ; Faulting Data address
 
        ; --------(4) Return from CPU Exception Mode ---------
        ;  Fake a rtie, but rtie to next label
@@ -348,6 +356,8 @@ ARC_ENTRY EV_TLBProtV
 
        FAKE_RET_FROM_EXCPN r9
 
+       mov   r1, sp
+
        ;------ (5) Type of Protection Violation? ----------
        ;
        ; ProtV Hardware Exception is triggered for Access Faults of 2 types
@@ -358,16 +368,12 @@ ARC_ENTRY EV_TLBProtV
        bbit1 r2, ECR_C_BIT_PROTV_MISALIG_DATA, 4f
 
        ;========= (6a) Access Violation Processing ========
-       mov r0, sp              ; pt_regs
        bl  do_page_fault
        b   ret_from_exception
 
        ;========== (6b) Non aligned access ============
 4:
-       mov r0, r1
-       mov r1, sp              ; pt_regs
 
-#ifdef  CONFIG_ARC_MISALIGN_ACCESS
        SAVE_CALLEE_SAVED_USER
        mov r2, sp              ; callee_regs
 
@@ -376,9 +382,6 @@ ARC_ENTRY EV_TLBProtV
        ; TBD: optimize - do this only if a callee reg was involved
        ; either a dst of emulated LD/ST or src with address-writeback
        RESTORE_CALLEE_SAVED_USER
-#else
-       bl  do_misaligned_error
-#endif
 
        b   ret_from_exception
 
@@ -575,6 +578,7 @@ resume_user_mode_begin:
        ; --- (Slow Path #2) pending signal  ---
        mov r0, sp      ; pt_regs for arg to do_signal()/do_notify_resume()
 
+       GET_CURR_THR_INFO_FLAGS   r9
        bbit0  r9, TIF_SIGPENDING, .Lchk_notify_resume
 
        ; Normal Trap/IRQ entry only saves Scratch (caller-saved) regs
@@ -640,6 +644,8 @@ resume_kernel_mode:
 
 restore_regs :
 
+       TRACE_ASM_IRQ_ENABLE
+
        lr      r10, [status32]
 
        ; Restore REG File. In case multiple Events outstanding,