Module Name: src Committed By: matt Date: Wed Jun 15 17:47:45 UTC 2011
Modified Files: src/sys/arch/powerpc/booke: genassym.cf trap_subr.S src/sys/arch/powerpc/powerpc: db_trace.c intr_stubs.c Log Message: Now that the generic fixup code exists, there's no to patch the interrupts directly since the stub fixup will do that automatically. Just need to add stubs for the interrupt vectors and they get fixed automagically. To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 src/sys/arch/powerpc/booke/genassym.cf \ src/sys/arch/powerpc/booke/trap_subr.S cvs rdiff -u -r1.54 -r1.55 src/sys/arch/powerpc/powerpc/db_trace.c cvs rdiff -u -r1.1 -r1.2 src/sys/arch/powerpc/powerpc/intr_stubs.c 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/booke/genassym.cf diff -u src/sys/arch/powerpc/booke/genassym.cf:1.3 src/sys/arch/powerpc/booke/genassym.cf:1.4 --- src/sys/arch/powerpc/booke/genassym.cf:1.3 Sun Jun 5 16:52:24 2011 +++ src/sys/arch/powerpc/booke/genassym.cf Wed Jun 15 17:47:45 2011 @@ -1,4 +1,4 @@ -# $NetBSD: genassym.cf,v 1.3 2011/06/05 16:52:24 matt Exp $ +# $NetBSD: genassym.cf,v 1.4 2011/06/15 17:47:45 matt Exp $ #- # Copyright (c) 2010, 2011 The NetBSD Foundation, Inc. @@ -236,12 +236,6 @@ define __HAVE_FAST_SOFTINTS __HAVE_FAST_SOFTINTS endif -define INTRSW_CRITINTR offsetof(struct intrsw, intrsw_critintr) -define INTRSW_DECRINTR offsetof(struct intrsw, intrsw_decrintr) -define INTRSW_FITINTR offsetof(struct intrsw, intrsw_fitintr) -define INTRSW_WDOGINTR offsetof(struct intrsw, intrsw_wdogintr) -define INTRSW_EXTINTR offsetof(struct intrsw, intrsw_extintr) - define IPL_HIGH IPL_HIGH define IPL_SCHED IPL_SCHED define IPL_VM IPL_VM Index: src/sys/arch/powerpc/booke/trap_subr.S diff -u src/sys/arch/powerpc/booke/trap_subr.S:1.3 src/sys/arch/powerpc/booke/trap_subr.S:1.4 --- src/sys/arch/powerpc/booke/trap_subr.S:1.3 Sun Jun 5 16:52:24 2011 +++ src/sys/arch/powerpc/booke/trap_subr.S Wed Jun 15 17:47:45 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: trap_subr.S,v 1.3 2011/06/05 16:52:24 matt Exp $ */ +/* $NetBSD: trap_subr.S,v 1.4 2011/06/15 17:47:45 matt Exp $ */ /*- * Copyright (c) 2010, 2011 The NetBSD Foundation, Inc. * All rights reserved. @@ -34,13 +34,7 @@ * POSSIBILITY OF SUCH DAMAGE. */ -RCSID("$NetBSD: trap_subr.S,v 1.3 2011/06/05 16:52:24 matt Exp $") - - .globl _C_LABEL(critintr_call) - .globl _C_LABEL(extintr_call) - .globl _C_LABEL(decrintr_call) - .globl _C_LABEL(fitintr_call) - .globl _C_LABEL(wdogintr_call) +RCSID("$NetBSD: trap_subr.S,v 1.4 2011/06/15 17:47:45 matt Exp $") .globl _C_LABEL(sctrapexit), _C_LABEL(trapexit), _C_LABEL(intrcall) @@ -348,8 +342,7 @@ /* MSR[ME] is unchanged, all others cleared */ FRAME_CRIT_PROLOGUE /* save SP r26-31 CR LR XER */ FRAME_CRIT_ENTER(EXC_CII) -_C_LABEL(critintr_call): - bl _C_LABEL(critintr_call) /* critintr(tf) */ + bl _C_LABEL(intr_critintr) /* critintr(tf) */ FRAME_CRIT_EXIT .p2align 4 @@ -412,8 +405,7 @@ FRAME_INTR_PROLOGUE /* save SP r25-31 CR LR XER */ FRAME_INTR_ENTER(EXC_EXI) -_C_LABEL(extintr_call): - bl _C_LABEL(extintr_call) + bl _C_LABEL(intr_extintr) _C_LABEL(intrcall): GET_CPUINFO(%r6) /* get curcpu() */ lwz %r5, FRAME_SRR1(%r1) /* get saved SRR1 */ @@ -500,8 +492,7 @@ FRAME_INTR_PROLOGUE /* save SP r25-31 CR LR XER */ FRAME_INTR_ENTER(EXC_DECR) -_C_LABEL(decrintr_call): - bl _C_LABEL(decrintr_call) + bl _C_LABEL(intr_decrintr) b intrexit .p2align 4 @@ -510,8 +501,7 @@ FRAME_PROLOGUE /* save SP r25-31 CR LR XER */ FRAME_INTR_ENTER(EXC_FIT) -_C_LABEL(fitintr_call): - bl _C_LABEL(fitintr_call) + bl _C_LABEL(intr_fitintr) b intrexit .data @@ -528,8 +518,7 @@ stb %r11,-65(%r11) #endif -_C_LABEL(wdogintr_call): - bl _C_LABEL(wdogintr_call) + bl _C_LABEL(intr_wdogintr) FRAME_CRIT_EXIT .p2align 4 @@ -863,51 +852,6 @@ cmplwi %r5,0 bnelr /* return if non-0 (non-primary) */ - lis %r5,_C_LABEL(critintr_call)@ha - lwzu %r6,_C_LABEL(critintr_call)@l(%r5) - lwz %r7,INTRSW_CRITINTR(%r3) - sub %r8,%r7,%r5 - add %r0,%r8,%r6 - stw %r0,0(%r5) - dcbf 0,%r5 - icbi 0,%r5 - - lis %r5,_C_LABEL(decrintr_call)@ha - lwzu %r6,_C_LABEL(decrintr_call)@l(%r5) - lwz %r7,INTRSW_DECRINTR(%r3) - sub %r8,%r7,%r5 - add %r0,%r8,%r6 - stw %r0,0(%r5) - dcbf 0,%r5 - icbi 0,%r5 - - lis %r5,_C_LABEL(fitintr_call)@ha - lwzu %r6,_C_LABEL(fitintr_call)@l(%r5) - lwz %r7,INTRSW_FITINTR(%r3) - sub %r8,%r7,%r5 - add %r0,%r8,%r6 - stw %r0,0(%r5) - dcbf 0,%r5 - icbi 0,%r5 - - lis %r5,_C_LABEL(wdogintr_call)@ha - lwzu %r6,_C_LABEL(wdogintr_call)@l(%r5) - lwz %r7,INTRSW_WDOGINTR(%r3) - sub %r8,%r7,%r5 - add %r0,%r8,%r6 - stw %r0,0(%r5) - dcbf 0,%r5 - icbi 0,%r5 - - lis %r5,_C_LABEL(extintr_call)@ha - lwzu %r6,_C_LABEL(extintr_call)@l(%r5) - lwz %r7,INTRSW_EXTINTR(%r3) - sub %r8,%r7,%r5 - add %r0,%r8,%r6 - stw %r0,0(%r5) - dcbf 0,%r5 - icbi 0,%r5 - lis %r5,_C_LABEL(powerpc_intrsw)@ha stw %r3,_C_LABEL(powerpc_intrsw)@l(%r5) Index: src/sys/arch/powerpc/powerpc/db_trace.c diff -u src/sys/arch/powerpc/powerpc/db_trace.c:1.54 src/sys/arch/powerpc/powerpc/db_trace.c:1.55 --- src/sys/arch/powerpc/powerpc/db_trace.c:1.54 Tue Jan 18 01:02:55 2011 +++ src/sys/arch/powerpc/powerpc/db_trace.c Wed Jun 15 17:47:45 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: db_trace.c,v 1.54 2011/01/18 01:02:55 matt Exp $ */ +/* $NetBSD: db_trace.c,v 1.55 2011/06/15 17:47:45 matt Exp $ */ /* $OpenBSD: db_trace.c,v 1.3 1997/03/21 02:10:48 niklas Exp $ */ /* @@ -28,7 +28,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: db_trace.c,v 1.54 2011/01/18 01:02:55 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: db_trace.c,v 1.55 2011/06/15 17:47:45 matt Exp $"); #include "opt_ppcarch.h" @@ -124,8 +124,7 @@ bool lwpaddr = false; extern int trapexit[], sctrapexit[]; #ifdef PPC_BOOKE - extern int extintr_call[], fitintr_call[], decrintr_call[]; - extern int critintr_call[], wdogintr_call[]; + extern int intrcall[]; #endif bool full = false; bool in_kernel = true; @@ -192,11 +191,7 @@ (*pr)("0x%08lx: ", frame); if (lr + 4 == (db_addr_t) trapexit || #ifdef PPC_BOOKE - lr == (db_addr_t) wdogintr_call || - lr == (db_addr_t) extintr_call || - lr == (db_addr_t) critintr_call || - lr == (db_addr_t) decrintr_call || - lr == (db_addr_t) fitintr_call || + lr + 4 == (db_addr_t) intrcall || #endif lr + 4 == (db_addr_t) sctrapexit) { const char *trapstr; Index: src/sys/arch/powerpc/powerpc/intr_stubs.c diff -u src/sys/arch/powerpc/powerpc/intr_stubs.c:1.1 src/sys/arch/powerpc/powerpc/intr_stubs.c:1.2 --- src/sys/arch/powerpc/powerpc/intr_stubs.c:1.1 Wed Jun 15 15:22:56 2011 +++ src/sys/arch/powerpc/powerpc/intr_stubs.c Wed Jun 15 17:47:45 2011 @@ -38,7 +38,7 @@ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: intr_stubs.c,v 1.1 2011/06/15 15:22:56 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: intr_stubs.c,v 1.2 2011/06/15 17:47:45 matt Exp $"); #include <sys/param.h> #include <sys/cpu.h> @@ -164,3 +164,48 @@ { (*powerpc_intrsw->intrsw_init)(); } + +void intr_critintr(struct trapframe *) __stub; + +void +intr_critintr(struct trapframe *tf) +{ + (*powerpc_intrsw->intrsw_critintr)(tf); + +} + +void intr_extintr(struct trapframe *) __stub; + +void +intr_extintr(struct trapframe *tf) +{ + (*powerpc_intrsw->intrsw_extintr)(tf); + +} + +void intr_decrintr(struct trapframe *) __stub; + +void +intr_decrintr(struct trapframe *tf) +{ + (*powerpc_intrsw->intrsw_decrintr)(tf); + +} + +void intr_fitintr(struct trapframe *) __stub; + +void +intr_fitintr(struct trapframe *tf) +{ + (*powerpc_intrsw->intrsw_fitintr)(tf); + +} + +void intr_wdogintr(struct trapframe *) __stub; + +void +intr_wdogintr(struct trapframe *tf) +{ + (*powerpc_intrsw->intrsw_wdogintr)(tf); + +}