PERFORCE change 119565 for review

Bruce M Simpson bms at FreeBSD.org
Wed May 9 16:21:07 UTC 2007


http://perforce.freebsd.org/chv.cgi?CH=119565

Change 119565 by bms at bms_anglepoise on 2007/05/09 16:20:00

	Begin attaching child drivers.
	Add child drivers. They don't do anything yet - a resource manager
	will be needed for the siba configuration space.

Affected files ...

.. //depot/projects/mips2/src/sys/mips/mips32/sentry5/files.sentry5#6 edit
.. //depot/projects/mips2/src/sys/mips/mips32/sentry5/siba.c#4 edit
.. //depot/projects/mips2/src/sys/mips/mips32/sentry5/siba_cc.c#2 edit
.. //depot/projects/mips2/src/sys/mips/mips32/sentry5/siba_mips.c#1 add
.. //depot/projects/mips2/src/sys/mips/mips32/sentry5/siba_pcib.c#1 add
.. //depot/projects/mips2/src/sys/mips/mips32/sentry5/siba_sdram.c#1 add

Differences ...

==== //depot/projects/mips2/src/sys/mips/mips32/sentry5/files.sentry5#6 (text+ko) ====

@@ -1,5 +1,14 @@
 # $FreeBSD$
 
 #mips/mips32/sentry5/s5_machdep.c		standard
+
+# TODO: Add attachment elsehwere in the tree
+# for USB 1.1 OHCI, Ethernet and IPSEC cores
+# which are believed to be devices we have drivers for
+# which just need to be tweaked for attachment to an SSB system bus.
+# TODO: Add pci host bridge support.
 mips/mips32/sentry5/siba.c			optional siba
 mips/mips32/sentry5/siba_cc.c			optional siba
+mips/mips32/sentry5/siba_mips.c			optional siba
+mips/mips32/sentry5/siba_sdram.c		optional siba
+mips/mips32/sentry5/siba_pcib.c			optional siba

==== //depot/projects/mips2/src/sys/mips/mips32/sentry5/siba.c#4 (text+ko) ====

@@ -98,8 +98,10 @@
 static struct siba_devid *
 		siba_dev_match(uint16_t, uint16_t, uint8_t);
 static uint8_t	siba_getncores(uint16_t);
+static int	siba_print_all_resources(device_t dev);
 static int	siba_print_child(device_t, device_t);
 static int	siba_probe(device_t);
+static void	siba_probe_nomatch(device_t, device_t);
 int		siba_read_ivar(device_t, device_t, int, uintptr_t *);
 static struct siba_devinfo *
 		siba_setup_devinfo(device_t, uint8_t);
@@ -298,6 +300,9 @@
 		sdi->sdi_irq = 0;	/* XXX notyet */
 
 		sd = siba_dev_match(vendorid, ccid, rev);
+		(void)sd;
+#if 0
+		/* we do this the newbus way now */
 		if (sd != NULL) {
 			device_printf(dev, "core %d: %s rev %02x\n",
 			    idx, sd->sd_desc, rev);
@@ -306,6 +311,7 @@
 			    "core %d: vid %04x pid %04x rev %02x\n",
 			    idx, vendorid, ccid, rev);
 		}
