Module Name: src
Committed By: ragge
Date: Thu Jul 1 19:50:12 UTC 2010
Modified Files:
src/sys/arch/vax/conf: GENERIC files.vax
src/sys/arch/vax/include: cpu.h ioa.h nexus.h
src/sys/arch/vax/uba: uba_sbi.c
src/sys/arch/vax/vax: autoconf.c clock.c cmi.c crl.c intvec.S ka860.c
lock_stubs.S pmap.c sbi.c ubi.c
Log Message:
A big bunch of bugfixes from Johnny Billquist. Highlights:
- Makes the VAX8600 work as expected (500kg of hardware :-)
- Fix a hard-tracked bug causing VAXen to hang at splhigh.
To generate a diff of this commit:
cvs rdiff -u -r1.173 -r1.174 src/sys/arch/vax/conf/GENERIC
cvs rdiff -u -r1.116 -r1.117 src/sys/arch/vax/conf/files.vax
cvs rdiff -u -r1.88 -r1.89 src/sys/arch/vax/include/cpu.h
cvs rdiff -u -r1.12 -r1.13 src/sys/arch/vax/include/ioa.h
cvs rdiff -u -r1.25 -r1.26 src/sys/arch/vax/include/nexus.h
cvs rdiff -u -r1.27 -r1.28 src/sys/arch/vax/uba/uba_sbi.c
cvs rdiff -u -r1.90 -r1.91 src/sys/arch/vax/vax/autoconf.c
cvs rdiff -u -r1.52 -r1.53 src/sys/arch/vax/vax/clock.c
cvs rdiff -u -r1.11 -r1.12 src/sys/arch/vax/vax/cmi.c
cvs rdiff -u -r1.27 -r1.28 src/sys/arch/vax/vax/crl.c
cvs rdiff -u -r1.17 -r1.18 src/sys/arch/vax/vax/intvec.S
cvs rdiff -u -r1.32 -r1.33 src/sys/arch/vax/vax/ka860.c
cvs rdiff -u -r1.15 -r1.16 src/sys/arch/vax/vax/lock_stubs.S
cvs rdiff -u -r1.175 -r1.176 src/sys/arch/vax/vax/pmap.c
cvs rdiff -u -r1.34 -r1.35 src/sys/arch/vax/vax/sbi.c
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/vax/vax/ubi.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/vax/conf/GENERIC
diff -u src/sys/arch/vax/conf/GENERIC:1.173 src/sys/arch/vax/conf/GENERIC:1.174
--- src/sys/arch/vax/conf/GENERIC:1.173 Sat May 8 22:16:30 2010
+++ src/sys/arch/vax/conf/GENERIC Thu Jul 1 19:50:11 2010
@@ -1,4 +1,4 @@
-# $NetBSD: GENERIC,v 1.173 2010/05/08 22:16:30 mrg Exp $
+# $NetBSD: GENERIC,v 1.174 2010/07/01 19:50:11 ragge Exp $
#
# GENERIC machine description file
#
@@ -22,7 +22,7 @@
options INCLUDE_CONFIG_FILE # embed config file in kernel binary
-#ident "GENERIC-$Revision: 1.173 $"
+#ident "GENERIC-$Revision: 1.174 $"
# Here are all different supported CPU types listed.
#options VAX8800 # VAX 8500, 8530, 8550, 8700, 8800
@@ -176,7 +176,8 @@
cpu* at mainbus0
# All buses; from the beginning attached to mainbus.
-sbi0 at mainbus0 # SBI, master bus on 11/780, 8600.
+abus0 at mainbus0 # Master bus on VAX 86x0
+sbi0 at mainbus0 # SBI, master bus on 11/78x.
cmi0 at mainbus0 # 11/750 internal bus.
bi0 at mainbus0 # VAX 8200
vsbus0 at mainbus0 # All VAXstations
@@ -232,6 +233,9 @@
uba* at cmi? tr? # Unibus adapters
mba* at cmi? tr? # Massbus adapters
+# ABUS (VAX 86x0)
+sbi* at abus0 # VAX 86x0 can have up to 2 SBI's.
+
# SBI (VAX 11/780, VAX 8600)
mem* at sbi? tr? # Memory subsystems
uba* at sbi? tr? # Unibus adapters
@@ -301,10 +305,10 @@
pseudo-device bpfilter
#pseudo-device carp # Common Address Redundancy Protocol
pseudo-device ipfilter # IP filter (firewall) and NAT
-#pseudo-device sl
-pseudo-device ppp
+#pseudo-device sl
+pseudo-device ppp
#pseudo-device pppoe # PPP over Ethernet (RFC 2516)
-pseudo-device tun
+pseudo-device tun
pseudo-device tap # virtual Ethernet
#pseudo-device gre # generic L3 over IP tunnel
pseudo-device gif # IPv[46] over IPv[46] tunnel (RFC1933)
@@ -314,7 +318,7 @@
pseudo-device bridge # simple inter-network bridging
#options BRIDGE_IPF # bridge uses IP/IPv6 pfil hooks too
pseudo-device agr # IEEE 802.3ad link aggregation
-pseudo-device vnd
+pseudo-device vnd
#options VND_COMPRESSION # compressed vnd(4)
pseudo-device ccd 4
#pseudo-device cgd 4 # cryptographic disk devices
Index: src/sys/arch/vax/conf/files.vax
diff -u src/sys/arch/vax/conf/files.vax:1.116 src/sys/arch/vax/conf/files.vax:1.117
--- src/sys/arch/vax/conf/files.vax:1.116 Mon Feb 16 23:55:31 2009
+++ src/sys/arch/vax/conf/files.vax Thu Jul 1 19:50:11 2010
@@ -1,4 +1,4 @@
-# $NetBSD: files.vax,v 1.116 2009/02/16 23:55:31 christos Exp $
+# $NetBSD: files.vax,v 1.117 2010/07/01 19:50:11 ragge Exp $
#
# new style config file for vax architecture
#
@@ -35,19 +35,22 @@
attach nmi at mainbus with nmi_mainbus
file arch/vax/vax/nmi_mainbus.c nmi
+# Abus and related devices
+device abus {}: bus
+attach abus at mainbus with abus_mainbus
+file arch/vax/vax/ka860.c vax8600
+file arch/vax/vax/crl.c vax8600
+
# SBI and related devices
device sbi { tr=-1 }: bus
attach sbi at mainbus with sbi_mainbus
+attach sbi at abus with sbi_abus
file arch/vax/vax/sbi.c sbi
attach mem at sbi with mem_sbi
file arch/vax/vax/ka780.c vax780 | mem_sbi | vaxany
file arch/vax/vax/cfl.c vax780 | mem_sbi | vaxany
-# Abus and related devices
-file arch/vax/vax/ka860.c vax8600
-file arch/vax/vax/crl.c vax8600
-
# CMI and related devices
device cmi { tr=-1 }: bus
attach cmi at mainbus
Index: src/sys/arch/vax/include/cpu.h
diff -u src/sys/arch/vax/include/cpu.h:1.88 src/sys/arch/vax/include/cpu.h:1.89
--- src/sys/arch/vax/include/cpu.h:1.88 Tue Jun 22 18:29:02 2010
+++ src/sys/arch/vax/include/cpu.h Thu Jul 1 19:50:12 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: cpu.h,v 1.88 2010/06/22 18:29:02 rmind Exp $ */
+/* $NetBSD: cpu.h,v 1.89 2010/07/01 19:50:12 ragge Exp $ */
/*
* Copyright (c) 1994 Ludd, University of Lule}, Sweden
@@ -79,7 +79,6 @@
void (*cpu_clrf)(void); /* Clear cold/warm start flags */
const char * const *cpu_devs; /* mainbus devices */
void (*cpu_attach_cpu)(device_t); /* print CPU info */
- void (*cpu_subconf)(device_t, void *, cfprint_t); /* attach dep. dev */
int cpu_flags;
void (*cpu_badaddr)(void); /* cpu-specific badaddr() */
};
Index: src/sys/arch/vax/include/ioa.h
diff -u src/sys/arch/vax/include/ioa.h:1.12 src/sys/arch/vax/include/ioa.h:1.13
--- src/sys/arch/vax/include/ioa.h:1.12 Sun Mar 4 06:00:57 2007
+++ src/sys/arch/vax/include/ioa.h Thu Jul 1 19:50:12 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: ioa.h,v 1.12 2007/03/04 06:00:57 christos Exp $ */
+/* $NetBSD: ioa.h,v 1.13 2010/07/01 19:50:12 ragge Exp $ */
/*-
* Copyright (c) 1982, 1986 The Regents of the University of California.
* All rights reserved.
@@ -30,6 +30,10 @@
* @(#)ioa.h 7.3 (Berkeley) 5/9/91
*/
+/*
+ * ABus support added by Johnny Billquist 2010
+ */
+
/****************************************************************
* *
* Licensed from Digital Equipment Corporation *
@@ -57,9 +61,10 @@
#include "opt_cputype.h"
#if VAX8600 || VAXANY
#define NIOA8600 2 /* Number of SBI possible on a VAX86x0 */
-#define IOASIZE 0x2000000
+#define IOASIZE 0x2000000 /* Size of one SBI memory area */
#define IOAMAPSIZ 512 /* Map one page to get at SBIA regs */
-#define IOA8600(i) ((void *)(0x20080000+IOASIZE*i))
+#define SBIA8600(i) ((void *)(0x20000000+IOASIZE*i)) /* Base address for SBI */
+#define IOA8600(i) ((void *)((bus_addr_t)(SBIA8600(i))+0x80000)) /* Address of SBIA registers */
struct sbia_regs
{
@@ -102,7 +107,7 @@
int sbi_unused2[17];
};
-#define IOA_TYPMSK 0xf0
-#define IOA_SBIA 0x10
+#define IOA_TYPMSK 0xf0 /* Mask for type information in sbi_cfg */
+#define IOA_SBIA 0x10 /* Value for SBIA type on ABus */
#endif /* VAX8600 */
Index: src/sys/arch/vax/include/nexus.h
diff -u src/sys/arch/vax/include/nexus.h:1.25 src/sys/arch/vax/include/nexus.h:1.26
--- src/sys/arch/vax/include/nexus.h:1.25 Tue Mar 11 05:34:02 2008
+++ src/sys/arch/vax/include/nexus.h Thu Jul 1 19:50:12 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: nexus.h,v 1.25 2008/03/11 05:34:02 matt Exp $ */
+/* $NetBSD: nexus.h,v 1.26 2010/07/01 19:50:12 ragge Exp $ */
/*-
* Copyright (c) 1982, 1986 The Regents of the University of California.
@@ -31,6 +31,10 @@
* @(#)nexus.h 7.3 (Berkeley) 5/9/91
*/
+/*
+ * ABus support added by Johnny Billquist 2010.
+ */
+
#ifndef _VAX_NEXUS_H_
#define _VAX_NEXUS_H_
@@ -46,7 +50,7 @@
VAX_SBIBUS, /* SBI parent (780) */
VAX_CMIBUS, /* CMI backplane (750) */
VAX_UNIBUS, /* Direct backplane (730) */
- VAX_ABUS, /* SBI placeholder (8600) */
+ VAX_ABUS, /* ABus (8600) */
VAX_BIBUS, /* BI bus (8200) */
VAX_NMIBUS, /* NMI backplane (8800) */
VAX_VSBUS, /* Virtual vaxstation bus */
@@ -61,16 +65,13 @@
* byte of the first word of the adapter address space.
* At boot time the system looks through the array of available
* slots and finds the interconnects for the machine.
+ *
+ * VAX8600 nexus information is located in ioa.h
*/
#define IO_CMI750 2
#define MAXNMCR 1
#define NNEXSBI 16
-#if VAX8600 || VAXANY
-#define NNEX8600 NNEXSBI
-#define NEXA8600 ((struct nexus *)(0x20000000))
-#define NEXB8600 ((struct nexus *)(0x22000000))
-#endif
#if VAX780 || VAXANY
#define NNEX780 NNEXSBI
#define NEX780 ((struct nexus *)0x20000000)
@@ -81,12 +82,6 @@
#endif
#define NEXSIZE 0x2000
-#if VAX8600 || VAXANY
-#define MAXNNEXUS (2 * NNEXSBI)
-#else
-#define MAXNNEXUS NNEXSBI
-#endif
-
#ifdef _KERNEL
struct nexus {
@@ -97,6 +92,16 @@
long nex_pad[NEXSIZE / sizeof (long) - 1];
};
+struct abus_attach_args {
+ const char *aa_name;
+ int aa_type;
+ bus_addr_t aa_base;
+ int aa_num;
+ bus_space_tag_t aa_iot;
+ bus_space_handle_t aa_ioh;
+ bus_dma_tag_t aa_dmat;
+};
+
struct sbi_attach_args {
int sa_nexnum; /* This nexus TR number */
int sa_type; /* This nexus type */
@@ -104,6 +109,7 @@
bus_space_tag_t sa_iot;
bus_space_handle_t sa_ioh;
bus_dma_tag_t sa_dmat;
+ bus_addr_t sa_base;
};
/* Memory device struct. This should be somewhere else */
Index: src/sys/arch/vax/uba/uba_sbi.c
diff -u src/sys/arch/vax/uba/uba_sbi.c:1.27 src/sys/arch/vax/uba/uba_sbi.c:1.28
--- src/sys/arch/vax/uba/uba_sbi.c:1.27 Sat Mar 14 15:36:14 2009
+++ src/sys/arch/vax/uba/uba_sbi.c Thu Jul 1 19:50:12 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: uba_sbi.c,v 1.27 2009/03/14 15:36:14 dsl Exp $ */
+/* $NetBSD: uba_sbi.c,v 1.28 2010/07/01 19:50:12 ragge Exp $ */
/*
* Copyright (c) 1982, 1986 The Regents of the University of California.
* All rights reserved.
@@ -67,8 +67,15 @@
* @(#)autoconf.c 7.20 (Berkeley) 5/9/91
*/
+/*
+ * Abus support added by Johnny Billquist 2010
+ * Changed UBA code to need to know less of the innards of the
+ * actual machine at the same time. Information passed down from
+ * the SBI bus instead.
+ */
+
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uba_sbi.c,v 1.27 2009/03/14 15:36:14 dsl Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uba_sbi.c,v 1.28 2010/07/01 19:50:12 ragge Exp $");
#include <sys/param.h>
#include <sys/device.h>
@@ -92,8 +99,7 @@
/* Some SBI-specific defines */
#define UBASIZE (UBAPAGES * VAX_NBPG)
-#define UMEMA8600(i) (0x20100000+(i)*0x40000)
-#define UMEMB8600(i) (0x22100000+(i)*0x40000)
+#define UMEM(sa,i) ((sa->sa_base)+0x100000+(i)*0x40000)
/*
* Some status registers.
@@ -169,6 +175,7 @@
struct sbi_attach_args * const sa = aux;
int ubaddr = sa->sa_type & 3;
+ aprint_naive(": DW780\n");
aprint_normal(": DW780\n");
/*
@@ -214,8 +221,7 @@
sc->uv_size = UBASIZE; /* Size in bytes of Unibus space */
uba_dma_init(sc);
- uba_attach(&sc->uv_sc, (sa->sa_sbinum ? UMEMB8600(ubaddr) :
- UMEMA8600(ubaddr)) + (UBAPAGES * VAX_NBPG));
+ uba_attach(&sc->uv_sc, UMEM(sa,ubaddr) + (UBAPAGES * VAX_NBPG));
}
void
Index: src/sys/arch/vax/vax/autoconf.c
diff -u src/sys/arch/vax/vax/autoconf.c:1.90 src/sys/arch/vax/vax/autoconf.c:1.91
--- src/sys/arch/vax/vax/autoconf.c:1.90 Tue Mar 11 05:34:03 2008
+++ src/sys/arch/vax/vax/autoconf.c Thu Jul 1 19:50:12 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: autoconf.c,v 1.90 2008/03/11 05:34:03 matt Exp $ */
+/* $NetBSD: autoconf.c,v 1.91 2010/07/01 19:50:12 ragge Exp $ */
/*
* Copyright (c) 1994 Ludd, University of Lule}, Sweden.
@@ -31,7 +31,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.90 2008/03/11 05:34:03 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.91 2010/07/01 19:50:12 ragge Exp $");
#include "opt_compat_netbsd.h"
#include "opt_cputype.h"
@@ -120,8 +120,10 @@
mainbus_print(void *aux, const char *name)
{
struct mainbus_attach_args * const ma = aux;
- if (name)
- aprint_normal("%s at %s", ma->ma_type, name);
+ if (name) {
+ aprint_naive("%s at %s\n", ma->ma_type, name);
+ aprint_normal("%s at %s\n", ma->ma_type, name);
+ }
return UNCONF;
}
@@ -137,6 +139,7 @@
struct mainbus_attach_args ma;
const char * const * devp;
+ aprint_naive("\n");
aprint_normal("\n");
for (devp = dep_call->cpu_devs; *devp != NULL; devp++) {
@@ -151,10 +154,6 @@
* Maybe should have this as master instead of mainbus.
*/
- if (dep_call->cpu_subconf != NULL)
- (*dep_call->cpu_subconf)(self, &ma, mainbus_print);
-
-
#if defined(COMPAT_14)
if (rpb.rpb_base == (void *)-1)
printf("\nWARNING: you must update your boot blocks.\n\n");
@@ -189,10 +188,13 @@
if (dep_call->cpu_attach_cpu != NULL)
(*dep_call->cpu_attach_cpu)(self);
- else if (ci->ci_cpustr)
+ else if (ci->ci_cpustr) {
+ aprint_naive(": %s\n", ci->ci_cpustr);
aprint_normal(": %s\n", ci->ci_cpustr);
- else
+ } else {
+ aprint_naive("\n");
aprint_normal("\n");
+ }
}
CFATTACH_DECL_NEW(cpu_mainbus, 0,
Index: src/sys/arch/vax/vax/clock.c
diff -u src/sys/arch/vax/vax/clock.c:1.52 src/sys/arch/vax/vax/clock.c:1.53
--- src/sys/arch/vax/vax/clock.c:1.52 Sat Dec 12 14:44:09 2009
+++ src/sys/arch/vax/vax/clock.c Thu Jul 1 19:50:12 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: clock.c,v 1.52 2009/12/12 14:44:09 tsutsui Exp $ */
+/* $NetBSD: clock.c,v 1.53 2010/07/01 19:50:12 ragge Exp $ */
/*
* Copyright (c) 1995 Ludd, University of Lule}, Sweden.
* All rights reserved.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: clock.c,v 1.52 2009/12/12 14:44:09 tsutsui Exp $");
+__KERNEL_RCSID(0, "$NetBSD: clock.c,v 1.53 2010/07/01 19:50:12 ragge Exp $");
#include <sys/param.h>
#include <sys/kernel.h>
@@ -46,6 +46,11 @@
#include "opt_cputype.h"
+struct evcnt clock_misscnt =
+ EVCNT_INITIALIZER(EVCNT_TYPE_MISC, NULL, "clock", "intr miss");
+
+EVCNT_ATTACH_STATIC(clock_misscnt);
+
struct evcnt clock_intrcnt =
EVCNT_INITIALIZER(EVCNT_TYPE_INTR, NULL, "clock", "intr");
Index: src/sys/arch/vax/vax/cmi.c
diff -u src/sys/arch/vax/vax/cmi.c:1.11 src/sys/arch/vax/vax/cmi.c:1.12
--- src/sys/arch/vax/vax/cmi.c:1.11 Tue Mar 11 05:34:03 2008
+++ src/sys/arch/vax/vax/cmi.c Thu Jul 1 19:50:12 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: cmi.c,v 1.11 2008/03/11 05:34:03 matt Exp $ */
+/* $NetBSD: cmi.c,v 1.12 2010/07/01 19:50:12 ragge Exp $ */
/*
* Copyright (c) 1999 Ludd, University of Lule}, Sweden.
* All rights reserved.
@@ -31,7 +31,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cmi.c,v 1.11 2008/03/11 05:34:03 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cmi.c,v 1.12 2010/07/01 19:50:12 ragge Exp $");
#include <sys/param.h>
#include <sys/device.h>
@@ -77,6 +77,8 @@
{
struct sbi_attach_args sa;
+ sa.sa_base = NEX750;
+
aprint_normal("\n");
/*
* Probe for memory, can be in the first 4 slots.
Index: src/sys/arch/vax/vax/crl.c
diff -u src/sys/arch/vax/vax/crl.c:1.27 src/sys/arch/vax/vax/crl.c:1.28
--- src/sys/arch/vax/vax/crl.c:1.27 Sat Nov 21 04:45:39 2009
+++ src/sys/arch/vax/vax/crl.c Thu Jul 1 19:50:12 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: crl.c,v 1.27 2009/11/21 04:45:39 rmind Exp $ */
+/* $NetBSD: crl.c,v 1.28 2010/07/01 19:50:12 ragge Exp $ */
/*-
* Copyright (c) 1982, 1986 The Regents of the University of California.
* All rights reserved.
@@ -31,12 +31,16 @@
*/
/*
+ * Bugfix by Johnny Billquist 2010
+ */
+
+/*
* TO DO (tef 7/18/85):
* 1) change printf's to log() instead???
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: crl.c,v 1.27 2009/11/21 04:45:39 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: crl.c,v 1.28 2010/07/01 19:50:12 ragge Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -149,7 +153,8 @@
}
s = splconsmedia();
crlstart();
- biowait(bp);
+ while ((bp->b_oflags & BO_DONE) == 0)
+ (void) tsleep(bp, PRIBIO, "crlxfer", 0);
splx(s);
if (bp->b_error != 0) {
error = bp->b_error;
@@ -223,7 +228,7 @@
bp->b_oflags |= BO_DONE;
}
crltab.crl_active = 0;
- wakeup((void *)bp);
+ wakeup(bp);
break;
case CRL_S_XCONT:
Index: src/sys/arch/vax/vax/intvec.S
diff -u src/sys/arch/vax/vax/intvec.S:1.17 src/sys/arch/vax/vax/intvec.S:1.18
--- src/sys/arch/vax/vax/intvec.S:1.17 Thu Mar 5 01:38:12 2009
+++ src/sys/arch/vax/vax/intvec.S Thu Jul 1 19:50:12 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: intvec.S,v 1.17 2009/03/05 01:38:12 msaitoh Exp $ */
+/* $NetBSD: intvec.S,v 1.18 2010/07/01 19:50:12 ragge Exp $ */
/*
* Copyright (c) 1994, 1997 Ludd, University of Lule}, Sweden.
@@ -297,7 +297,6 @@
TRAPCALL(ddbtrap, T_KDBTRAP)
SCBENTRY(hardclock)
- mtpr $0xc1,$PR_ICCS # Reset interrupt flag
#ifdef DDB
tstl 0x80000100 # rpb wait element
beql 1f # set, jmp to debugger
@@ -306,6 +305,12 @@
jbr Xtrap
#endif
1: pushr $0x3f
+ mfpr $PR_ICCS,%r0
+ tstl %r0
+ bgeq 2f
+ incl _C_LABEL(clock_misscnt)+EV_COUNT
+ adwc $0,_C_LABEL(clock_misscnt)+EV_COUNT+4
+2: mtpr $0x800000c1,$PR_ICCS # Reset interrupt flag
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
Index: src/sys/arch/vax/vax/ka860.c
diff -u src/sys/arch/vax/vax/ka860.c:1.32 src/sys/arch/vax/vax/ka860.c:1.33
--- src/sys/arch/vax/vax/ka860.c:1.32 Tue Dec 16 22:35:28 2008
+++ src/sys/arch/vax/vax/ka860.c Thu Jul 1 19:50:12 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: ka860.c,v 1.32 2008/12/16 22:35:28 christos Exp $ */
+/* $NetBSD: ka860.c,v 1.33 2010/07/01 19:50:12 ragge Exp $ */
/*
* Copyright (c) 1986, 1988 Regents of the University of California.
* All rights reserved.
@@ -36,10 +36,12 @@
*
* Todo: Set up all four console lines in a VAX8600.
* This is: local, remote, EMM and logical.
+ *
+ * ABus code added by Johnny Billquist 2010
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ka860.c,v 1.32 2008/12/16 22:35:28 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ka860.c,v 1.33 2010/07/01 19:50:12 ragge Exp $");
#include <sys/param.h>
#include <sys/device.h>
@@ -63,9 +65,11 @@
static void ka86_clrf(void);
static void ka860_conf(void);
static void ka86_attach_cpu(device_t);
-static void ka86_subconf(device_t, void *, cfprint_t);
+static int abus_mainbus_match(device_t, cfdata_t, void *);
+static void abus_mainbus_attach(device_t, device_t, void*);
+static int abus_print(void *, const char *);
-static const char * const ka86_devs[] = { "cpu", NULL };
+static const char * const ka86_devs[] = { "cpu", "abus", NULL };
const struct cpu_dep ka860_calls = {
.cpu_mchk = ka86_mchk,
@@ -79,7 +83,6 @@
.cpu_clrf = ka86_clrf,
.cpu_devs = ka86_devs,
.cpu_attach_cpu = ka86_attach_cpu,
- .cpu_subconf = ka86_subconf,
};
/*
@@ -299,17 +302,32 @@
struct ka86 * const ka86 = (void *)&vax_cpudata;
int fpa;
- aprint_normal("KA86%d, S/N %d, Rev. %c, manufactured in %s.\n",
+ aprint_naive(": KA86%d, S/N %d, Rev. %c, manufactured in %s.\n",
+ ka86->v8650 ? 5 : 0, ka86->snr, ka86->eco+64,
+ manuf[mindex[ka86->plant]]);
+ aprint_normal(": KA86%d, S/N %d, Rev. %c, manufactured in %s.\n",
ka86->v8650 ? 5 : 0, ka86->snr, ka86->eco+64,
manuf[mindex[ka86->plant]]);
fpa = mfpr(PR_ACCS);
if (fpa & 255) {
+ aprint_naive_dev(self,
+ "FPA present: type %d, serial number %d\n",
+ fpa & 255, fpa >> 16);
aprint_normal_dev(self,
- "FPA present: type %d, serial number %d",
+ "FPA present: type %d, serial number %d\n",
fpa & 255, fpa >> 16);
mtpr(0x8000, PR_ACCS);
- } else
- aprint_normal_dev(self, "no FPA");
+ } else {
+ aprint_naive_dev(self, "no FPA\n");
+ aprint_normal_dev(self, "no FPA\n");
+ }
+
+ /*
+ * Init CPU.
+ * Attach crl first.
+ */
+
+ crlattach();
}
/*
@@ -360,21 +378,27 @@
__asm("halt");
}
-void
-ka86_subconf(device_t self, void * aux, cfprint_t cfprint)
+
+CFATTACH_DECL_NEW(abus_mainbus, 0,
+ abus_mainbus_match, abus_mainbus_attach, NULL, NULL);
+
+int abus_mainbus_match(device_t parent, cfdata_t self, void *aux)
+{
+ return (vax_bustype == VAX_ABUS);
+}
+
+void abus_mainbus_attach(device_t parent, device_t self, void *aux)
{
- struct mainbus_attach_args * const ma = aux;
- bus_addr_t tmp;
+ struct mainbus_attach_args * const ma = aux;
+ struct abus_attach_args aa;
+
+ unsigned int tmp;
volatile struct sbia_regs *sbiar;
- int type, i;
- char typebuf[13];
- /*
- * Init CPU.
- * Attach crl first.
- */
+ int type, i;
- crlattach();
+ aprint_naive("\n");
+ aprint_normal("\n");
for (i = 0; i < NIOA8600; i++) {
sbiar = (struct sbia_regs *)vax_map_physmem((paddr_t)IOA8600(i),
@@ -384,27 +408,44 @@
(IOAMAPSIZ / VAX_NBPG));
continue;
}
+
tmp = sbiar->sbi_cfg;
type = tmp & IOA_TYPMSK;
- ma->ma_type = NULL;
- if (type == IOA_SBIA)
- ma->ma_type = "sbi";
-
- if (ma->ma_type == NULL) {
- snprintf(typebuf, sizeof(typebuf), "%#x", type);
- ma->ma_type = typebuf;
- }
+ switch (type) {
- ma->ma_num = i;
- ma->ma_addr = tmp;
- config_found(self, ma, cfprint);
+ case IOA_SBIA:
+
+ aa.aa_base = (bus_addr_t)(SBIA8600(i));
+ aa.aa_num = i;
+ aa.aa_name = "sbi";
+ aa.aa_type = tmp;
+ aa.aa_iot = ma->ma_iot;
+ aa.aa_dmat = ma->ma_dmat;
- if (type == IOA_SBIA) {
sbiar->sbi_errsum = -1;
sbiar->sbi_error = 0x1000;
sbiar->sbi_fltsts = 0xc0000;
+
+ config_found(self, &aa, abus_print);
+ break;
+
+ default:
+ aprint_naive("IOAdapter %#x unsupported\n", type);
+ aprint_normal("IOAdapter %#x unsupported\n", type);
}
+
vax_unmap_physmem((vaddr_t)sbiar, (IOAMAPSIZ / VAX_NBPG));
}
}
+
+int abus_print(void *aux, const char *name)
+{
+ struct abus_attach_args *aa = aux;
+
+ if (name) {
+ aprint_naive("%s%d at %s\n", aa->aa_name, aa->aa_num, name);
+ aprint_normal("%s%d at %s\n", aa->aa_name, aa->aa_num, name);
+ }
+ return UNSUPP;
+}
Index: src/sys/arch/vax/vax/lock_stubs.S
diff -u src/sys/arch/vax/vax/lock_stubs.S:1.15 src/sys/arch/vax/vax/lock_stubs.S:1.16
--- src/sys/arch/vax/vax/lock_stubs.S:1.15 Sun May 25 15:56:12 2008
+++ src/sys/arch/vax/vax/lock_stubs.S Thu Jul 1 19:50:12 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: lock_stubs.S,v 1.15 2008/05/25 15:56:12 chs Exp $ */
+/* $NetBSD: lock_stubs.S,v 1.16 2010/07/01 19:50:12 ragge Exp $ */
/*-
* Copyright (c) 2002, 2006, 2007 The NetBSD Foundation, Inc.
@@ -29,6 +29,12 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
+/*
+ * Bugfix for mutex_spin_enter, which wasn't reentrant.
+ *
+ * Fixed by Johnny Billquist and Chuck Silvers
+ */
+
#include "opt_lockdebug.h"
#include "opt_multiprocessor.h"
#include <machine/asm.h>
@@ -93,10 +99,10 @@
mtpr %r3, $PR_IPL /* yes, raise IPL */
1: mfpr $PR_SSP, %r4 /* get curlwp */
movl L_CPU(%r4),%r4 /* get cpu_info */
- tstl CI_MTX_COUNT(%r4) /* any spin mutexes active? */
- bneq 3f /* yep, don't save IPL */
+ decl CI_MTX_COUNT(%r4) /* decr muntex count */
+ bcc 3f /* previous active - don't save IPL */
movl %r2, CI_MTX_OLDSPL(%r4) /* nope, save old IPL */
-3: decl CI_MTX_COUNT(%r4) /* decr mutex count */
+3:
#if defined(DIAGNOSTIC) || defined(MULTIPROCESSOR)
bbssi $0, MTX_LOCK(%r0), 4f /* take out mutex */
ret
Index: src/sys/arch/vax/vax/pmap.c
diff -u src/sys/arch/vax/vax/pmap.c:1.175 src/sys/arch/vax/vax/pmap.c:1.176
--- src/sys/arch/vax/vax/pmap.c:1.175 Fri Nov 27 03:23:14 2009
+++ src/sys/arch/vax/vax/pmap.c Thu Jul 1 19:50:12 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: pmap.c,v 1.175 2009/11/27 03:23:14 rmind Exp $ */
+/* $NetBSD: pmap.c,v 1.176 2010/07/01 19:50:12 ragge Exp $ */
/*
* Copyright (c) 1994, 1998, 1999, 2003 Ludd, University of Lule}, Sweden.
* All rights reserved.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.175 2009/11/27 03:23:14 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.176 2010/07/01 19:50:12 ragge Exp $");
#include "opt_ddb.h"
#include "opt_cputype.h"
@@ -326,7 +326,7 @@
scratch = istack + USPACE;
/* Physical-to-virtual translation table */
- pv_table = (struct pv_entry *)(scratch + 3 * VAX_NBPG);
+ pv_table = (struct pv_entry *)(scratch + SCRATCHPAGES * VAX_NBPG);
avail_start = (vaddr_t)pv_table + (round_page(avail_end >> PGSHIFT)) *
sizeof(struct pv_entry) - KERNBASE;
Index: src/sys/arch/vax/vax/sbi.c
diff -u src/sys/arch/vax/vax/sbi.c:1.34 src/sys/arch/vax/vax/sbi.c:1.35
--- src/sys/arch/vax/vax/sbi.c:1.34 Wed Nov 19 22:54:16 2008
+++ src/sys/arch/vax/vax/sbi.c Thu Jul 1 19:50:12 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: sbi.c,v 1.34 2008/11/19 22:54:16 hans Exp $ */
+/* $NetBSD: sbi.c,v 1.35 2010/07/01 19:50:12 ragge Exp $ */
/*
* Copyright (c) 1994 Ludd, University of Lule}, Sweden.
* All rights reserved.
@@ -30,11 +30,15 @@
*/
/*
+ * ABus code added by Johnny Billquist 2010
+ */
+
+/*
* Still to do: Write all SBI error handling.
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sbi.c,v 1.34 2008/11/19 22:54:16 hans Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sbi.c,v 1.35 2010/07/01 19:50:12 ragge Exp $");
#include <sys/types.h>
#include <sys/param.h>
@@ -46,10 +50,17 @@
#include <machine/cpu.h>
#include <machine/nexus.h>
#include <machine/mainbus.h>
+#include <machine/ioa.h>
static int sbi_print(void *, const char *);
+#if VAX780 || VAXANY
static int sbi_mainbus_match(device_t, cfdata_t, void *);
static void sbi_mainbus_attach(device_t, device_t, void*);
+#endif
+#if VAX8600 || VAXANY
+static int sbi_abus_match(device_t, cfdata_t, void *);
+static void sbi_abus_attach(device_t, device_t, void*);
+#endif
int
sbi_print(void *aux, const char *name)
@@ -60,22 +71,28 @@
if (name) {
switch (sa->sa_type) {
case NEX_MBA:
+ aprint_naive("mba at %s", name);
aprint_normal("mba at %s", name);
break;
case NEX_CI:
+ aprint_naive("ci at %s", name);
aprint_normal("ci at %s", name);
unsupp++;
break;
default:
+ aprint_naive("unknown device 0x%x at %s",
+ sa->sa_type, name);
aprint_normal("unknown device 0x%x at %s",
sa->sa_type, name);
unsupp = true;
}
}
+ aprint_naive(" tr%d", sa->sa_nexnum);
aprint_normal(" tr%d", sa->sa_nexnum);
return (unsupp ? UNSUPP : UNCONF);
}
+#if VAX780 || VAXANY
int
sbi_mainbus_match(device_t parent, cfdata_t cf, void *aux)
{
@@ -89,33 +106,74 @@
{
struct mainbus_attach_args * const ma = aux;
struct sbi_attach_args sa;
- u_int nexnum, minnex = 0; /* default only one SBI, as on 780 */
- paddr_t nexbase;
+ u_int nexnum;
+ aprint_naive("\n");
aprint_normal("\n");
sa.sa_iot = ma->ma_iot;
sa.sa_dmat = ma->ma_dmat;
#define NEXPAGES (sizeof(struct nexus) / VAX_NBPG)
-#if VAX780 || VAXANY
- if (vax_boardtype == VAX_BTYP_780) {
- nexbase = (paddr_t) NEX780;
- sa.sa_sbinum = 0;
+ sa.sa_sbinum = 0;
+
+ for (nexnum = 0; nexnum < NNEXSBI; nexnum++) {
+ struct nexus *nexusP = 0;
+ volatile int tmp;
+
+ nexusP = (struct nexus *)vax_map_physmem((paddr_t)(NEX780) +
+ sizeof(struct nexus) * nexnum, NEXPAGES);
+ if (badaddr((void *)nexusP, 4)) {
+ vax_unmap_physmem((vaddr_t)nexusP, NEXPAGES);
+ } else {
+ tmp = nexusP->nexcsr.nex_csr; /* no byte reads */
+ sa.sa_type = tmp & 255;
+
+ sa.sa_nexnum = nexnum;
+ sa.sa_ioh = (vaddr_t)nexusP;
+ sa.sa_base = (bus_addr_t)NEX780;
+ config_found(self, (void*)&sa, sbi_print);
+ }
}
+}
+
+CFATTACH_DECL_NEW(sbi_mainbus, 0,
+ sbi_mainbus_match, sbi_mainbus_attach, NULL, NULL);
+
#endif
+
#if VAX8600 || VAXANY
- if (vax_boardtype == VAX_BTYP_790) {
- nexbase = (paddr_t) NEXA8600;
- minnex = ma->ma_num * NNEXSBI;
- sa.sa_sbinum = ma->ma_num;
- }
-#endif
+int
+sbi_abus_match(device_t parent, cfdata_t cf, void *aux)
+{
+ struct abus_attach_args * const aa = aux;
+
+ return ((aa->aa_type & IOA_TYPMSK) == IOA_SBIA);
+}
+
+void
+sbi_abus_attach(device_t parent, device_t self, void *aux)
+{
+ struct abus_attach_args * const aa = aux;
+ struct sbi_attach_args sa;
+ u_int nexnum, minnex;
+
+ aprint_naive(": SBIA Rev. %d, base address %#x\n", aa->aa_type & 0xf, (unsigned int)aa->aa_base);
+ aprint_normal(": SBIA Rev. %d, base address %#x\n", aa->aa_type & 0xf, (unsigned int)aa->aa_base);
+
+ sa.sa_iot = aa->aa_iot;
+ sa.sa_dmat = aa->aa_dmat;
+ sa.sa_base = aa->aa_base;
+
+#define NEXPAGES (sizeof(struct nexus) / VAX_NBPG)
+ minnex = aa->aa_num * NNEXSBI;
+ sa.sa_sbinum = aa->aa_num;
+
for (nexnum = minnex; nexnum < minnex + NNEXSBI; nexnum++) {
struct nexus *nexusP = 0;
volatile int tmp;
- nexusP = (struct nexus *)vax_map_physmem(nexbase +
+ nexusP = (struct nexus *)vax_map_physmem(sa.sa_base +
sizeof(struct nexus) * nexnum, NEXPAGES);
if (badaddr((void *)nexusP, 4)) {
vax_unmap_physmem((vaddr_t)nexusP, NEXPAGES);
@@ -130,5 +188,8 @@
}
}
-CFATTACH_DECL_NEW(sbi_mainbus, 0,
- sbi_mainbus_match, sbi_mainbus_attach, NULL, NULL);
+
+CFATTACH_DECL_NEW(sbi_abus, 0,
+ sbi_abus_match, sbi_abus_attach, NULL, NULL);
+
+#endif
Index: src/sys/arch/vax/vax/ubi.c
diff -u src/sys/arch/vax/vax/ubi.c:1.1 src/sys/arch/vax/vax/ubi.c:1.2
--- src/sys/arch/vax/vax/ubi.c:1.1 Thu Jan 22 18:49:03 2009
+++ src/sys/arch/vax/vax/ubi.c Thu Jul 1 19:50:12 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: ubi.c,v 1.1 2009/01/22 18:49:03 christos Exp $ */
+/* $NetBSD: ubi.c,v 1.2 2010/07/01 19:50:12 ragge Exp $ */
/*
* Copyright (c) 1999 Ludd, University of Lule}, Sweden.
* All rights reserved.
@@ -31,7 +31,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ubi.c,v 1.1 2009/01/22 18:49:03 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ubi.c,v 1.2 2010/07/01 19:50:12 ragge Exp $");
#include <sys/param.h>
#include <sys/device.h>
@@ -78,6 +78,8 @@
printf("\n");
+ sa.sa_base = NEX730;
+
#define NEXPAGES (sizeof(struct nexus) / VAX_NBPG)
#if 0