Module Name:    src
Committed By:   thorpej
Date:           Wed Mar  6 13:37:35 UTC 2024

Modified Files:
        src/sys/arch/alpha/conf: GENERIC INSTALL files.alpha
        src/sys/arch/alpha/tlsb: tlsb.c tlsbvar.h

Log Message:
Tidy up TLSB autoconfiguration just a bit.


To generate a diff of this commit:
cvs rdiff -u -r1.420 -r1.421 src/sys/arch/alpha/conf/GENERIC
cvs rdiff -u -r1.119 -r1.120 src/sys/arch/alpha/conf/INSTALL
cvs rdiff -u -r1.197 -r1.198 src/sys/arch/alpha/conf/files.alpha
cvs rdiff -u -r1.41 -r1.42 src/sys/arch/alpha/tlsb/tlsb.c
cvs rdiff -u -r1.7 -r1.8 src/sys/arch/alpha/tlsb/tlsbvar.h

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/alpha/conf/GENERIC
diff -u src/sys/arch/alpha/conf/GENERIC:1.420 src/sys/arch/alpha/conf/GENERIC:1.421
--- src/sys/arch/alpha/conf/GENERIC:1.420	Sat Mar  2 20:15:33 2024
+++ src/sys/arch/alpha/conf/GENERIC	Wed Mar  6 13:37:35 2024
@@ -1,4 +1,4 @@
-# $NetBSD: GENERIC,v 1.420 2024/03/02 20:15:33 thorpej Exp $
+# $NetBSD: GENERIC,v 1.421 2024/03/06 13:37:35 thorpej Exp $
 #
 # This machine description file is used to generate the default NetBSD
 # kernel.
@@ -19,7 +19,7 @@ include 	"arch/alpha/conf/std.alpha"
 
 options 	INCLUDE_CONFIG_FILE	# embed config file in kernel binary
 
-ident		"GENERIC-$Revision: 1.420 $"
+ident		"GENERIC-$Revision: 1.421 $"
 
 maxusers 32
 
@@ -191,9 +191,9 @@ qemu*	at	mainbus?
 
 # TurboLaser bus support and devices
 tlsb*	at	mainbus?
-gbus*	at	tlsb? node ? offset ?
-tlsbmem* at	tlsb? node ? offset ?
-kft*	at	tlsb? node ? offset ?
+gbus*	at	tlsb? node ?
+tlsbmem* at	tlsb? node ?
+kft*	at	tlsb? node ?
 
 # Gbus Devices
 mcclock* at	gbus? offset ?

Index: src/sys/arch/alpha/conf/INSTALL
diff -u src/sys/arch/alpha/conf/INSTALL:1.119 src/sys/arch/alpha/conf/INSTALL:1.120
--- src/sys/arch/alpha/conf/INSTALL:1.119	Sat Mar  2 20:15:33 2024
+++ src/sys/arch/alpha/conf/INSTALL	Wed Mar  6 13:37:35 2024
@@ -1,4 +1,4 @@
-# $NetBSD: INSTALL,v 1.119 2024/03/02 20:15:33 thorpej Exp $
+# $NetBSD: INSTALL,v 1.120 2024/03/06 13:37:35 thorpej Exp $
 #
 # Alpha INSTALL kernel.
 
@@ -92,9 +92,9 @@ qemu*	at	mainbus?
 
 # TurboLaser bus support and devices
 tlsb*	at	mainbus?
-gbus*	at	tlsb? node ? offset ?
-tlsbmem* at	tlsb? node ? offset ?
-kft*	at	tlsb? node ? offset ?
+gbus*	at	tlsb? node ?
+tlsbmem* at	tlsb? node ?
+kft*	at	tlsb? node ?
 
 # Gbus Devices
 mcclock* at	gbus? offset ?

Index: src/sys/arch/alpha/conf/files.alpha
diff -u src/sys/arch/alpha/conf/files.alpha:1.197 src/sys/arch/alpha/conf/files.alpha:1.198
--- src/sys/arch/alpha/conf/files.alpha:1.197	Wed Mar  6 05:33:09 2024
+++ src/sys/arch/alpha/conf/files.alpha	Wed Mar  6 13:37:35 2024
@@ -1,4 +1,4 @@
-# $NetBSD: files.alpha,v 1.197 2024/03/06 05:33:09 thorpej Exp $
+# $NetBSD: files.alpha,v 1.198 2024/03/06 13:37:35 thorpej Exp $
 #
 # alpha-specific configuration info
 
@@ -85,7 +85,7 @@ file	dev/md_root.c			memory_disk_hooks
 # TurboLaser Bus Support
 #
 
-device	tlsb { node = -1, offset = -1 }
+device	tlsb { node = -1 }
 attach	tlsb at mainbus
 file	arch/alpha/tlsb/tlsb.c		tlsb & dec_kn8ae
 