+#endif
 
 		/*
 		 * Try to attach the child.
@@ -316,13 +322,12 @@
 		device_t child;
 		child = device_add_child(dev, NULL, -1);
 		if (child == NULL) {
+			/* XXX should panic */
 			device_printf(dev, "could not add child\n");
 			siba_destroy_devinfo(sdi);
 		} else {
-			device_printf(dev, "child is %p\n", child);
+			/* Set memory window for immediate child. */
 			device_set_ivars(child, sdi);
-
-			/* Set memory window for immediate child. */
 			bus_addr_t baseaddr;
 			baseaddr = sc->sc_maddr + (idx * SIBA_CORE_LEN);
 			bus_set_resource(child, SYS_RES_MEMORY, MIPS_MEM_RID,
@@ -373,6 +378,9 @@
 	int retval = 0;
 
 	retval += bus_print_child_header(bus, child);
+	retval += siba_print_all_resources(child);
+	if (device_get_flags(child))
+		retval += printf(" flags %#x", device_get_flags(child));
 	retval += printf(" on %s\n", device_get_nameunit(bus));
 
 	return (retval);
@@ -474,6 +482,38 @@
 	return (EINVAL);
 }
 
+static void
+siba_probe_nomatch(device_t dev, device_t child)
+{
+	struct siba_devid *sd;
+
+	sd = siba_dev_match(siba_get_vendor(child), siba_get_device(child),
+	    SIBA_REV_ANY);
+	device_printf(dev, "<0x%04x, 0x%04x \"%s\"> not attached\n",
+	    siba_get_vendor(child), siba_get_device(child),
+	    sd != NULL ? sd->sd_desc : "unknown");
+}
+
+static int
+siba_print_all_resources(device_t dev)
+{
+#if 0
+	struct siba_device *ndev = DEVTONX(dev);
+	struct resource_list *rl = &ndev->nx_resources;
+	int retval = 0;
+
+	if (STAILQ_FIRST(rl))
+		retval += printf(" at");
+
+	retval += resource_list_print_type(rl, "mem", SYS_RES_MEMORY, "%#lx");
+	retval += resource_list_print_type(rl, "irq", SYS_RES_IRQ, "%ld");
+
+	return (retval);
+#else
+	return (0);
+#endif
+}
+
 static device_method_t siba_methods[] = {
 	/* Device interface */
 	DEVMETHOD(device_attach,	siba_attach),
@@ -488,6 +528,7 @@
 	DEVMETHOD(bus_add_child,	siba_add_child),
 	DEVMETHOD(bus_alloc_resource,	siba_alloc_resource),
 	DEVMETHOD(bus_print_child,	siba_print_child),
+	DEVMETHOD(bus_probe_nomatch,	siba_probe_nomatch),
 	DEVMETHOD(bus_read_ivar,	siba_read_ivar),
 	DEVMETHOD(bus_setup_intr,	bus_generic_setup_intr),
 	DEVMETHOD(bus_teardown_intr,	bus_generic_teardown_intr),

==== //depot/projects/mips2/src/sys/mips/mips32/sentry5/siba_cc.c#2 (text+ko) ====

@@ -52,25 +52,44 @@
 siba_cc_probe(device_t dev)
 {
 
-	printf("%s: entry\n", __func__);
-
 	if (siba_get_vendor(dev) == SIBA_VID_BROADCOM &&
 	    siba_get_device(dev) == SIBA_DEVID_CHIPCOMMON) {
-		device_set_desc(dev, "ChipCommon core");
 		return (BUS_PROBE_DEFAULT);
 	}
 
 	return (ENXIO);
 }
 
+struct siba_cc_softc {
+	void *notused;
+};
+
 static int
 siba_cc_attach(device_t dev)
 {
+	//struct siba_cc_softc *sc = device_get_softc(dev);
+	struct resource *mem;
+	int rid;
 
-	/* TODO: get softc and resources */
-	printf("%s: entry\n", __func__);
+	/*
+	 * Allocate the resources which the parent bus has already
+	 * determined for us.
+	 * TODO: interrupt routing
+	 */
+#define MIPS_MEM_RID 0x20
+	rid = MIPS_MEM_RID;
+	mem = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid,
+	    RF_ACTIVE);
+	if (mem == NULL) {
+		device_printf(dev, "unable to allocate memory\n");
+		return (ENXIO);
+	}
+	device_printf(dev, "start %08lx size %04lx\n",
+	    rman_get_start(mem), rman_get_size(mem));
+
+	device_set_desc(dev, "ChipCommon core");
 
-	return (ENXIO);
+	return (0);
 }
 
 static device_method_t siba_cc_methods[] = {


More information about the p4-projects mailing list