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