Index: src/sys/arch/alpha/tlsb/tlsb.c
diff -u src/sys/arch/alpha/tlsb/tlsb.c:1.41 src/sys/arch/alpha/tlsb/tlsb.c:1.42
--- src/sys/arch/alpha/tlsb/tlsb.c:1.41	Sat Aug  7 16:18:41 2021
+++ src/sys/arch/alpha/tlsb/tlsb.c	Wed Mar  6 13:37:35 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: tlsb.c,v 1.41 2021/08/07 16:18:41 thorpej Exp $ */
+/* $NetBSD: tlsb.c,v 1.42 2024/03/06 13:37:35 thorpej Exp $ */
 /*
  * Copyright (c) 1997 by Matthew Jacob
  * NASA AMES Research Center.
@@ -39,7 +39,7 @@
 
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
 
-__KERNEL_RCSID(0, "$NetBSD: tlsb.c,v 1.41 2021/08/07 16:18:41 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tlsb.c,v 1.42 2024/03/06 13:37:35 thorpej Exp $");
 
 #include "opt_multiprocessor.h"
 
@@ -70,7 +70,7 @@ CFATTACH_DECL_NEW(tlsb, 0,
 extern struct cfdriver tlsb_cd;
 
 static int	tlsbprint(void *, const char *);
-static const char *tlsb_node_type_str(uint32_t);
+static const char *tlsb_node_type_str(uint32_t, char *, size_t);
 
 /*
  * There can be only one TurboLaser, and we'll overload it
@@ -87,13 +87,15 @@ static int
 tlsbprint(void *aux, const char *pnp)
 {
 	struct tlsb_dev_attach_args *tap = aux;
+	char buf[64];
 
 	if (pnp)
 		aprint_normal("%s at %s node %d",
-		    tlsb_node_type_str(tap->ta_dtype), pnp, tap->ta_node);
+		    tlsb_node_type_str(tap->ta_dtype, buf, sizeof(buf)),
+		    pnp, tap->ta_node);
 	else
 		aprint_normal(" node %d: %s", tap->ta_node,
-		    tlsb_node_type_str(tap->ta_dtype));
+		    tlsb_node_type_str(tap->ta_dtype, buf, sizeof(buf)));
 
 	return (UNCONF);
 }
@@ -124,7 +126,9 @@ tlsbattach(device_t parent, device_t sel
 	struct tlsb_dev_attach_args ta;
 	uint32_t tldev;
 	int node;
+	int ionodes = 0;
 	int locs[TLSBCF_NLOCS];
+	char buf[64];
 
 	printf("\n");
 
@@ -158,9 +162,11 @@ tlsbattach(device_t parent, device_t sel
 		 * We do this so that we don't have to do something
 		 * silly at fault time like try a 'baddadr'...
 		 */
-		tlsb_found |= (1 << node);
-		if (TLDEV_ISIOPORT(tldev))
+		tlsb_found |= __BIT(node);
+		if (TLDEV_ISIOPORT(tldev)) {
+			ionodes |= __BIT(node);
 			continue;	/* not interested right now */
+		}
 		ta.ta_node = node;
 		ta.ta_dtype = TLDEV_DTYPE(tldev);
 		ta.ta_swrev = TLDEV_SWREV(tldev);
@@ -171,73 +177,71 @@ tlsbattach(device_t parent, device_t sel
 		 */
 		if (TLDEV_ISCPU(tldev)) {
 			aprint_normal("%s node %d: %s\n", device_xname(self),
-			    node, tlsb_node_type_str(tldev));
+			    node,
+			    tlsb_node_type_str(tldev, buf, sizeof(buf)));
 		}
 		/*
 		 * Attach any children nodes, including a CPU's GBus
 		 */
 		locs[TLSBCF_NODE] = node;
-		locs[TLSBCF_OFFSET] = 0; /* XXX unused? */
 
 		config_found(self, &ta, tlsbprint,
 		    CFARGS(.submatch = config_stdsubmatch,
 			   .locators = locs));
 	}
 	/*
-	 * *Now* search for I/O nodes (in descending order)
+	 * *Now* attach I/O nodes (in descending order).  We don't
+	 * need to bother using badaddr() here; we have a cheat sheet
+	 * from above.
 	 */
