Module Name: src
Committed By: matt
Date: Wed Jul 18 16:56:51 UTC 2012
Modified Files:
src/sys/arch/powerpc/powerpc: trap_subr.S
Log Message:
Add conditionals so this should work for the MPC8XX SoCs.
Turn on PSL_RI in interrupts.
To generate a diff of this commit:
cvs rdiff -u -r1.73 -r1.74 src/sys/arch/powerpc/powerpc/trap_subr.S
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/powerpc/powerpc/trap_subr.S
diff -u src/sys/arch/powerpc/powerpc/trap_subr.S:1.73 src/sys/arch/powerpc/powerpc/trap_subr.S:1.74
--- src/sys/arch/powerpc/powerpc/trap_subr.S:1.73 Wed Feb 1 05:25:58 2012
+++ src/sys/arch/powerpc/powerpc/trap_subr.S Wed Jul 18 16:56:51 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: trap_subr.S,v 1.73 2012/02/01 05:25:58 matt Exp $ */
+/* $NetBSD: trap_subr.S,v 1.74 2012/07/18 16:56:51 matt Exp $ */
/*
* Copyright (C) 1995, 1996 Wolfgang Solfrank.
@@ -79,6 +79,14 @@
ldreg t0,_C_LABEL(kernel_pmap_)+PM_STEG@l(t0); \
mtasr t0
+#elif defined(PPC_MPC8XX)
+
+/*
+ * PPC_MPC8XX don't have SRs to load
+ */
+#define RESTORE_USER_SRS(t0,t1)
+#define RESTORE_KERN_SRS(t0,t1)
+
#else /* not OEA64 */
/*
@@ -216,6 +224,7 @@ _C_LABEL(alitrap):
#endif
_C_LABEL(alisize) = .-_C_LABEL(alitrap)
+#if !defined(PPC_MPC8XX)
/*
* Similar to the above for DSI
* Has to handle BAT spills
@@ -232,10 +241,11 @@ _C_LABEL(dsitrap):
streg %r31,(CI_DISISAVE+CPUSAVE_R31)(%r1) /* save r31 */
mfsprg1 %r1
mfcr %r29 /* save CR */
- mfxer %r30 /* save XER */
- mtsprg2 %r30 /* in SPRG2 */
mfsrr1 %r31 /* test kernel mode */
mtcr %r31
+#if !defined(PPC_MPC8XX)
+ mfxer %r30 /* save XER */
+ mtsprg2 %r30 /* in SPRG2 */
bt MSR_PR,1f /* branch if PSL_PR is set */
mfdar %r31 /* get fault address */
rlwinm %r31,%r31,3+(32-BAT_ADDR_SHIFT),BAT_ADDR_SHIFT-3,28
@@ -296,6 +306,7 @@ dsitrap_fix_dbat7:
mfsprg1 %r1
RFI /* return to trapped code */
1:
+#endif /* !PPC_MPC8XX */
mflr %r28 /* save LR */
mtsprg1 %r1 /* save SP */
#if defined(DISTANT_KERNEL)
@@ -307,6 +318,7 @@ dsitrap_fix_dbat7:
bla disitrap
#endif
_C_LABEL(dsisize) = .-_C_LABEL(dsitrap)
+#endif /* !PPC_MPC8XX */
#if defined(PPC_OEA601)
/*
@@ -444,7 +456,7 @@ _C_LABEL(decrint):
#endif
_C_LABEL(decrsize) = .-_C_LABEL(decrint)
-#if !defined(PPC_OEA64)
+#if !defined(PPC_OEA64) && !defined(PPC_MPC8XX)
/*
* Now the tlb software load for 603 processors:
* (Code essentially from the 603e User Manual, Chapter 5, but
@@ -648,7 +660,7 @@ _C_LABEL(tlbdsmiss):
ba EXC_DSI
#endif
_C_LABEL(tlbdsmsize) = .-_C_LABEL(tlbdsmiss)
-#endif /* !defined(PPC_OEA64) */
+#endif /* !PPC_OEA64 && !PPC_MPC8XX */
#if defined(DDB) || defined(KGDB)
/*
@@ -1112,6 +1124,9 @@ _C_LABEL(sctrapexit):
streg %r4,FRAME_CTR(%r1); \
streg %r11,FRAME_SRR0(%r1); \
streg %r12,FRAME_SRR1(%r1); \
+ mfmsr %r30; \
+ ori %r30,%r30,PSL_RI; /* turn on recovery interrupt */\
+ mtmsr %r30; \
SAVE_VRSAVE(%r1,%r6); \
SAVE_MQ(%r1,%r7)
@@ -1337,5 +1352,7 @@ _C_LABEL(trapend):
* All OEA have FPUs so include this too. Some OEA have AltiVec so include
* that too.
*/
+#if !defined(PPC_MPC8XX)
#include <powerpc/powerpc/fpu_subr.S>
#include <powerpc/oea/altivec_subr.S>
+#endif