diff options
author | Kumar Gala <galak@kernel.crashing.org> | 2008-04-09 07:06:11 -0400 |
---|---|---|
committer | Kumar Gala <galak@kernel.crashing.org> | 2008-04-17 02:01:36 -0400 |
commit | eb0cd5fd295f469b4782d8088f3e39019da44707 (patch) | |
tree | 10418c0fd2ba06f28af598c3ff90d3b33fce7b2e /arch/powerpc/kernel/head_fsl_booke.S | |
parent | 771168494719b90621ac61f9ae68c4af494e418f (diff) |
[POWERPC] Rework Book-E debug exception handling
The architecture allows for "Book-E" style debug interrupts to either go
to critial interrupts of their own debug interrupt level. To allow for
a dynamic kernel to support machines of either type we want to be able to
compile in the interrupt handling code for both exception levels.
Towards this goal we renamed the debug handling macros to specify the
interrupt level in their name (DEBUG_CRIT_EXCEPTION/DebugCrit and
DEBUG_DEBUG_EXCEPTION/DebugDebug).
Additionally, on the Freescale Book-e parts we expanded the exception
stacks to cover the maximum case of needing three exception stacks (normal,
machine check and debug).
There is some kernel text space optimization to be gained if a kernel is
configured for a specific Freescale implementation but we aren't handling
that now to allow for the single kernel image support.
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
Diffstat (limited to 'arch/powerpc/kernel/head_fsl_booke.S')
-rw-r--r-- | arch/powerpc/kernel/head_fsl_booke.S | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/arch/powerpc/kernel/head_fsl_booke.S b/arch/powerpc/kernel/head_fsl_booke.S index 9f40b3e7710..4ff74414356 100644 --- a/arch/powerpc/kernel/head_fsl_booke.S +++ b/arch/powerpc/kernel/head_fsl_booke.S | |||
@@ -303,7 +303,10 @@ skpinv: addi r6,r6,1 /* Increment */ | |||
303 | SET_IVOR(12, WatchdogTimer); | 303 | SET_IVOR(12, WatchdogTimer); |
304 | SET_IVOR(13, DataTLBError); | 304 | SET_IVOR(13, DataTLBError); |
305 | SET_IVOR(14, InstructionTLBError); | 305 | SET_IVOR(14, InstructionTLBError); |
306 | SET_IVOR(15, Debug); | 306 | SET_IVOR(15, DebugDebug); |
307 | #if defined(CONFIG_E500) | ||
308 | SET_IVOR(15, DebugCrit); | ||
309 | #endif | ||
307 | SET_IVOR(32, SPEUnavailable); | 310 | SET_IVOR(32, SPEUnavailable); |
308 | SET_IVOR(33, SPEFloatingPointData); | 311 | SET_IVOR(33, SPEFloatingPointData); |
309 | SET_IVOR(34, SPEFloatingPointRound); | 312 | SET_IVOR(34, SPEFloatingPointRound); |
@@ -738,7 +741,10 @@ interrupt_base: | |||
738 | 741 | ||
739 | 742 | ||
740 | /* Debug Interrupt */ | 743 | /* Debug Interrupt */ |
741 | DEBUG_EXCEPTION | 744 | DEBUG_DEBUG_EXCEPTION |
745 | #if defined(CONFIG_E500) | ||
746 | DEBUG_CRIT_EXCEPTION | ||
747 | #endif | ||
742 | 748 | ||
743 | /* | 749 | /* |
744 | * Local functions | 750 | * Local functions |