Add some instrumentation and clean up some VAX8600 code.

From Johnny Billquist.
This commit is contained in:
ragge 2003-01-19 22:29:22 +00:00
parent 6c79dcd0e4
commit 6ad43b52da
7 changed files with 57 additions and 70 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: ioa.h,v 1.8 2001/05/16 05:36:57 matt Exp $ */
/* $NetBSD: ioa.h,v 1.9 2003/01/19 22:29:22 ragge Exp $ */
/*-
* Copyright (c) 1982, 1986 The Regents of the University of California.
* All rights reserved.
@ -60,8 +60,7 @@
#include "opt_cputype.h"
#if VAX8600 || VAXANY
#define MAXNIOA 4
#define NIOA8600 2
#define NIOA8600 2 /* Number of SBI possible on a VAX86x0 */
#define IOASIZE 0x2000000
#define IOAMAPSIZ 512 /* Map one page to get at SBIA regs */
#define IOA8600(i) ((caddr_t)(0x20080000+IOASIZE*i))
@ -88,7 +87,7 @@ struct sbia_regs
int sbi_maint;
int sbi_unjam;
int sbi_qclr;
int sbi_unused[12];
int sbi_unused1[12];
int sbi_iv10;
int sbi_iv11;
int sbi_iv12;
@ -104,13 +103,7 @@ struct sbia_regs
int sbi_iv1c;
int sbi_iv1d;
int sbi_iv1e;
};
struct ioa {
union ioacsr {
long ioa_csr;
u_char ioa_type;
} ioacsr;
long ioa_pad[IOAMAPSIZ / sizeof (long) - 1];
int sbi_unused2[17];
};
#define IOA_TYPMSK 0xf0

View File

@ -1,4 +1,4 @@
/* $NetBSD: crl.c,v 1.13 2002/10/23 09:12:36 jdolecek Exp $ */
/* $NetBSD: crl.c,v 1.14 2003/01/19 22:29:23 ragge Exp $ */
/*-
* Copyright (c) 1982, 1986 The Regents of the University of California.
* All rights reserved.
@ -79,14 +79,13 @@ const struct cdevsw crl_cdevsw = {
nostop, notty, nopoll, nommap, nokqfilter,
};
struct ivec_dsp crl_intr;
struct evcnt crl_ev = EVCNT_INITIALIZER(EVCNT_TYPE_INTR, NULL, "crl", "intr");
void
crlattach()
{
crl_intr = idsptch;
crl_intr.hoppaddr = crlintr;
scb->scb_csrint = &crl_intr;
evcnt_attach_static(&crl_ev);
scb_vecalloc(0xF0, crlintr, NULL, SCB_ISTACK, &crl_ev);
}
/*ARGSUSED*/

View File

@ -1,4 +1,4 @@
# $NetBSD: genassym.cf,v 1.25 2003/01/18 07:10:34 thorpej Exp $
# $NetBSD: genassym.cf,v 1.26 2003/01/19 22:29:23 ragge Exp $
#
# Copyright (c) 1997 Ludd, University of Lule}, Sweden.
# All rights reserved.
@ -76,6 +76,9 @@ define KERNBASE KERNBASE
define UVM_PAGE_IDLE_ZERO offsetof(struct uvm, page_idle_zero)
define UVME_INTRS offsetof(struct uvmexp, intrs)
define UVME_SOFTS offsetof(struct uvmexp, softs)
define CI_CURLWP offsetof(struct cpu_info, ci_curlwp)
define CI_WANT_RESCHED offsetof(struct cpu_info, ci_want_resched)
define CI_EXIT offsetof(struct cpu_info, ci_exit)

View File

