]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - arch/powerpc/platforms/iseries/exception.S
[POWERPC] iSeries: Use alternate paca structure for booting
[linux-2.6-omap-h63xx.git] / arch / powerpc / platforms / iseries / exception.S
index e9a3435b3c18b49f1ddfdbf057e55364c2d6eadf..c775cd4b3d6eee44f9b5dc44ed80a309e80ed5f7 100644 (file)
 
        .globl system_reset_iSeries
 system_reset_iSeries:
-       mfspr   r13,SPRN_SPRG3          /* Get paca address */
+       mfspr   r13,SPRN_SPRG3          /* Get alpaca address */
+       LOAD_REG_IMMEDIATE(r23, alpaca)
+       li      r0,ALPACA_SIZE
+       sub     r23,r13,r23
+       divdu   r23,r23,r0              /* r23 has cpu number */
+       LOAD_REG_IMMEDIATE(r13, paca)
+       mulli   r0,r23,PACA_SIZE
+       add     r13,r13,r0
+       mtspr   SPRN_SPRG3,r13          /* Save it away for the future */
        mfmsr   r24
        ori     r24,r24,MSR_RI
        mtmsrd  r24                     /* RI on */
-       lhz     r24,PACAPACAINDEX(r13)  /* Get processor # */
+       mr      r24,r23
        cmpwi   0,r24,0                 /* Are we processor 0? */
        bne     1f
        b       .__start_initialization_iSeries /* Start up the first processor */
@@ -88,7 +96,7 @@ iSeries_secondary_smp_loop:
 
 /***  ISeries-LPAR interrupt handlers ***/
 
-       STD_EXCEPTION_ISERIES(0x200, machine_check, PACA_EXMC)
+       STD_EXCEPTION_ISERIES(machine_check, PACA_EXMC)
 
        .globl data_access_iSeries
 data_access_iSeries:
@@ -137,7 +145,7 @@ data_access_slb_iSeries:
        ld      r12,LPPACASRR1(r12)
        b       .slb_miss_realmode
 
-       STD_EXCEPTION_ISERIES(0x400, instruction_access, PACA_EXGEN)
+       STD_EXCEPTION_ISERIES(instruction_access, PACA_EXGEN)
 
        .globl  instruction_access_slb_iSeries
 instruction_access_slb_iSeries:
@@ -176,13 +184,13 @@ slb_miss_user_iseries:
        b       slb_miss_user_common
 #endif
 
-       MASKABLE_EXCEPTION_ISERIES(0x500, hardware_interrupt)
-       STD_EXCEPTION_ISERIES(0x600, alignment, PACA_EXGEN)
-       STD_EXCEPTION_ISERIES(0x700, program_check, PACA_EXGEN)
-       STD_EXCEPTION_ISERIES(0x800, fp_unavailable, PACA_EXGEN)
-       MASKABLE_EXCEPTION_ISERIES(0x900, decrementer)
-       STD_EXCEPTION_ISERIES(0xa00, trap_0a, PACA_EXGEN)
-       STD_EXCEPTION_ISERIES(0xb00, trap_0b, PACA_EXGEN)
+       MASKABLE_EXCEPTION_ISERIES(hardware_interrupt)
+       STD_EXCEPTION_ISERIES(alignment, PACA_EXGEN)
+       STD_EXCEPTION_ISERIES(program_check, PACA_EXGEN)
+       STD_EXCEPTION_ISERIES(fp_unavailable, PACA_EXGEN)
+       MASKABLE_EXCEPTION_ISERIES(decrementer)
+       STD_EXCEPTION_ISERIES(trap_0a, PACA_EXGEN)
+       STD_EXCEPTION_ISERIES(trap_0b, PACA_EXGEN)
 
        .globl  system_call_iSeries
 system_call_iSeries:
@@ -191,9 +199,9 @@ system_call_iSeries:
        EXCEPTION_PROLOG_ISERIES_1
        b       system_call_common
 
-       STD_EXCEPTION_ISERIES( 0xd00, single_step, PACA_EXGEN)
-       STD_EXCEPTION_ISERIES( 0xe00, trap_0e, PACA_EXGEN)
-       STD_EXCEPTION_ISERIES( 0xf00, performance_monitor, PACA_EXGEN)
+       STD_EXCEPTION_ISERIES(single_step, PACA_EXGEN)
+       STD_EXCEPTION_ISERIES(trap_0e, PACA_EXGEN)
+       STD_EXCEPTION_ISERIES(performance_monitor, PACA_EXGEN)
 
 decrementer_iSeries_masked:
        /* We may not have a valid TOC pointer in here. */