Commit 221df77a authored by Kumar Gala's avatar Kumar Gala Committed by Linus Torvalds

[PATCH] ppc32: refactor common book-e exception code

Moves common handling of InstructionStorage, Alignment, Program, and
Decrementer exceptions handlers for Book-E processors (44x & e500) into
common code.
Signed-off-by: default avatarKumar Gala <kumar.gala@freescale.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 277fe7d9
...@@ -414,30 +414,16 @@ interrupt_base: ...@@ -414,30 +414,16 @@ interrupt_base:
b data_access b data_access
/* Instruction Storage Interrupt */ /* Instruction Storage Interrupt */
START_EXCEPTION(InstructionStorage) INSTRUCTION_STORAGE_EXCEPTION
NORMAL_EXCEPTION_PROLOG
mr r4,r12 /* Pass SRR0 as arg2 */
li r5,0 /* Pass zero as arg3 */
EXC_XFER_EE_LITE(0x0400, handle_page_fault)
/* External Input Interrupt */ /* External Input Interrupt */
EXCEPTION(0x0500, ExternalInput, do_IRQ, EXC_XFER_LITE) EXCEPTION(0x0500, ExternalInput, do_IRQ, EXC_XFER_LITE)
/* Alignment Interrupt */ /* Alignment Interrupt */
START_EXCEPTION(Alignment) ALIGNMENT_EXCEPTION
NORMAL_EXCEPTION_PROLOG
mfspr r4,SPRN_DEAR /* Grab the DEAR and save it */
stw r4,_DEAR(r11)
addi r3,r1,STACK_FRAME_OVERHEAD
EXC_XFER_EE(0x0600, AlignmentException)
/* Program Interrupt */ /* Program Interrupt */
START_EXCEPTION(Program) PROGRAM_EXCEPTION
NORMAL_EXCEPTION_PROLOG
mfspr r4,SPRN_ESR /* Grab the ESR and save it */
stw r4,_ESR(r11)
addi r3,r1,STACK_FRAME_OVERHEAD
EXC_XFER_STD(0x700, ProgramCheckException)
/* Floating Point Unavailable Interrupt */ /* Floating Point Unavailable Interrupt */
EXCEPTION(0x2010, FloatingPointUnavailable, UnknownException, EXC_XFER_EE) EXCEPTION(0x2010, FloatingPointUnavailable, UnknownException, EXC_XFER_EE)
...@@ -451,12 +437,7 @@ interrupt_base: ...@@ -451,12 +437,7 @@ interrupt_base:
EXCEPTION(0x2020, AuxillaryProcessorUnavailable, UnknownException, EXC_XFER_EE) EXCEPTION(0x2020, AuxillaryProcessorUnavailable, UnknownException, EXC_XFER_EE)
/* Decrementer Interrupt */ /* Decrementer Interrupt */
START_EXCEPTION(Decrementer) DECREMENTER_EXCEPTION
NORMAL_EXCEPTION_PROLOG
lis r0,TSR_DIS@h /* Setup the DEC interrupt mask */
mtspr SPRN_TSR,r0 /* Clear the DEC interrupt */
addi r3,r1,STACK_FRAME_OVERHEAD
EXC_XFER_LITE(0x1000, timer_interrupt)
/* Fixed Internal Timer Interrupt */ /* Fixed Internal Timer Interrupt */
/* TODO: Add FIT support */ /* TODO: Add FIT support */
......
...@@ -303,4 +303,37 @@ ...@@ -303,4 +303,37 @@
addi r3,r1,STACK_FRAME_OVERHEAD; \ addi r3,r1,STACK_FRAME_OVERHEAD; \
EXC_XFER_TEMPLATE(DebugException, 0x2002, (MSR_KERNEL & ~(MSR_ME|MSR_DE|MSR_CE)), NOCOPY, crit_transfer_to_handler, ret_from_crit_exc) EXC_XFER_TEMPLATE(DebugException, 0x2002, (MSR_KERNEL & ~(MSR_ME|MSR_DE|MSR_CE)), NOCOPY, crit_transfer_to_handler, ret_from_crit_exc)
#define INSTRUCTION_STORAGE_EXCEPTION \
START_EXCEPTION(InstructionStorage) \
NORMAL_EXCEPTION_PROLOG; \
mfspr r5,SPRN_ESR; /* Grab the ESR and save it */ \
stw r5,_ESR(r11); \
mr r4,r12; /* Pass SRR0 as arg2 */ \
li r5,0; /* Pass zero as arg3 */ \
EXC_XFER_EE_LITE(0x0400, handle_page_fault)
#define ALIGNMENT_EXCEPTION \
START_EXCEPTION(Alignment) \
NORMAL_EXCEPTION_PROLOG; \
mfspr r4,SPRN_DEAR; /* Grab the DEAR and save it */ \
stw r4,_DEAR(r11); \
addi r3,r1,STACK_FRAME_OVERHEAD; \
EXC_XFER_EE(0x0600, AlignmentException)
#define PROGRAM_EXCEPTION \
START_EXCEPTION(Program) \
NORMAL_EXCEPTION_PROLOG; \
mfspr r4,SPRN_ESR; /* Grab the ESR and save it */ \
stw r4,_ESR(r11); \
addi r3,r1,STACK_FRAME_OVERHEAD; \
EXC_XFER_STD(0x0700, ProgramCheckException)
#define DECREMENTER_EXCEPTION \
START_EXCEPTION(Decrementer) \
NORMAL_EXCEPTION_PROLOG; \
lis r0,TSR_DIS@h; /* Setup the DEC interrupt mask */ \
mtspr SPRN_TSR,r0; /* Clear the DEC interrupt */ \
addi r3,r1,STACK_FRAME_OVERHEAD; \
EXC_XFER_LITE(0x0900, timer_interrupt)
#endif /* __HEAD_BOOKE_H__ */ #endif /* __HEAD_BOOKE_H__ */
...@@ -464,32 +464,16 @@ interrupt_base: ...@@ -464,32 +464,16 @@ interrupt_base:
b data_access b data_access
/* Instruction Storage Interrupt */ /* Instruction Storage Interrupt */
START_EXCEPTION(InstructionStorage) INSTRUCTION_STORAGE_EXCEPTION
NORMAL_EXCEPTION_PROLOG
mfspr r5,SPRN_ESR /* Grab the ESR and save it */
stw r5,_ESR(r11)
mr r4,r12 /* Pass SRR0 as arg2 */
li r5,0 /* Pass zero as arg3 */
EXC_XFER_EE_LITE(0x0400, handle_page_fault)
/* External Input Interrupt */ /* External Input Interrupt */
EXCEPTION(0x0500, ExternalInput, do_IRQ, EXC_XFER_LITE) EXCEPTION(0x0500, ExternalInput, do_IRQ, EXC_XFER_LITE)
/* Alignment Interrupt */ /* Alignment Interrupt */
START_EXCEPTION(Alignment) ALIGNMENT_EXCEPTION
NORMAL_EXCEPTION_PROLOG
mfspr r4,SPRN_DEAR /* Grab the DEAR and save it */
stw r4,_DEAR(r11)
addi r3,r1,STACK_FRAME_OVERHEAD
EXC_XFER_EE(0x0600, AlignmentException)
/* Program Interrupt */ /* Program Interrupt */
START_EXCEPTION(Program) PROGRAM_EXCEPTION
NORMAL_EXCEPTION_PROLOG
mfspr r4,SPRN_ESR /* Grab the ESR and save it */
stw r4,_ESR(r11)
addi r3,r1,STACK_FRAME_OVERHEAD
EXC_XFER_STD(0x0700, ProgramCheckException)
/* Floating Point Unavailable Interrupt */ /* Floating Point Unavailable Interrupt */
EXCEPTION(0x0800, FloatingPointUnavailable, UnknownException, EXC_XFER_EE) EXCEPTION(0x0800, FloatingPointUnavailable, UnknownException, EXC_XFER_EE)
...@@ -503,12 +487,7 @@ interrupt_base: ...@@ -503,12 +487,7 @@ interrupt_base:
EXCEPTION(0x2900, AuxillaryProcessorUnavailable, UnknownException, EXC_XFER_EE) EXCEPTION(0x2900, AuxillaryProcessorUnavailable, UnknownException, EXC_XFER_EE)
/* Decrementer Interrupt */ /* Decrementer Interrupt */
START_EXCEPTION(Decrementer) DECREMENTER_EXCEPTION
NORMAL_EXCEPTION_PROLOG
lis r0,TSR_DIS@h /* Setup the DEC interrupt mask */
mtspr SPRN_TSR,r0 /* Clear the DEC interrupt */
addi r3,r1,STACK_FRAME_OVERHEAD
EXC_XFER_LITE(0x0900, timer_interrupt)
/* Fixed Internal Timer Interrupt */ /* Fixed Internal Timer Interrupt */
/* TODO: Add FIT support */ /* TODO: Add FIT support */
......
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