Merge tag 'for-linus-5.13-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rw...
[linux-2.6-microblaze.git] / arch / powerpc / kernel / head_40x.S
index f3e5b46..e1360b8 100644 (file)
@@ -157,14 +157,7 @@ _ENTRY(crit_esr)
        mfspr   r12,SPRN_SRR2
        mfspr   r9,SPRN_SRR3
        rlwinm  r9,r9,0,14,12           /* clear MSR_WE (necessary?)       */
-       stw     r0,GPR0(r11)
-       lis     r10, STACK_FRAME_REGS_MARKER@ha /* exception frame marker */
-       addi    r10, r10, STACK_FRAME_REGS_MARKER@l
-       stw     r10, 8(r11)
-       li      r10, \trapno + 2
-       stw     r10,_TRAP(r11)
-       SAVE_4GPRS(3, r11)
-       SAVE_2GPRS(7, r11)
+       COMMON_EXCEPTION_PROLOG_END \trapno + 2
 _ASM_NOKPROBE_SYMBOL(\name\()_virt)
 .endm
 
@@ -187,8 +180,9 @@ _ASM_NOKPROBE_SYMBOL(\name\()_virt)
 #define CRITICAL_EXCEPTION(n, label, hdlr)                     \
        START_EXCEPTION(n, label);                              \
        CRITICAL_EXCEPTION_PROLOG n label;                              \
-       EXC_XFER_TEMPLATE(hdlr, n+2, (MSR_KERNEL & ~(MSR_ME|MSR_DE|MSR_CE)), \
-                         crit_transfer_to_handler, ret_from_crit_exc)
+       prepare_transfer_to_handler;                            \
+       bl      hdlr;                                           \
+       b       ret_from_crit_exc
 
 /*
  * 0x0100 - Critical Interrupt Exception
@@ -209,7 +203,9 @@ _ASM_NOKPROBE_SYMBOL(\name\()_virt)
  */
        START_EXCEPTION(0x0300, DataStorage)
        EXCEPTION_PROLOG 0x300 DataStorage handle_dar_dsisr=1
-       EXC_XFER_LITE(0x300, do_page_fault)
+       prepare_transfer_to_handler
+       bl      do_page_fault
+       b       interrupt_return
 
 /*
  * 0x0400 - Instruction Storage Exception
@@ -220,10 +216,12 @@ _ASM_NOKPROBE_SYMBOL(\name\()_virt)
        li      r5,0
        stw     r5, _ESR(r11)           /* Zero ESR */
        stw     r12, _DEAR(r11)         /* SRR0 as DEAR */
-       EXC_XFER_LITE(0x400, do_page_fault)
+       prepare_transfer_to_handler
+       bl      do_page_fault
+       b       interrupt_return
 
 /* 0x0500 - External Interrupt Exception */
-       EXCEPTION(0x0500, HardwareInterrupt, do_IRQ, EXC_XFER_LITE)
+       EXCEPTION(0x0500, HardwareInterrupt, do_IRQ)
 
 /* 0x0600 - Alignment Exception */
        START_EXCEPTION(0x0600, Alignment)
@@ -241,19 +239,19 @@ _ASM_NOKPROBE_SYMBOL(\name\()_virt)
        REST_NVGPRS(r1)
        b       interrupt_return
 
-       EXCEPTION(0x0800, Trap_08, unknown_exception, EXC_XFER_STD)
-       EXCEPTION(0x0900, Trap_09, unknown_exception, EXC_XFER_STD)
-       EXCEPTION(0x0A00, Trap_0A, unknown_exception, EXC_XFER_STD)
-       EXCEPTION(0x0B00, Trap_0B, unknown_exception, EXC_XFER_STD)
+       EXCEPTION(0x0800, Trap_08, unknown_exception)
+       EXCEPTION(0x0900, Trap_09, unknown_exception)
+       EXCEPTION(0x0A00, Trap_0A, unknown_exception)
+       EXCEPTION(0x0B00, Trap_0B, unknown_exception)
 
 /* 0x0C00 - System Call Exception */
        START_EXCEPTION(0x0C00, SystemCall)
        SYSCALL_ENTRY   0xc00
 /*     Trap_0D is commented out to get more space for system call exception */
 
-/*     EXCEPTION(0x0D00, Trap_0D, unknown_exception, EXC_XFER_STD) */
-       EXCEPTION(0x0E00, Trap_0E, unknown_exception, EXC_XFER_STD)
-       EXCEPTION(0x0F00, Trap_0F, unknown_exception, EXC_XFER_STD)
+/*     EXCEPTION(0x0D00, Trap_0D, unknown_exception) */
+       EXCEPTION(0x0E00, Trap_0E, unknown_exception)
+       EXCEPTION(0x0F00, Trap_0F, unknown_exception)
 
 /* 0x1000 - Programmable Interval Timer (PIT) Exception */
        START_EXCEPTION(0x1000, DecrementerTrap)
