summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/powerpc/shared/irq/irq_asm.S
diff options
context:
space:
mode:
authorTill Straumann <strauman@slac.stanford.edu>2007-12-06 19:45:27 +0000
committerTill Straumann <strauman@slac.stanford.edu>2007-12-06 19:45:27 +0000
commit6456706db332353d8243a7841d466382786a2db0 (patch)
treef68eda83df503fd7e48fb069fb40e5ca97c6844e /c/src/lib/libbsp/powerpc/shared/irq/irq_asm.S
parent2007-12-06 Till Straumann <strauman@slac.stanford.edu> (diff)
downloadrtems-6456706db332353d8243a7841d466382786a2db0.tar.bz2
2007-12-06 Till Straumann <strauman@slac.stanford.edu>
* shared/irq/irq_asm.S, shared/vectors/vectors.S: Replaced use of hardcoded PPC_EXC_MSR_BITS by a run-time method to determine these bits (use settings effective before exception occurred). Replaced use of hardcoded ASM_VECTORS_CRITICAL by 'bsp_raw_vector_is_405_critical' variable.
Diffstat (limited to 'c/src/lib/libbsp/powerpc/shared/irq/irq_asm.S')
-rw-r--r--c/src/lib/libbsp/powerpc/shared/irq/irq_asm.S21
1 files changed, 11 insertions, 10 deletions
diff --git a/c/src/lib/libbsp/powerpc/shared/irq/irq_asm.S b/c/src/lib/libbsp/powerpc/shared/irq/irq_asm.S
index 65ce87d56e..99f76c36d6 100644
--- a/c/src/lib/libbsp/powerpc/shared/irq/irq_asm.S
+++ b/c/src/lib/libbsp/powerpc/shared/irq/irq_asm.S
@@ -24,6 +24,8 @@
#include <bsp/vectors.h>
#include <libcpu/raw_exception.h>
+#define MSR_EXC_BITS (MSR_DR | MSR_IR | MSR_RI)
+
#define SYNC \
sync; \
isync
@@ -145,14 +147,15 @@ SYM (shared_raw_irq_code_entry):
stw r0, SRR0_FRAME_OFFSET(r1)
stw r3, SRR1_FRAME_OFFSET(r1)
-#if defined(PPC_MSR_EXC_BITS)
- mfmsr r3
/*
* Enable data and instruction address translation, exception recovery
+ * by merging original bits from saved SRR1.
*/
- ori r3, r3, PPC_MSR_EXC_BITS
+ li r0, MSR_EXC_BITS
+ and r0, r0, r3
+ mfmsr r3
+ or r3, r3, r0
mtmsr r3
-#endif
SYNC
/*
* Push C scratch registers on the current stack. It may
@@ -337,12 +340,11 @@ nested:
/*
* Disable data and instruction translation. Make path non recoverable...
*/
-#if defined(PPC_MSR_EXC_BITS)
+ li r0, MSR_EXC_BITS
mfmsr r3
- xori r3, r3, PPC_MSR_EXC_BITS
+ andc r3, r3, r0
mtmsr r3
SYNC
-#endif
/*
* Restore rfi related settings
*/
@@ -390,12 +392,11 @@ easy_exit:
* Disable nested exception processing, data and instruction
* translation.
*/
-#if defined(PPC_MSR_EXC_BITS)
+ li r0, MSR_EXC_BITS
mfmsr r3
- xori r3, r3, PPC_MSR_EXC_BITS
+ andc r3, r3, r0
mtmsr r3
SYNC
-#endif
/*
* Restore rfi related settings
*/