-	while (--node > 0) {
-		if (badaddr(TLSB_NODE_REG_ADDR(node, TLDEV), sizeof(uint32_t)))
+	while (--node >= 0) {
+		if ((ionodes & __BIT(node)) == 0) {
 			continue;
+		}
 		tldev = TLSB_GET_NODEREG(node, TLDEV);
 		if (tldev == 0) {
 			continue;
 		}
-		if (TLDEV_ISIOPORT(tldev)) {
 #if defined(MULTIPROCESSOR)
-			/*
-			 * XXX Eventually, we want to select a secondary
-			 * XXX processor on which to field interrupts for
-			 * XXX this node.  However, we just send them to
-			 * XXX the primary CPU for now.
-			 *
-			 * XXX Maybe multiple CPUs?  Does the hardware
-			 * XXX round-robin, or check the length of the
-			 * XXX per-CPU interrupt queue?
-			 */
-			printf("%s node %d: routing interrupts to %s\n",
-			  device_xname(self), node,
-			  device_xname(cpu_info[hwrpb->rpb_primary_cpu_id]->ci_softc->sc_dev));
-			TLSB_PUT_NODEREG(node, TLCPUMASK,
-			    (1UL << hwrpb->rpb_primary_cpu_id));
+		/*
+		 * XXX Eventually, we want to select a secondary
+		 * XXX processor on which to field interrupts for
+		 * XXX this node.  However, we just send them to
+		 * XXX the primary CPU for now.
+		 *
+		 * XXX Maybe multiple CPUs?  Does the hardware
+		 * XXX round-robin, or check the length of the
+		 * XXX per-CPU interrupt queue?
+		 */
+		printf("%s node %d: routing interrupts to %s\n",
+		  device_xname(self), node,
+		  device_xname(cpu_info[hwrpb->rpb_primary_cpu_id]->ci_softc->sc_dev));
+		TLSB_PUT_NODEREG(node, TLCPUMASK,
+		    (1UL << hwrpb->rpb_primary_cpu_id));
 #else
-			/*
-			 * Make sure interrupts are sent to the primary CPU.
-			 */
-			TLSB_PUT_NODEREG(node, TLCPUMASK,
-			    (1UL << hwrpb->rpb_primary_cpu_id));
+		/*
+		 * Make sure interrupts are sent to the primary CPU.
+		 */
+		TLSB_PUT_NODEREG(node, TLCPUMASK,
+		    (1UL << hwrpb->rpb_primary_cpu_id));
 #endif /* MULTIPROCESSOR */
 
-			ta.ta_node = node;
-			ta.ta_dtype = TLDEV_DTYPE(tldev);
-			ta.ta_swrev = TLDEV_SWREV(tldev);
-			ta.ta_hwrev = TLDEV_HWREV(tldev);
-
-			locs[TLSBCF_NODE] = node;
-			locs[TLSBCF_OFFSET] = 0; /* XXX unused? */
-
-			config_found(self, &ta, tlsbprint,
-			    CFARGS(.submatch = config_stdsubmatch,
-				   .locators = locs));
-		}
+		ta.ta_node = node;
+		ta.ta_dtype = TLDEV_DTYPE(tldev);
+		ta.ta_swrev = TLDEV_SWREV(tldev);
+		ta.ta_hwrev = TLDEV_HWREV(tldev);
+
+		locs[TLSBCF_NODE] = node;
+
+		config_found(self, &ta, tlsbprint,
+		    CFARGS(.submatch = config_stdsubmatch,
+			   .locators = locs));
 	}
 }
 
 static const char *
-tlsb_node_type_str(uint32_t dtype)
+tlsb_node_type_str(uint32_t dtype, char *buf, size_t buflen)
 {
-	static char	tlsb_line[64];
-
 	switch (dtype & TLDEV_DTYPE_MASK) {
 	case TLDEV_DTYPE_KFTHA:
 		return ("KFTHA I/O interface");
@@ -261,9 +265,8 @@ tlsb_node_type_str(uint32_t dtype)
 		return ("Dual CPU, 16MB cache");
 
 	default:
-		snprintf(tlsb_line, sizeof(tlsb_line), "unknown, dtype 0x%x",
-		    dtype);
-		return (tlsb_line);
+		snprintf(buf, buflen, "unknown, dtype 0x%04x", dtype);
+		return (buf);
 	}
 	/* NOTREACHED */
 }

Index: src/sys/arch/alpha/tlsb/tlsbvar.h
diff -u src/sys/arch/alpha/tlsb/tlsbvar.h:1.7 src/sys/arch/alpha/tlsb/tlsbvar.h:1.8
--- src/sys/arch/alpha/tlsb/tlsbvar.h:1.7	Mon Feb  6 02:14:16 2012
+++ src/sys/arch/alpha/tlsb/tlsbvar.h	Wed Mar  6 13:37:35 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: tlsbvar.h,v 1.7 2012/02/06 02:14:16 matt Exp $ */
+/* $NetBSD: tlsbvar.h,v 1.8 2024/03/06 13:37:35 thorpej Exp $ */
 
 /*
  * Copyright (c) 1997 by Matthew Jacob
@@ -48,16 +48,6 @@ struct tlsb_dev_attach_args {
 	uint8_t		ta_hwrev;	/* hardware revision */
 };
 
-/*
- * Bus-dependent structure for CPUs. This is dynamically allocated
- * for each CPU on the TurboLaser, and glued into the cpu_softc
- * as sc_busdep (when there is a cpu_softc to do this to).
- */
-struct tlsb_cpu_busdep {
-	uint8_t		tcpu_vid;	/* virtual ID of CPU */
-	int		tcpu_node;	/* TurboLaser node */
-};
-
 #ifdef	_KERNEL
 extern int tlsb_found;
 #endif

Reply via email to