@@ -428,19 +426,19 @@ _ASM_NOKPROBE_SYMBOL(\name\()_virt)
        mfspr   r10, SPRN_SPRG_SCRATCH5
        b       InstructionAccess
 
-       EXCEPTION(0x1300, Trap_13, unknown_exception, EXC_XFER_STD)
-       EXCEPTION(0x1400, Trap_14, unknown_exception, EXC_XFER_STD)
-       EXCEPTION(0x1500, Trap_15, unknown_exception, EXC_XFER_STD)
-       EXCEPTION(0x1600, Trap_16, unknown_exception, EXC_XFER_STD)
-       EXCEPTION(0x1700, Trap_17, unknown_exception, EXC_XFER_STD)
-       EXCEPTION(0x1800, Trap_18, unknown_exception, EXC_XFER_STD)
-       EXCEPTION(0x1900, Trap_19, unknown_exception, EXC_XFER_STD)
-       EXCEPTION(0x1A00, Trap_1A, unknown_exception, EXC_XFER_STD)
-       EXCEPTION(0x1B00, Trap_1B, unknown_exception, EXC_XFER_STD)
-       EXCEPTION(0x1C00, Trap_1C, unknown_exception, EXC_XFER_STD)
-       EXCEPTION(0x1D00, Trap_1D, unknown_exception, EXC_XFER_STD)
-       EXCEPTION(0x1E00, Trap_1E, unknown_exception, EXC_XFER_STD)
-       EXCEPTION(0x1F00, Trap_1F, unknown_exception, EXC_XFER_STD)
+       EXCEPTION(0x1300, Trap_13, unknown_exception)
+       EXCEPTION(0x1400, Trap_14, unknown_exception)
+       EXCEPTION(0x1500, Trap_15, unknown_exception)
+       EXCEPTION(0x1600, Trap_16, unknown_exception)
+       EXCEPTION(0x1700, Trap_17, unknown_exception)
+       EXCEPTION(0x1800, Trap_18, unknown_exception)
+       EXCEPTION(0x1900, Trap_19, unknown_exception)
+       EXCEPTION(0x1A00, Trap_1A, unknown_exception)
+       EXCEPTION(0x1B00, Trap_1B, unknown_exception)
+       EXCEPTION(0x1C00, Trap_1C, unknown_exception)
+       EXCEPTION(0x1D00, Trap_1D, unknown_exception)
+       EXCEPTION(0x1E00, Trap_1E, unknown_exception)
+       EXCEPTION(0x1F00, Trap_1F, unknown_exception)
 
 /* Check for a single step debug exception while in an exception
  * handler before state has been saved.  This is to catch the case
@@ -499,9 +497,9 @@ _ASM_NOKPROBE_SYMBOL(\name\()_virt)
        /* continue normal handling for a critical exception... */
 2:     mfspr   r4,SPRN_DBSR
        stw     r4,_ESR(r11)            /* DebugException takes DBSR in _ESR */
-       EXC_XFER_TEMPLATE(DebugException, 0x2002, \
-               (MSR_KERNEL & ~(MSR_ME|MSR_DE|MSR_CE)), \
-               crit_transfer_to_handler, ret_from_crit_exc)
+       prepare_transfer_to_handler
+       bl      DebugException
+       b       ret_from_crit_exc
 
        /* Programmable Interval Timer (PIT) Exception. (from 0x1000) */
        __HEAD
@@ -509,21 +507,25 @@ Decrementer:
        EXCEPTION_PROLOG 0x1000 Decrementer
        lis     r0,TSR_PIS@h
        mtspr   SPRN_TSR,r0             /* Clear the PIT exception */
-       EXC_XFER_LITE(0x1000, timer_interrupt)
+       prepare_transfer_to_handler
+       bl      timer_interrupt
+       b       interrupt_return
 
        /* Fixed Interval Timer (FIT) Exception. (from 0x1010) */
        __HEAD
 FITException:
        EXCEPTION_PROLOG 0x1010 FITException
-       EXC_XFER_STD(0x1010, unknown_exception)
+       prepare_transfer_to_handler
+       bl      unknown_exception
+       b       interrupt_return
 
        /* Watchdog Timer (WDT) Exception. (from 0x1020) */
        __HEAD
 WDTException:
        CRITICAL_EXCEPTION_PROLOG 0x1020 WDTException
-       EXC_XFER_TEMPLATE(WatchdogException, 0x1020+2,
-                         (MSR_KERNEL & ~(MSR_ME|MSR_DE|MSR_CE)),
-                         crit_transfer_to_handler, ret_from_crit_exc)
+       prepare_transfer_to_handler
+       bl      WatchdogException
+       b       ret_from_crit_exc
 
 /* Other PowerPC processors, namely those derived from the 6xx-series
  * have vectors from 0x2100 through 0x2F00 defined, but marked as reserved.