diff options
author | Till Straumann <strauman@slac.stanford.edu> | 2007-12-06 19:45:27 +0000 |
---|---|---|
committer | Till Straumann <strauman@slac.stanford.edu> | 2007-12-06 19:45:27 +0000 |
commit | 6456706db332353d8243a7841d466382786a2db0 (patch) | |
tree | f68eda83df503fd7e48fb069fb40e5ca97c6844e /c/src/lib/libbsp/powerpc/shared/irq/irq_asm.S | |
parent | 2007-12-06 Till Straumann <strauman@slac.stanford.edu> (diff) | |
download | rtems-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.S | 21 |
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 */ |