|
@@ -103,21 +103,21 @@ _ENTRY(saved_ksp_limit)
|
|
|
|
|
|
/*
|
|
/*
|
|
* Exception vector entry code. This code runs with address translation
|
|
* Exception vector entry code. This code runs with address translation
|
|
- * turned off (i.e. using physical addresses). We assume SPRG3 has the
|
|
|
|
- * physical address of the current task thread_struct.
|
|
|
|
|
|
+ * turned off (i.e. using physical addresses). We assume SPRG_THREAD has
|
|
|
|
+ * the physical address of the current task thread_struct.
|
|
* Note that we have to have decremented r1 before we write to any fields
|
|
* Note that we have to have decremented r1 before we write to any fields
|
|
* of the exception frame, since a critical interrupt could occur at any
|
|
* of the exception frame, since a critical interrupt could occur at any
|
|
* time, and it will write to the area immediately below the current r1.
|
|
* time, and it will write to the area immediately below the current r1.
|
|
*/
|
|
*/
|
|
#define NORMAL_EXCEPTION_PROLOG \
|
|
#define NORMAL_EXCEPTION_PROLOG \
|
|
- mtspr SPRN_SPRG0,r10; /* save two registers to work with */\
|
|
|
|
- mtspr SPRN_SPRG1,r11; \
|
|
|
|
- mtspr SPRN_SPRG2,r1; \
|
|
|
|
|
|
+ mtspr SPRN_SPRG_SCRATCH0,r10; /* save two registers to work with */\
|
|
|
|
+ mtspr SPRN_SPRG_SCRATCH1,r11; \
|
|
|
|
+ mtspr SPRN_SPRG_SCRATCH2,r1; \
|
|
mfcr r10; /* save CR in r10 for now */\
|
|
mfcr r10; /* save CR in r10 for now */\
|
|
mfspr r11,SPRN_SRR1; /* check whether user or kernel */\
|
|
mfspr r11,SPRN_SRR1; /* check whether user or kernel */\
|
|
andi. r11,r11,MSR_PR; \
|
|
andi. r11,r11,MSR_PR; \
|
|
beq 1f; \
|
|
beq 1f; \
|
|
- mfspr r1,SPRN_SPRG3; /* if from user, start at top of */\
|
|
|
|
|
|
+ mfspr r1,SPRN_SPRG_THREAD; /* if from user, start at top of */\
|
|
lwz r1,THREAD_INFO-THREAD(r1); /* this thread's kernel stack */\
|
|
lwz r1,THREAD_INFO-THREAD(r1); /* this thread's kernel stack */\
|
|
addi r1,r1,THREAD_SIZE; \
|
|
addi r1,r1,THREAD_SIZE; \
|
|
1: subi r1,r1,INT_FRAME_SIZE; /* Allocate an exception frame */\
|
|
1: subi r1,r1,INT_FRAME_SIZE; /* Allocate an exception frame */\
|
|
@@ -125,13 +125,13 @@ _ENTRY(saved_ksp_limit)
|
|
stw r10,_CCR(r11); /* save various registers */\
|
|
stw r10,_CCR(r11); /* save various registers */\
|
|
stw r12,GPR12(r11); \
|
|
stw r12,GPR12(r11); \
|
|
stw r9,GPR9(r11); \
|
|
stw r9,GPR9(r11); \
|
|
- mfspr r10,SPRN_SPRG0; \
|
|
|
|
|
|
+ mfspr r10,SPRN_SPRG_SCRATCH0; \
|
|
stw r10,GPR10(r11); \
|
|
stw r10,GPR10(r11); \
|
|
- mfspr r12,SPRN_SPRG1; \
|
|
|
|
|
|
+ mfspr r12,SPRN_SPRG_SCRATCH1; \
|
|
stw r12,GPR11(r11); \
|
|
stw r12,GPR11(r11); \
|
|
mflr r10; \
|
|
mflr r10; \
|
|
stw r10,_LINK(r11); \
|
|
stw r10,_LINK(r11); \
|
|
- mfspr r10,SPRN_SPRG2; \
|
|
|
|
|
|
+ mfspr r10,SPRN_SPRG_SCRATCH2; \
|
|
mfspr r12,SPRN_SRR0; \
|
|
mfspr r12,SPRN_SRR0; \
|
|
stw r10,GPR1(r11); \
|
|
stw r10,GPR1(r11); \
|
|
mfspr r9,SPRN_SRR1; \
|
|
mfspr r9,SPRN_SRR1; \
|
|
@@ -160,7 +160,7 @@ _ENTRY(saved_ksp_limit)
|
|
lwz r11,critirq_ctx@l(r11); \
|
|
lwz r11,critirq_ctx@l(r11); \
|
|
beq 1f; \
|
|
beq 1f; \
|
|
/* COMING FROM USER MODE */ \
|
|
/* COMING FROM USER MODE */ \
|
|
- mfspr r11,SPRN_SPRG3; /* if from user, start at top of */\
|
|
|
|
|
|
+ mfspr r11,SPRN_SPRG_THREAD; /* if from user, start at top of */\
|
|
lwz r11,THREAD_INFO-THREAD(r11); /* this thread's kernel stack */\
|
|
lwz r11,THREAD_INFO-THREAD(r11); /* this thread's kernel stack */\
|
|
1: addi r11,r11,THREAD_SIZE-INT_FRAME_SIZE; /* Alloc an excpt frm */\
|
|
1: addi r11,r11,THREAD_SIZE-INT_FRAME_SIZE; /* Alloc an excpt frm */\
|
|
tophys(r11,r11); \
|
|
tophys(r11,r11); \
|
|
@@ -265,8 +265,8 @@ label:
|
|
* and exit. Otherwise, we call heavywight functions to do the work.
|
|
* and exit. Otherwise, we call heavywight functions to do the work.
|
|
*/
|
|
*/
|
|
START_EXCEPTION(0x0300, DataStorage)
|
|
START_EXCEPTION(0x0300, DataStorage)
|
|
- mtspr SPRN_SPRG0, r10 /* Save some working registers */
|
|
|
|
- mtspr SPRN_SPRG1, r11
|
|
|
|
|
|
+ mtspr SPRN_SPRG_SCRATCH0, r10 /* Save some working registers */
|
|
|
|
+ mtspr SPRN_SPRG_SCRATCH1, r11
|
|
#ifdef CONFIG_403GCX
|
|
#ifdef CONFIG_403GCX
|
|
stw r12, 0(r0)
|
|
stw r12, 0(r0)
|
|
stw r9, 4(r0)
|
|
stw r9, 4(r0)
|
|
@@ -275,12 +275,12 @@ label:
|
|
stw r11, 8(r0)
|
|
stw r11, 8(r0)
|
|
stw r12, 12(r0)
|
|
stw r12, 12(r0)
|
|
#else
|
|
#else
|
|
- mtspr SPRN_SPRG4, r12
|
|
|
|
- mtspr SPRN_SPRG5, r9
|
|
|
|
|
|
+ mtspr SPRN_SPRG_SCRATCH3, r12
|
|
|
|
+ mtspr SPRN_SPRG_SCRATCH4, r9
|
|
mfcr r11
|
|
mfcr r11
|
|
mfspr r12, SPRN_PID
|
|
mfspr r12, SPRN_PID
|
|
- mtspr SPRN_SPRG7, r11
|
|
|
|
- mtspr SPRN_SPRG6, r12
|
|
|
|
|
|
+ mtspr SPRN_SPRG_SCRATCH6, r11
|
|
|
|
+ mtspr SPRN_SPRG_SCRATCH5, r12
|
|
#endif
|
|
#endif
|
|
|
|
|
|
/* First, check if it was a zone fault (which means a user
|
|
/* First, check if it was a zone fault (which means a user
|
|
@@ -308,7 +308,7 @@ label:
|
|
/* Get the PGD for the current thread.
|
|
/* Get the PGD for the current thread.
|
|
*/
|
|
*/
|
|
3:
|
|
3:
|
|
- mfspr r11,SPRN_SPRG3
|
|
|
|
|
|
+ mfspr r11,SPRN_SPRG_THREAD
|
|
lwz r11,PGDIR(r11)
|
|
lwz r11,PGDIR(r11)
|
|
4:
|
|
4:
|
|
tophys(r11, r11)
|
|
tophys(r11, r11)
|
|
@@ -355,15 +355,15 @@ label:
|
|
lwz r9, 4(r0)
|
|
lwz r9, 4(r0)
|
|
lwz r12, 0(r0)
|
|
lwz r12, 0(r0)
|
|
#else
|
|
#else
|
|
- mfspr r12, SPRN_SPRG6
|
|
|
|
- mfspr r11, SPRN_SPRG7
|
|
|
|
|
|
+ mfspr r12, SPRN_SPRG_SCRATCH5
|
|
|
|
+ mfspr r11, SPRN_SPRG_SCRATCH6
|
|
mtspr SPRN_PID, r12
|
|
mtspr SPRN_PID, r12
|
|
mtcr r11
|
|
mtcr r11
|
|
- mfspr r9, SPRN_SPRG5
|
|
|
|
- mfspr r12, SPRN_SPRG4
|
|
|
|
|
|
+ mfspr r9, SPRN_SPRG_SCRATCH4
|
|
|
|
+ mfspr r12, SPRN_SPRG_SCRATCH3
|
|
#endif
|
|
#endif
|
|
- mfspr r11, SPRN_SPRG1
|
|
|
|
- mfspr r10, SPRN_SPRG0
|
|
|
|
|
|
+ mfspr r11, SPRN_SPRG_SCRATCH1
|
|
|
|
+ mfspr r10, SPRN_SPRG_SCRATCH0
|
|
PPC405_ERR77_SYNC
|
|
PPC405_ERR77_SYNC
|
|
rfi /* Should sync shadow TLBs */
|
|
rfi /* Should sync shadow TLBs */
|
|
b . /* prevent prefetch past rfi */
|
|
b . /* prevent prefetch past rfi */
|
|
@@ -380,15 +380,15 @@ label:
|
|
lwz r9, 4(r0)
|
|
lwz r9, 4(r0)
|
|
lwz r12, 0(r0)
|
|
lwz r12, 0(r0)
|
|
#else
|
|
#else
|
|
- mfspr r12, SPRN_SPRG6
|
|
|
|
- mfspr r11, SPRN_SPRG7
|
|
|
|
|
|
+ mfspr r12, SPRN_SPRG_SCRATCH5
|
|
|
|
+ mfspr r11, SPRN_SPRG_SCRATCH6
|
|
mtspr SPRN_PID, r12
|
|
mtspr SPRN_PID, r12
|
|
mtcr r11
|
|
mtcr r11
|
|
- mfspr r9, SPRN_SPRG5
|
|
|
|
- mfspr r12, SPRN_SPRG4
|
|
|
|
|
|
+ mfspr r9, SPRN_SPRG_SCRATCH4
|
|
|
|
+ mfspr r12, SPRN_SPRG_SCRATCH3
|
|
#endif
|
|
#endif
|
|
- mfspr r11, SPRN_SPRG1
|
|
|
|
- mfspr r10, SPRN_SPRG0
|
|
|
|
|
|
+ mfspr r11, SPRN_SPRG_SCRATCH1
|
|
|
|
+ mfspr r10, SPRN_SPRG_SCRATCH0
|
|
b DataAccess
|
|
b DataAccess
|
|
|
|
|
|
/*
|
|
/*
|
|
@@ -466,8 +466,8 @@ label:
|
|
* load TLB entries from the page table if they exist.
|
|
* load TLB entries from the page table if they exist.
|
|
*/
|
|
*/
|
|
START_EXCEPTION(0x1100, DTLBMiss)
|
|
START_EXCEPTION(0x1100, DTLBMiss)
|
|
- mtspr SPRN_SPRG0, r10 /* Save some working registers */
|
|
|
|
- mtspr SPRN_SPRG1, r11
|
|
|
|
|
|
+ mtspr SPRN_SPRG_SCRATCH0, r10 /* Save some working registers */
|
|
|
|
+ mtspr SPRN_SPRG_SCRATCH1, r11
|
|
#ifdef CONFIG_403GCX
|
|
#ifdef CONFIG_403GCX
|
|
stw r12, 0(r0)
|
|
stw r12, 0(r0)
|
|
stw r9, 4(r0)
|
|
stw r9, 4(r0)
|
|
@@ -476,12 +476,12 @@ label:
|
|
stw r11, 8(r0)
|
|
stw r11, 8(r0)
|
|
stw r12, 12(r0)
|
|
stw r12, 12(r0)
|
|
#else
|
|
#else
|
|
- mtspr SPRN_SPRG4, r12
|
|
|
|
- mtspr SPRN_SPRG5, r9
|
|
|
|
|
|
+ mtspr SPRN_SPRG_SCRATCH3, r12
|
|
|
|
+ mtspr SPRN_SPRG_SCRATCH4, r9
|
|
mfcr r11
|
|
mfcr r11
|
|
mfspr r12, SPRN_PID
|
|
mfspr r12, SPRN_PID
|
|
- mtspr SPRN_SPRG7, r11
|
|
|
|
- mtspr SPRN_SPRG6, r12
|
|
|
|
|
|
+ mtspr SPRN_SPRG_SCRATCH6, r11
|
|
|
|
+ mtspr SPRN_SPRG_SCRATCH5, r12
|
|
#endif
|
|
#endif
|
|
mfspr r10, SPRN_DEAR /* Get faulting address */
|
|
mfspr r10, SPRN_DEAR /* Get faulting address */
|
|
|
|
|
|
@@ -500,7 +500,7 @@ label:
|
|
/* Get the PGD for the current thread.
|
|
/* Get the PGD for the current thread.
|
|
*/
|
|
*/
|
|
3:
|
|
3:
|
|
- mfspr r11,SPRN_SPRG3
|
|
|
|
|
|
+ mfspr r11,SPRN_SPRG_THREAD
|
|
lwz r11,PGDIR(r11)
|
|
lwz r11,PGDIR(r11)
|
|
4:
|
|
4:
|
|
tophys(r11, r11)
|
|
tophys(r11, r11)
|
|
@@ -550,15 +550,15 @@ label:
|
|
lwz r9, 4(r0)
|
|
lwz r9, 4(r0)
|
|
lwz r12, 0(r0)
|
|
lwz r12, 0(r0)
|
|
#else
|
|
#else
|
|
- mfspr r12, SPRN_SPRG6
|
|
|
|
- mfspr r11, SPRN_SPRG7
|
|
|
|
|
|
+ mfspr r12, SPRN_SPRG_SCRATCH5
|
|
|
|
+ mfspr r11, SPRN_SPRG_SCRATCH6
|
|
mtspr SPRN_PID, r12
|
|
mtspr SPRN_PID, r12
|
|
mtcr r11
|
|
mtcr r11
|
|
- mfspr r9, SPRN_SPRG5
|
|
|
|
- mfspr r12, SPRN_SPRG4
|
|
|
|
|
|
+ mfspr r9, SPRN_SPRG_SCRATCH4
|
|
|
|
+ mfspr r12, SPRN_SPRG_SCRATCH3
|
|
#endif
|
|
#endif
|
|
- mfspr r11, SPRN_SPRG1
|
|
|
|
- mfspr r10, SPRN_SPRG0
|
|
|
|
|
|
+ mfspr r11, SPRN_SPRG_SCRATCH1
|
|
|
|
+ mfspr r10, SPRN_SPRG_SCRATCH0
|
|
b DataAccess
|
|
b DataAccess
|
|
|
|
|
|
/* 0x1200 - Instruction TLB Miss Exception
|
|
/* 0x1200 - Instruction TLB Miss Exception
|
|
@@ -566,8 +566,8 @@ label:
|
|
* registers and bailout to a different point.
|
|
* registers and bailout to a different point.
|
|
*/
|
|
*/
|
|
START_EXCEPTION(0x1200, ITLBMiss)
|
|
START_EXCEPTION(0x1200, ITLBMiss)
|
|
- mtspr SPRN_SPRG0, r10 /* Save some working registers */
|
|
|
|
- mtspr SPRN_SPRG1, r11
|
|
|
|
|
|
+ mtspr SPRN_SPRG_SCRATCH0, r10 /* Save some working registers */
|
|
|
|
+ mtspr SPRN_SPRG_SCRATCH1, r11
|
|
#ifdef CONFIG_403GCX
|
|
#ifdef CONFIG_403GCX
|
|
stw r12, 0(r0)
|
|
stw r12, 0(r0)
|
|
stw r9, 4(r0)
|
|
stw r9, 4(r0)
|
|
@@ -576,12 +576,12 @@ label:
|
|
stw r11, 8(r0)
|
|
stw r11, 8(r0)
|
|
stw r12, 12(r0)
|
|
stw r12, 12(r0)
|
|
#else
|
|
#else
|
|
- mtspr SPRN_SPRG4, r12
|
|
|
|
- mtspr SPRN_SPRG5, r9
|
|
|
|
|
|
+ mtspr SPRN_SPRG_SCRATCH3, r12
|
|
|
|
+ mtspr SPRN_SPRG_SCRATCH4, r9
|
|
mfcr r11
|
|
mfcr r11
|
|
mfspr r12, SPRN_PID
|
|
mfspr r12, SPRN_PID
|
|
- mtspr SPRN_SPRG7, r11
|
|
|
|
- mtspr SPRN_SPRG6, r12
|
|
|
|
|
|
+ mtspr SPRN_SPRG_SCRATCH6, r11
|
|
|
|
+ mtspr SPRN_SPRG_SCRATCH5, r12
|
|
#endif
|
|
#endif
|
|
mfspr r10, SPRN_SRR0 /* Get faulting address */
|
|
mfspr r10, SPRN_SRR0 /* Get faulting address */
|
|
|
|
|
|
@@ -600,7 +600,7 @@ label:
|
|
/* Get the PGD for the current thread.
|
|
/* Get the PGD for the current thread.
|
|
*/
|
|
*/
|
|
3:
|
|
3:
|
|
- mfspr r11,SPRN_SPRG3
|
|
|
|
|
|
+ mfspr r11,SPRN_SPRG_THREAD
|
|
lwz r11,PGDIR(r11)
|
|
lwz r11,PGDIR(r11)
|
|
4:
|
|
4:
|
|
tophys(r11, r11)
|
|
tophys(r11, r11)
|
|
@@ -650,15 +650,15 @@ label:
|
|
lwz r9, 4(r0)
|
|
lwz r9, 4(r0)
|
|
lwz r12, 0(r0)
|
|
lwz r12, 0(r0)
|
|
#else
|
|
#else
|
|
- mfspr r12, SPRN_SPRG6
|
|
|
|
- mfspr r11, SPRN_SPRG7
|
|
|
|
|
|
+ mfspr r12, SPRN_SPRG_SCRATCH5
|
|
|
|
+ mfspr r11, SPRN_SPRG_SCRATCH6
|
|
mtspr SPRN_PID, r12
|
|
mtspr SPRN_PID, r12
|
|
mtcr r11
|
|
mtcr r11
|
|
- mfspr r9, SPRN_SPRG5
|
|
|
|
- mfspr r12, SPRN_SPRG4
|
|
|
|
|
|
+ mfspr r9, SPRN_SPRG_SCRATCH4
|
|
|
|
+ mfspr r12, SPRN_SPRG_SCRATCH3
|
|
#endif
|
|
#endif
|
|
- mfspr r11, SPRN_SPRG1
|
|
|
|
- mfspr r10, SPRN_SPRG0
|
|
|
|
|
|
+ mfspr r11, SPRN_SPRG_SCRATCH1
|
|
|
|
+ mfspr r10, SPRN_SPRG_SCRATCH0
|
|
b InstructionAccess
|
|
b InstructionAccess
|
|
|
|
|
|
EXCEPTION(0x1300, Trap_13, unknown_exception, EXC_XFER_EE)
|
|
EXCEPTION(0x1300, Trap_13, unknown_exception, EXC_XFER_EE)
|
|
@@ -803,15 +803,15 @@ finish_tlb_load:
|
|
lwz r9, 4(r0)
|
|
lwz r9, 4(r0)
|
|
lwz r12, 0(r0)
|
|
lwz r12, 0(r0)
|
|
#else
|
|
#else
|
|
- mfspr r12, SPRN_SPRG6
|
|
|
|
- mfspr r11, SPRN_SPRG7
|
|
|
|
|
|
+ mfspr r12, SPRN_SPRG_SCRATCH5
|
|
|
|
+ mfspr r11, SPRN_SPRG_SCRATCH6
|
|
mtspr SPRN_PID, r12
|
|
mtspr SPRN_PID, r12
|
|
mtcr r11
|
|
mtcr r11
|
|
- mfspr r9, SPRN_SPRG5
|
|
|
|
- mfspr r12, SPRN_SPRG4
|
|
|
|
|
|
+ mfspr r9, SPRN_SPRG_SCRATCH4
|
|
|
|
+ mfspr r12, SPRN_SPRG_SCRATCH3
|
|
#endif
|
|
#endif
|
|
- mfspr r11, SPRN_SPRG1
|
|
|
|
- mfspr r10, SPRN_SPRG0
|
|
|
|
|
|
+ mfspr r11, SPRN_SPRG_SCRATCH1
|
|
|
|
+ mfspr r10, SPRN_SPRG_SCRATCH0
|
|
PPC405_ERR77_SYNC
|
|
PPC405_ERR77_SYNC
|
|
rfi /* Should sync shadow TLBs */
|
|
rfi /* Should sync shadow TLBs */
|
|
b . /* prevent prefetch past rfi */
|
|
b . /* prevent prefetch past rfi */
|
|
@@ -835,7 +835,7 @@ start_here:
|
|
/* ptr to phys current thread */
|
|
/* ptr to phys current thread */
|
|
tophys(r4,r2)
|
|
tophys(r4,r2)
|
|
addi r4,r4,THREAD /* init task's THREAD */
|
|
addi r4,r4,THREAD /* init task's THREAD */
|
|
- mtspr SPRN_SPRG3,r4
|
|
|
|
|
|
+ mtspr SPRN_SPRG_THREAD,r4
|
|
|
|
|
|
/* stack */
|
|
/* stack */
|
|
lis r1,init_thread_union@ha
|
|
lis r1,init_thread_union@ha
|