@ -1,4 +1,4 @@
/* $NetBSD: intvec.S,v 1.3 2002/05/13 21:11:23 matt Exp $ */
/* $NetBSD: intvec.S,v 1.4 2003/01/19 22:29:23 ragge Exp $ */
/*
* Copyright (c) 1994, 1997 Ludd, University of Lule}, Sweden.
@ -300,6 +300,7 @@ SCBENTRY(softclock)
jsb softintr_dispatch
incl _C_LABEL(softclock_intrcnt)+EV_COUNT
adwc $0,_C_LABEL(softclock_intrcnt)+EV_COUNT+4
incl _C_LABEL(uvmexp)+UVME_SOFTS
POPR
rei
@ -321,6 +322,7 @@ SCBENTRY(softnet)
jsb softintr_dispatch
incl _C_LABEL(softnet_intrcnt)+EV_COUNT
adwc $0,_C_LABEL(softnet_intrcnt)+EV_COUNT+4
incl _C_LABEL(uvmexp)+UVME_SOFTS
POPR
rei
@ -330,6 +332,7 @@ SCBENTRY(softserial)
jsb softintr_dispatch
incl _C_LABEL(softserial_intrcnt)+EV_COUNT
adwc $0,_C_LABEL(softserial_intrcnt)+EV_COUNT+4
incl _C_LABEL(uvmexp)+UVME_SOFTS
POPR
rei
@ -372,6 +375,7 @@ SCBENTRY(hardclock)
1: pushr $0x3f
incl _C_LABEL(clock_intrcnt)+EV_COUNT # count the number of clock interrupts
adwc $0,_C_LABEL(clock_intrcnt)+EV_COUNT+4
incl _C_LABEL(uvmexp)+UVME_INTRS
#if VAX46 || VAXANY
cmpl _C_LABEL(vax_boardtype),$VAX_BTYP_46
bneq 1f

View File

@ -1,4 +1,4 @@
/* $NetBSD: ka860.c,v 1.21 2003/01/01 02:29:38 thorpej Exp $ */
/* $NetBSD: ka860.c,v 1.22 2003/01/19 22:29:23 ragge Exp $ */
/*
* Copyright (c) 1986, 1988 Regents of the University of California.
* All rights reserved.
@ -52,19 +52,19 @@
#include <vax/vax/gencons.h>
static void ka86_memerr __P((void));
static int ka86_mchk __P((caddr_t));
static void ka86_reboot __P((int));
static void ka86_clrf __P((void));
static void ka860_init __P((struct device *));
static void ka86_memerr(void);
static int ka86_mchk(caddr_t);
static void ka86_reboot(int);
static void ka86_clrf(void);
static void ka860_init(void);
void crlattach __P((void));
void crlattach(void);
struct cpu_dep ka860_calls = {
0,
ka86_mchk,
ka86_memerr,
0,
ka860_init,
generic_clkread,
generic_clkwrite,
6, /* ~VUPS */
@ -221,8 +221,7 @@ struct mc8600frame {
/* machine check */
int
ka86_mchk(cmcf)
caddr_t cmcf;
ka86_mchk(caddr_t cmcf)
{
register struct mc8600frame *mcf = (struct mc8600frame *)cmcf;
register int type;
@ -272,25 +271,27 @@ struct ka86 {
};
void
ka860_init(self)
struct device *self;
ka860_init(void)
{
struct ka86 *ka86 = (void *)&vax_cpudata;
int fpa;
/* Enable cache */
mtpr(3, PR_CSWP);
printf(": CPU serial number %d(%d), hardware ECO level %d(%d)\n%s: ",
ka86->snr, ka86->plant, ka86->eco >> 4, ka86->eco, self->dv_xname);
if (mfpr(PR_ACCS) & 255) {
printf("cpu0: ka86%d, serial number %d, mfg plant %d, "
"hardware ECO level %d\n", ka86->v8650 ? 5 : 0, ka86->snr,
ka86->plant, ka86->eco);
printf("cpu0: ");
fpa = mfpr(PR_ACCS);
if (fpa & 255) {
printf("FPA present, type %d, serial number %d, enabling.\n",
mfpr(PR_ACCS) & 255, mfpr(PR_ACCS) >> 16);
fpa & 255, fpa >> 16);
mtpr(0x8000, PR_ACCS);
} else
printf("no FPA\n");
/* enable CRD reports */
mtpr(mfpr(PR_MERG) & ~M8600_ICRD, PR_MERG);
crlattach();
}
/*
@ -327,8 +328,7 @@ ka86_clrf()
}
void
ka86_reboot(howto)
int howto;
ka86_reboot(int howto)
{
WAIT;
@ -353,10 +353,7 @@ CFATTACH_DECL(abus, sizeof(struct device),
* Abus is the master bus on VAX 8600.
*/
int
abus_match(parent, cf, aux)
struct device *parent;
struct cfdata *cf;
void *aux;
abus_match(struct device *parent, struct cfdata *cf, void *aux)
{
if (vax_bustype == VAX_ABUS)
return 1;
@ -364,29 +361,28 @@ abus_match(parent, cf, aux)
}
void
abus_attach(parent, self, aux)
struct device *parent, *self;
void *aux;
abus_attach(struct device *parent, struct device *self, void *aux)
{
volatile int tmp;
volatile struct sbia_regs *sbiar;
struct ioa *ioa;
int type, i;
struct bp_conf bp;
/*
* Init CPU.
* Attach crl first.
*/
ka860_init(self);
printf("\n");
crlattach();
for (i = 0; i < MAXNIOA; i++) {
ioa = (struct ioa *)vax_map_physmem((paddr_t)IOA8600(0),
for (i = 0; i < NIOA8600; i++) {
sbiar = (struct sbia_regs *)vax_map_physmem((paddr_t)IOA8600(i),
(IOAMAPSIZ / VAX_NBPG));
if (badaddr((caddr_t)ioa, 4)) {
vax_unmap_physmem((vaddr_t)ioa, (IOAMAPSIZ / VAX_NBPG));
if (badaddr((caddr_t)sbiar, 4)) {
vax_unmap_physmem((vaddr_t)sbiar, (IOAMAPSIZ / VAX_NBPG));
continue;
}
tmp = ioa->ioacsr.ioa_csr;
tmp = sbiar->sbi_cfg;
type = tmp & IOA_TYPMSK;
switch (type) {
@ -394,8 +390,8 @@ abus_attach(parent, self, aux)
case IOA_SBIA:
bp.type = "sbi";
bp.num = i;
bp.bp_addr = tmp;
config_found(self, &bp, abus_print);
sbiar = (void *)ioa;
sbiar->sbi_errsum = -1;
sbiar->sbi_error = 0x1000;
sbiar->sbi_fltsts = 0xc0000;
@ -405,21 +401,16 @@ abus_attach(parent, self, aux)
printf("IOAdapter %x unsupported\n", type);
break;
}
vax_unmap_physmem((vaddr_t)ioa, (IOAMAPSIZ / VAX_NBPG));
vax_unmap_physmem((vaddr_t)sbiar, (IOAMAPSIZ / VAX_NBPG));
}
}
int
abus_print(aux, hej)
void *aux;
const char *hej;
abus_print(void *aux, const char *name)
{
#if ABUS_VERBOSE
struct bp_conf *bp = aux;
if (hej)
aprint_normal("%s at %s", bp->type, hej);
if (name)
aprint_normal("%s at %s", bp->type, name);
printf(": rev %d", bp->bp_addr & 0xf);
return (UNCONF);
#else
return (QUIET);
#endif
}

View File

@ -1,4 +1,4 @@
/* $NetBSD: sbi.c,v 1.27 2003/01/01 00:16:47 thorpej Exp $ */
/* $NetBSD: sbi.c,v 1.28 2003/01/19 22:29:24 ragge Exp $ */
/*
* Copyright (c) 1994 Ludd, University of Lule}, Sweden.
* All rights reserved.
@ -76,11 +76,7 @@ sbi_print(void *aux, const char *name)
int
sbi_match_abus(struct device *parent, struct cfdata *cf, void *aux)
{
struct bp_conf *bp = aux;
if (bp->num == 0) /* XXX - only one SBI */
return 1;
return 0;
return 1; /* We've already done the matching... */
}
int

View File

@ -1,4 +1,4 @@
/* $NetBSD: subr.S,v 1.5 2003/01/18 07:10:35 thorpej Exp $ */
/* $NetBSD: subr.S,v 1.6 2003/01/19 22:29:24 ragge Exp $ */
/*
* Copyright (c) 1994 Ludd, University of Lule}, Sweden.
@ -228,7 +228,8 @@ _C_LABEL(cmn_idsptch):
beql 1f # no ptr, skip increment
incl EV_COUNT(%r1) # increment low longword
adwc $0,EV_COUNT+4(%r1) # add any carry to hi longword
1: pushl 4(%r0) # push argument
1: incl _C_LABEL(uvmexp)+UVME_INTRS # increment uvmexp.intrs
pushl 4(%r0) # push argument
calls $1,*(%r0) # call interrupt routine
popr $0x3f # pop registers
rei # return from interrut