Commit d5fd9d7d authored by LEROY Christophe's avatar LEROY Christophe Committed by Scott Wood

powerpc/8xx: Handle CR out of exception PROLOG/EPILOG

In order to be able to reduce scope during which CR is saved, we take
CR saving/restoring out of exception PROLOG and EPILOG
Signed-off-by: default avatarChristophe Leroy <christophe.leroy@c-s.fr>
Signed-off-by: default avatarScott Wood <scottwood@freescale.com>
parent 90883a82
...@@ -116,13 +116,13 @@ turn_on_mmu: ...@@ -116,13 +116,13 @@ turn_on_mmu:
*/ */
#define EXCEPTION_PROLOG \ #define EXCEPTION_PROLOG \
EXCEPTION_PROLOG_0; \ EXCEPTION_PROLOG_0; \
mfcr r10; \
EXCEPTION_PROLOG_1; \ EXCEPTION_PROLOG_1; \
EXCEPTION_PROLOG_2 EXCEPTION_PROLOG_2
#define EXCEPTION_PROLOG_0 \ #define EXCEPTION_PROLOG_0 \
mtspr SPRN_SPRG_SCRATCH0,r10; \ mtspr SPRN_SPRG_SCRATCH0,r10; \
mtspr SPRN_SPRG_SCRATCH1,r11; \ mtspr SPRN_SPRG_SCRATCH1,r11
mfcr r10
#define EXCEPTION_PROLOG_1 \ #define EXCEPTION_PROLOG_1 \
mfspr r11,SPRN_SRR1; /* check whether user or kernel */ \ mfspr r11,SPRN_SRR1; /* check whether user or kernel */ \
...@@ -162,7 +162,6 @@ turn_on_mmu: ...@@ -162,7 +162,6 @@ turn_on_mmu:
* Exception exit code. * Exception exit code.
*/ */
#define EXCEPTION_EPILOG_0 \ #define EXCEPTION_EPILOG_0 \
mtcr r10; \
mfspr r10,SPRN_SPRG_SCRATCH0; \ mfspr r10,SPRN_SPRG_SCRATCH0; \
mfspr r11,SPRN_SPRG_SCRATCH1 mfspr r11,SPRN_SPRG_SCRATCH1
...@@ -313,6 +312,7 @@ InstructionTLBMiss: ...@@ -313,6 +312,7 @@ InstructionTLBMiss:
mtspr SPRN_DAR, r3 mtspr SPRN_DAR, r3
#endif #endif
EXCEPTION_PROLOG_0 EXCEPTION_PROLOG_0
mfcr r10
mtspr SPRN_SPRG_SCRATCH2, r10 mtspr SPRN_SPRG_SCRATCH2, r10
mfspr r10, SPRN_SRR0 /* Get effective address of fault */ mfspr r10, SPRN_SRR0 /* Get effective address of fault */
INVALIDATE_ADJACENT_PAGES_CPU15(r11, r10) INVALIDATE_ADJACENT_PAGES_CPU15(r11, r10)
...@@ -363,6 +363,7 @@ InstructionTLBMiss: ...@@ -363,6 +363,7 @@ InstructionTLBMiss:
mtspr SPRN_DAR, r11 /* Tag DAR */ mtspr SPRN_DAR, r11 /* Tag DAR */
#endif #endif
mfspr r10, SPRN_SPRG_SCRATCH2 mfspr r10, SPRN_SPRG_SCRATCH2
mtcr r10
EXCEPTION_EPILOG_0 EXCEPTION_EPILOG_0
rfi rfi
...@@ -372,6 +373,7 @@ DataStoreTLBMiss: ...@@ -372,6 +373,7 @@ DataStoreTLBMiss:
mtspr SPRN_DAR, r3 mtspr SPRN_DAR, r3
#endif #endif
EXCEPTION_PROLOG_0 EXCEPTION_PROLOG_0
mfcr r10
mtspr SPRN_SPRG_SCRATCH2, r10 mtspr SPRN_SPRG_SCRATCH2, r10
mfspr r10, SPRN_MD_EPN mfspr r10, SPRN_MD_EPN
...@@ -437,6 +439,7 @@ DataStoreTLBMiss: ...@@ -437,6 +439,7 @@ DataStoreTLBMiss:
#endif #endif
mtspr SPRN_DAR, r11 /* Tag DAR */ mtspr SPRN_DAR, r11 /* Tag DAR */
mfspr r10, SPRN_SPRG_SCRATCH2 mfspr r10, SPRN_SPRG_SCRATCH2
mtcr r10
EXCEPTION_EPILOG_0 EXCEPTION_EPILOG_0
rfi rfi
...@@ -462,6 +465,7 @@ InstructionTLBError: ...@@ -462,6 +465,7 @@ InstructionTLBError:
. = 0x1400 . = 0x1400
DataTLBError: DataTLBError:
EXCEPTION_PROLOG_0 EXCEPTION_PROLOG_0
mfcr r10
mfspr r11, SPRN_DAR mfspr r11, SPRN_DAR
cmpwi cr0, r11, RPN_PATTERN cmpwi cr0, r11, RPN_PATTERN
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment