summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/powerpc/shared
diff options
context:
space:
mode:
Diffstat (limited to 'c/src/lib/libbsp/powerpc/shared')
-rw-r--r--c/src/lib/libbsp/powerpc/shared/irq/irq_asm.S18
-rw-r--r--c/src/lib/libbsp/powerpc/shared/vectors/vectors.h10
-rw-r--r--c/src/lib/libbsp/powerpc/shared/vectors/vectors_init.c5
3 files changed, 33 insertions, 0 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 412a8e2214..e8a9c779e7 100644
--- a/c/src/lib/libbsp/powerpc/shared/irq/irq_asm.S
+++ b/c/src/lib/libbsp/powerpc/shared/irq/irq_asm.S
@@ -47,6 +47,24 @@ SYM (decrementer_exception_vector_prolog_code):
decrementer_exception_vector_prolog_code_size = . - decrementer_exception_vector_prolog_code
#endif
+#if defined(ASM_SYSMGMT_VECTOR)
+ PUBLIC_VAR(sysmgmt_exception_vector_prolog_code)
+
+SYM (sysmgmt_exception_vector_prolog_code):
+ /*
+ * let room for exception frame
+ */
+ stwu r1, - (EXCEPTION_FRAME_END)(r1)
+ stw r4, GPR4_OFFSET(r1)
+ li r4, ASM_SYSMGMT_VECTOR
+ ba shared_raw_irq_code_entry
+
+ PUBLIC_VAR (sysmgmt_exception_vector_prolog_code_size)
+
+ sysmgmt_exception_vector_prolog_code_size = . - sysmgmt_exception_vector_prolog_code
+#endif
+
+
#if defined(ASM_PIT_VECTOR)
PUBLIC_VAR(pit_exception_vector_prolog_code)
diff --git a/c/src/lib/libbsp/powerpc/shared/vectors/vectors.h b/c/src/lib/libbsp/powerpc/shared/vectors/vectors.h
index e931db260b..fbba8fe490 100644
--- a/c/src/lib/libbsp/powerpc/shared/vectors/vectors.h
+++ b/c/src/lib/libbsp/powerpc/shared/vectors/vectors.h
@@ -87,12 +87,22 @@ extern unsigned int tgpr_clr_exception_vector_code_prolog_size[];
*/
extern void external_exception_vector_prolog_code();
extern unsigned int external_exception_vector_prolog_code_size[];
+#if defined(ASM_DEC_VECTOR)
extern void decrementer_exception_vector_prolog_code();
extern unsigned int decrementer_exception_vector_prolog_code_size[];
+#endif
+#if defined(ASM_SYSMGMT_VECTOR)
+extern void sysmgmt_exception_vector_prolog_code();
+extern unsigned int sysmgmt_exception_vector_prolog_code_size[];
+#endif
+#if defined(ASM_PIT_VECTOR)
extern void pit_exception_vector_prolog_code();
extern unsigned int pit_exception_vector_prolog_code_size[];
+#endif
+#if defined(ASM_FIT_VECTOR)
extern void fit_exception_vector_prolog_code();
extern unsigned int fit_exception_vector_prolog_code_size[];
+#endif
/* codemove is like memmove, but it also gets the cache line size
* as 4th parameter to synchronize them. If this last parameter is
diff --git a/c/src/lib/libbsp/powerpc/shared/vectors/vectors_init.c b/c/src/lib/libbsp/powerpc/shared/vectors/vectors_init.c
index ffe295ff03..87b4cdfb80 100644
--- a/c/src/lib/libbsp/powerpc/shared/vectors/vectors_init.c
+++ b/c/src/lib/libbsp/powerpc/shared/vectors/vectors_init.c
@@ -173,6 +173,11 @@ void initialize_exceptions()
switch ( get_ppc_cpu_type() ) {
case PPC_603e:
+ case PPC_603ev:
+ case PPC_603le:
+ case PPC_e300c1:
+ case PPC_e300c2:
+ case PPC_e300c3:
case PPC_8240:
has_shadowed_gprs = 1;
default: break;