Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/arch/evbsh5/evbsh5 Move the RESVEC vector table/handlers...
details: https://anonhg.NetBSD.org/src/rev/bc0847f57ad9
branches: trunk
changeset: 536173:bc0847f57ad9
user: scw <scw%NetBSD.org@localhost>
date: Tue Sep 10 11:53:14 2002 +0000
description:
Move the RESVEC vector table/handlers to here, since some if it is,
essentially, machine dependent.
diffstat:
sys/arch/evbsh5/evbsh5/locore.S | 172 +++++++++++++++++++++++++++++++++++++++-
1 files changed, 171 insertions(+), 1 deletions(-)
diffs (193 lines):
diff -r 38d3fce3a010 -r bc0847f57ad9 sys/arch/evbsh5/evbsh5/locore.S
--- a/sys/arch/evbsh5/evbsh5/locore.S Tue Sep 10 11:51:01 2002 +0000
+++ b/sys/arch/evbsh5/evbsh5/locore.S Tue Sep 10 11:53:14 2002 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: locore.S,v 1.4 2002/08/30 11:06:03 scw Exp $ */
+/* $NetBSD: locore.S,v 1.5 2002/09/10 11:53:14 scw Exp $ */
/*
* Copyright 2002 Wasabi Systems, Inc.
@@ -111,6 +111,15 @@
ptabs/l r0, tr0
blink tr0, r18
+ /*
+ * Arrange to catch panic traps with the mmu off.
+ */
+ LEA(_C_LABEL(sh5_resvec_vector_table), r0)
+ LEA(0x40000000, r1)
+ sub r0, r1, r0
+ ori r0, 1, r0
+ putcon r0, resvec
+
/* Now safe to call C code */
/*
@@ -185,6 +194,167 @@
#include <sh5/sh5/sigcode.S>
#include <sh5/sh5/bus_subr.S>
+
+/*===================== Start of RESVEC Vector Table =========================*/
+
+ _TEXT_SECTION
+ .balign 0x10
+
+GLOBAL(sh5_resvec_vector_table)
+
+/******************************************************************************
+ * Reset/Panic Exception Vector.
+ *
+ * RESVEC Offset: 0x0
+ * Length: 0x100
+ */
+Lsh5_resvec_vector_panic:
+ getcon usr, r24
+ putcon r15, kcr1
+ LEA(_C_LABEL(sh5_panic_stack) - (0x40000000-(USPACE-SZ_TRAPFRAME)), r15)
+ st.q r15, SFO(SF_USR,SZ_TRAPFRAME), r24 /* Save USR */
+ st.q r15, IFO(IF_R0,SZ_TRAPFRAME), r0 /* Save r0 */
+ st.q r15, IFO(IF_R1,SZ_TRAPFRAME), r1 /* Save r1 */
+ st.q r15, IFO(IF_R2,SZ_TRAPFRAME), r2 /* Save r2 */
+ getcon sr, r1
+ movi -32768, r0
+ shori 0, r0
+ st.q r0, 0, r15
+ st.q r0, 8, r1
+ getcon kcr1, r0
+ st.q r15, IFO(IF_R15,SZ_TRAPFRAME), r0 /* Save r15 */
+ gettr tr0, r0
+ st.q r15, IFO(IF_TR0,SZ_TRAPFRAME), r0 /* Save tr0 */
+ getcon pssr, r0
+ st.q r15, SFO(SF_SSR,SZ_TRAPFRAME), r0 /* Save PSSR */
+ getcon pspc, r0
+ st.q r15, SFO(SF_SPC,SZ_TRAPFRAME), r0 /* Save PSPC */
+ getcon pexpevt, r0
+ st.q r15, SFO(SF_EXPEVT, SZ_TRAPFRAME), r0 /* Save PEXPEVT */
+ getcon intevt, r0
+ st.q r15, SFO(SF_INTEVT, SZ_TRAPFRAME), r0 /* Save INTEVT */
+ getcon tea, r0
+ st.q r15, SFO(SF_TEA, SZ_TRAPFRAME), r0 /* Save TEA */
+ getcon tra, r0
+ st.q r15, SFO(SF_TRA, SZ_TRAPFRAME), r0 /* Save TRA */
+ movi 0, r2
+ pta/l Lsh5_event_panic, tr0
+ blink tr0, r63
+
+ .space (0x100 - (. - Lsh5_resvec_vector_panic))
+
+
+/******************************************************************************
+ * Debug Synchronous Exception Handler
+ *
+ * RESVEC Offset: 0x100
+ * Length: 0x100
+ */
+Lsh5_resvec_vector_dbg_general:
+ getcon usr, r24 /* Stash USR somewhere safe for now */
+ putcon r15, kcr1
+ LEA(_C_LABEL(sh5_panic_stack) - (0x40000000-(USPACE-SZ_TRAPFRAME)), r15)
+ st.q r15, SFO(SF_USR,SZ_TRAPFRAME), r24 /* Save USR */
+ st.q r15, IFO(IF_R0,SZ_TRAPFRAME), r0 /* Save r0 */
+ st.q r15, IFO(IF_R1,SZ_TRAPFRAME), r1 /* Save r1 */
+ st.q r15, IFO(IF_R2,SZ_TRAPFRAME), r2 /* Save r2 */
+ getcon kcr1, r0
+ st.q r15, IFO(IF_R15,SZ_TRAPFRAME), r0 /* Save r15 */
+ gettr tr0, r0
+ st.q r15, IFO(IF_TR0,SZ_TRAPFRAME), r0 /* Save tr0 */
+ getcon ssr, r0
+ st.q r15, SFO(SF_SSR,SZ_TRAPFRAME), r0 /* Save SSR */
+ getcon spc, r0
+ st.q r15, SFO(SF_SPC,SZ_TRAPFRAME), r0 /* Save SPC */
+ getcon expevt, r0
+ st.q r15, SFO(SF_EXPEVT, SZ_TRAPFRAME), r0 /* Save EXPEVT */
+ getcon intevt, r0
+ st.q r15, SFO(SF_INTEVT, SZ_TRAPFRAME), r0 /* Save INTEVT */
+ getcon tea, r0
+ st.q r15, SFO(SF_TEA, SZ_TRAPFRAME), r0 /* Save TEA */
+ getcon tra, r0
+ st.q r15, SFO(SF_TRA, SZ_TRAPFRAME), r0 /* Save TRA */
+ movi 1, r2
+ pta/l Lsh5_event_panic, tr0
+ blink tr0, r63
+
+ .space (0x100 - (. - Lsh5_resvec_vector_dbg_general))
+
+
+/******************************************************************************
+ * Debug Interrupt Handler.
+ *
+ * RESVEC Offset: 0x200
+ * Length: 0x200
+ */
+Lsh5_resvec_vector_debugint:
+ getcon usr, r24 /* Stash USR somewhere safe for now */
+ putcon r15, kcr1
+ LEA(_C_LABEL(sh5_panic_stack) - (0x40000000-(USPACE-SZ_TRAPFRAME)), r15)
+ st.q r15, SFO(SF_USR,SZ_TRAPFRAME), r24 /* Save USR */
+ st.q r15, IFO(IF_R0,SZ_TRAPFRAME), r0 /* Save r0 */
+ st.q r15, IFO(IF_R1,SZ_TRAPFRAME), r1 /* Save r1 */
+ st.q r15, IFO(IF_R2,SZ_TRAPFRAME), r2 /* Save r2 */
+ getcon kcr1, r0
+ st.q r15, IFO(IF_R15,SZ_TRAPFRAME), r0 /* Save r15 */
+ gettr tr0, r0
+ st.q r15, IFO(IF_TR0,SZ_TRAPFRAME), r0 /* Save tr0 */
+ getcon ssr, r0
+ st.q r15, SFO(SF_SSR,SZ_TRAPFRAME), r0 /* Save SSR */
+ getcon spc, r0
+ st.q r15, SFO(SF_SPC,SZ_TRAPFRAME), r0 /* Save SPC */
+ getcon expevt, r0
+ st.q r15, SFO(SF_EXPEVT, SZ_TRAPFRAME), r0 /* Save EXPEVT */
+ getcon intevt, r0
+ st.q r15, SFO(SF_INTEVT, SZ_TRAPFRAME), r0 /* Save INTEVT */
+ getcon tea, r0
+ st.q r15, SFO(SF_TEA, SZ_TRAPFRAME), r0 /* Save TEA */
+ getcon tra, r0
+ st.q r15, SFO(SF_TRA, SZ_TRAPFRAME), r0 /* Save TRA */
+ movi 2, r2
+
+
+/******************************************************************************
+ * Continuation of Panic Event.
+ *
+ * Save the remainder of the machine state, re-enable the MMU and head off
+ * into C code to report the problem on the console (if possible), never
+ * to return.
+ */
+Lsh5_event_panic:
+ _INTR_FRAME_SAVE(SZ_TRAPFRAME)
+ _TRAP_FRAME_SAVE(SZ_TRAPFRAME)
+ getcon ssr, r3 /* Parameters for panic_trap() */
+ getcon spc, r4
+ getcon expevt, r5
+ or r2, r63, r6
+ LDC32(0x01600000, r0) /* Disable (freeze) the caches */
+ putcfg r0, 0, r63
+ LDC32(0x01e00000, r0)
+ putcfg r0, 0, r63
+ LEAF(1f, r0)
+ putcon r0, spc
+ LDUC32(SH5_CONREG_SR_MD|SH5_CONREG_SR_MMU|SH5_CONREG_SR_IMASK_ALL, r0)
+ putcon r0, ssr
+ LEA(_C_LABEL(sh5_panic_stack), r15)
+ movi (USPACE - SZ_TRAPFRAME), r0
+ add r15, r0, r15
+ synco
+ rte /* Re-enable the MMU */
+ nop
+ nop
+ nop
+ nop
+ nop
+1: LEAF(_C_LABEL(panic_trap), r0)
+ ptabs/l r0, tr0
+ or r15, r63, r2
+ blink tr0, r63
+ /*NOTREACHED*/
+
+ .comm _C_LABEL(sh5_panic_stack),USPACE,16
+
+
#include "dtfcons.h"
#if NDTFCONS > 0
Home |
Main Index |
Thread Index |
Old Index