diff options
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 | 51 |
1 files changed, 47 insertions, 4 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 4836c2a659..412a8e2214 100644 --- a/c/src/lib/libbsp/powerpc/shared/irq/irq_asm.S +++ b/c/src/lib/libbsp/powerpc/shared/irq/irq_asm.S @@ -30,7 +30,7 @@ .text .p2align 5 - +#if defined(ASM_DEC_VECTOR) PUBLIC_VAR(decrementer_exception_vector_prolog_code) SYM (decrementer_exception_vector_prolog_code): @@ -45,9 +45,45 @@ SYM (decrementer_exception_vector_prolog_code): PUBLIC_VAR (decrementer_exception_vector_prolog_code_size) decrementer_exception_vector_prolog_code_size = . - decrementer_exception_vector_prolog_code +#endif + +#if defined(ASM_PIT_VECTOR) + PUBLIC_VAR(pit_exception_vector_prolog_code) + +SYM (pit_exception_vector_prolog_code): + /* + * let room for exception frame + */ + stwu r1, - (EXCEPTION_FRAME_END)(r1) + stw r4, GPR4_OFFSET(r1) + li r4, ASM_PIT_VECTOR + ba shared_raw_irq_code_entry + + PUBLIC_VAR (pit_exception_vector_prolog_code_size) + + pit_exception_vector_prolog_code_size = . - pit_exception_vector_prolog_code +#endif + +#if defined(ASM_FIT_VECTOR) + PUBLIC_VAR(fit_exception_vector_prolog_code) +SYM (fit_exception_vector_prolog_code): + /* + * let room for exception frame + */ + stwu r1, - (EXCEPTION_FRAME_END)(r1) + stw r4, GPR4_OFFSET(r1) + li r4, ASM_FIT_VECTOR + ba shared_raw_irq_code_entry + + PUBLIC_VAR (fit_exception_vector_prolog_code_size) + + fit_exception_vector_prolog_code_size = . - fit_exception_vector_prolog_code +#endif + PUBLIC_VAR(external_exception_vector_prolog_code) +#if defined(ASM_EXT_VECTOR) SYM (external_exception_vector_prolog_code): /* * let room for exception frame @@ -60,6 +96,7 @@ SYM (external_exception_vector_prolog_code): PUBLIC_VAR (external_exception_vector_prolog_code_size) external_exception_vector_prolog_code_size = . - external_exception_vector_prolog_code +#endif PUBLIC_VAR(shared_raw_irq_code_entry) PUBLIC_VAR(C_dispatch_irq_handler) @@ -90,12 +127,14 @@ 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 */ - ori r3, r3, MSR_RI | MSR_IR | MSR_DR + ori r3, r3, PPC_MSR_EXC_BITS mtmsr r3 +#endif SYNC /* * Push C scratch registers on the current stack. It may @@ -280,10 +319,12 @@ nested: /* * Disable data and instruction translation. Make path non recoverable... */ +#if defined(PPC_MSR_EXC_BITS) mfmsr r3 - xori r3, r3, MSR_RI | MSR_IR | MSR_DR + xori r3, r3, PPC_MSR_EXC_BITS mtmsr r3 SYNC +#endif /* * Restore rfi related settings */ @@ -331,10 +372,12 @@ easy_exit: * Disable nested exception processing, data and instruction * translation. */ +#if defined(PPC_MSR_EXC_BITS) mfmsr r3 - xori r3, r3, MSR_RI | MSR_IR | MSR_DR + xori r3, r3, PPC_MSR_EXC_BITS mtmsr r3 SYNC +#endif /* * Restore rfi related settings */ |