aboutsummaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorMarius Strobl <marius@FreeBSD.org>2009-12-22 21:02:46 +0000
committerMarius Strobl <marius@FreeBSD.org>2009-12-22 21:02:46 +0000
commit1bba41a506f50fb28d77237ce31e23482f496d3e (patch)
tree725ef54a565db62bee14db1a99d5113ab1bfc6d5 /sys
parent8d9f6dd948bcc87733d0a6f984804aabb4ac29d9 (diff)
downloadsrc-1bba41a506f50fb28d77237ce31e23482f496d3e.tar.gz
src-1bba41a506f50fb28d77237ce31e23482f496d3e.zip
Enroll these drivers in multipass probing. The motivation behind this
is that the JBus to EBus bridges share the interrupt controller of a sibling JBus to PCIe bridge (at least as far as the OFW device tree is concerned, in reality they are part of the same chip) so we have to probe and attach the latter first. That happens to be also the case due to the fact that the JBus to PCIe bridges appear first in the OFW device tree but it doesn't hurt to ensure the right order.
Notes
Notes: svn path=/head/; revision=200874
Diffstat (limited to 'sys')
-rw-r--r--sys/dev/auxio/auxio.c7
-rw-r--r--sys/sparc64/central/central.c3
-rw-r--r--sys/sparc64/ebus/ebus.c3
-rw-r--r--sys/sparc64/fhc/fhc.c6
-rw-r--r--sys/sparc64/pci/apb.c2
-rw-r--r--sys/sparc64/pci/ofw_pcib.c3
-rw-r--r--sys/sparc64/pci/ofw_pcibus.c3
-rw-r--r--sys/sparc64/sbus/dma_sbus.c8
-rw-r--r--sys/sparc64/sbus/sbus.c3
-rw-r--r--sys/sparc64/sparc64/nexus.c3
-rw-r--r--sys/sparc64/sparc64/upa.c2
11 files changed, 30 insertions, 13 deletions
diff --git a/sys/dev/auxio/auxio.c b/sys/dev/auxio/auxio.c
index 6e2d356ea7a2..35fd307a97a4 100644
--- a/sys/dev/auxio/auxio.c
+++ b/sys/dev/auxio/auxio.c
@@ -141,7 +141,9 @@ static driver_t auxio_sbus_driver = {
};
static devclass_t auxio_devclass;
-DRIVER_MODULE(auxio, sbus, auxio_sbus_driver, auxio_devclass, 0, 0);
+/* The probe order is handled by sbus(4). */
+EARLY_DRIVER_MODULE(auxio, sbus, auxio_sbus_driver, auxio_devclass, 0, 0,
+ BUS_PASS_DEFAULT);
MODULE_DEPEND(auxio, sbus, 1, 1, 1);
/* EBus */
@@ -158,7 +160,8 @@ static driver_t auxio_ebus_driver = {
sizeof(struct auxio_softc)
};
-DRIVER_MODULE(auxio, ebus, auxio_ebus_driver, auxio_devclass, 0, 0);
+EARLY_DRIVER_MODULE(auxio, ebus, auxio_ebus_driver, auxio_devclass, 0, 0,
+ BUS_PASS_DEFAULT);
MODULE_DEPEND(auxio, ebus, 1, 1, 1);
MODULE_VERSION(auxio, 1);
diff --git a/sys/sparc64/central/central.c b/sys/sparc64/central/central.c
index 012130f150aa..777660fdfebb 100644
--- a/sys/sparc64/central/central.c
+++ b/sys/sparc64/central/central.c
@@ -105,7 +105,8 @@ static driver_t central_driver = {
static devclass_t central_devclass;
-DRIVER_MODULE(central, nexus, central_driver, central_devclass, 0, 0);
+EARLY_DRIVER_MODULE(central, nexus, central_driver, central_devclass, 0, 0,
+ BUS_PASS_BUS);
MODULE_DEPEND(fhc, nexus, 1, 1, 1);
MODULE_VERSION(central, 1);
diff --git a/sys/sparc64/ebus/ebus.c b/sys/sparc64/ebus/ebus.c
index 3bafaae33233..a3e6d5827806 100644
--- a/sys/sparc64/ebus/ebus.c
+++ b/sys/sparc64/ebus/ebus.c
@@ -138,7 +138,8 @@ static driver_t ebus_driver = {
static devclass_t ebus_devclass;
-DRIVER_MODULE(ebus, pci, ebus_driver, ebus_devclass, 0, 0);
+EARLY_DRIVER_MODULE(ebus, pci, ebus_driver, ebus_devclass, 0, 0,
+ BUS_PASS_BUS);
MODULE_DEPEND(ebus, pci, 1, 1, 1);
MODULE_VERSION(ebus, 1);
diff --git a/sys/sparc64/fhc/fhc.c b/sys/sparc64/fhc/fhc.c
index 6ef7b1b519fe..6aefffa1a6f9 100644
--- a/sys/sparc64/fhc/fhc.c
+++ b/sys/sparc64/fhc/fhc.c
@@ -119,9 +119,11 @@ static driver_t fhc_driver = {
static devclass_t fhc_devclass;
-DRIVER_MODULE(fhc, central, fhc_driver, fhc_devclass, 0, 0);
+EARLY_DRIVER_MODULE(fhc, central, fhc_driver, fhc_devclass, 0, 0,
+ BUS_PASS_BUS);
MODULE_DEPEND(fhc, central, 1, 1, 1);
-DRIVER_MODULE(fhc, nexus, fhc_driver, fhc_devclass, 0, 0);
+EARLY_DRIVER_MODULE(fhc, nexus, fhc_driver, fhc_devclass, 0, 0,
+ BUS_PASS_BUS);
MODULE_DEPEND(fhc, nexus, 1, 1, 1);
MODULE_VERSION(fhc, 1);
diff --git a/sys/sparc64/pci/apb.c b/sys/sparc64/pci/apb.c
index 54087cc9353c..2f4932e2c1cc 100644
--- a/sys/sparc64/pci/apb.c
+++ b/sys/sparc64/pci/apb.c
@@ -111,7 +111,7 @@ static device_method_t apb_methods[] = {
static devclass_t pcib_devclass;
DEFINE_CLASS_0(pcib, apb_driver, apb_methods, sizeof(struct apb_softc));
-DRIVER_MODULE(apb, pci, apb_driver, pcib_devclass, 0, 0);
+EARLY_DRIVER_MODULE(apb, pci, apb_driver, pcib_devclass, 0, 0, BUS_PASS_BUS);
MODULE_DEPEND(apb, pci, 1, 1, 1);
/* APB specific registers */
diff --git a/sys/sparc64/pci/ofw_pcib.c b/sys/sparc64/pci/ofw_pcib.c
index 72ddeb880019..1988561ab844 100644
--- a/sys/sparc64/pci/ofw_pcib.c
+++ b/sys/sparc64/pci/ofw_pcib.c
@@ -93,7 +93,8 @@ static devclass_t pcib_devclass;
DEFINE_CLASS_0(pcib, ofw_pcib_driver, ofw_pcib_methods,
sizeof(struct ofw_pcib_gen_softc));
-DRIVER_MODULE(ofw_pcib, pci, ofw_pcib_driver, pcib_devclass, 0, 0);
+EARLY_DRIVER_MODULE(ofw_pcib, pci, ofw_pcib_driver, pcib_devclass, 0, 0,
+ BUS_PASS_BUS);
MODULE_DEPEND(ofw_pcib, pci, 1, 1, 1);
static int
diff --git a/sys/sparc64/pci/ofw_pcibus.c b/sys/sparc64/pci/ofw_pcibus.c
index bd2c7a65888c..571b6acd32bc 100644
--- a/sys/sparc64/pci/ofw_pcibus.c
+++ b/sys/sparc64/pci/ofw_pcibus.c
@@ -101,7 +101,8 @@ static devclass_t pci_devclass;
DEFINE_CLASS_1(pci, ofw_pcibus_driver, ofw_pcibus_methods, 1 /* no softc */,
pci_driver);
-DRIVER_MODULE(ofw_pcibus, pcib, ofw_pcibus_driver, pci_devclass, 0, 0);
+EARLY_DRIVER_MODULE(ofw_pcibus, pcib, ofw_pcibus_driver, pci_devclass, 0, 0,
+ BUS_PASS_BUS);
MODULE_VERSION(ofw_pcibus, 1);
MODULE_DEPEND(ofw_pcibus, pci, 1, 1, 1);
diff --git a/sys/sparc64/sbus/dma_sbus.c b/sys/sparc64/sbus/dma_sbus.c
index b4c2e5e6224d..4bc1d4387232 100644
--- a/sys/sparc64/sbus/dma_sbus.c
+++ b/sys/sparc64/sbus/dma_sbus.c
@@ -149,7 +149,13 @@ static driver_t dma_driver = {
sizeof(struct dma_softc),
};
-DRIVER_MODULE(dma, sbus, dma_driver, dma_devclass, 0, 0);
+/*
+ * The probe order is handled by sbus(4) as we don't want the variants
+ * with children to be attached earlier than the stand-alone controllers
+ * in order to generally preserve the OFW device tree order.
+ */
+EARLY_DRIVER_MODULE(dma, sbus, dma_driver, dma_devclass, 0, 0,
+ BUS_PASS_DEFAULT);
MODULE_DEPEND(dma, sbus, 1, 1, 1);
MODULE_VERSION(dma, 1);
diff --git a/sys/sparc64/sbus/sbus.c b/sys/sparc64/sbus/sbus.c
index b42a9934f9c8..0c4b509e508b 100644
--- a/sys/sparc64/sbus/sbus.c
+++ b/sys/sparc64/sbus/sbus.c
@@ -247,7 +247,8 @@ static driver_t sbus_driver = {
static devclass_t sbus_devclass;
-DRIVER_MODULE(sbus, nexus, sbus_driver, sbus_devclass, 0, 0);
+EARLY_DRIVER_MODULE(sbus, nexus, sbus_driver, sbus_devclass, 0, 0,
+ BUS_PASS_BUS);
MODULE_DEPEND(sbus, nexus, 1, 1, 1);
MODULE_VERSION(sbus, 1);
diff --git a/sys/sparc64/sparc64/nexus.c b/sys/sparc64/sparc64/nexus.c
index 798eec9eed06..04c2ddbcbee0 100644
--- a/sys/sparc64/sparc64/nexus.c
+++ b/sys/sparc64/sparc64/nexus.c
@@ -144,7 +144,8 @@ static device_method_t nexus_methods[] = {
static devclass_t nexus_devclass;
DEFINE_CLASS_0(nexus, nexus_driver, nexus_methods, sizeof(struct nexus_softc));
-DRIVER_MODULE(nexus, root, nexus_driver, nexus_devclass, 0, 0);
+EARLY_DRIVER_MODULE(nexus, root, nexus_driver, nexus_devclass, 0, 0,
+ BUS_PASS_BUS);
MODULE_VERSION(nexus, 1);
static const char *const nexus_excl_name[] = {
diff --git a/sys/sparc64/sparc64/upa.c b/sys/sparc64/sparc64/upa.c
index 7e81c8923aef..ecb11a2db4f3 100644
--- a/sys/sparc64/sparc64/upa.c
+++ b/sys/sparc64/sparc64/upa.c
@@ -151,7 +151,7 @@ static device_method_t upa_methods[] = {
static devclass_t upa_devclass;
DEFINE_CLASS_0(upa, upa_driver, upa_methods, sizeof(struct upa_softc));
-DRIVER_MODULE(upa, nexus, upa_driver, upa_devclass, 0, 0);
+EARLY_DRIVER_MODULE(upa, nexus, upa_driver, upa_devclass, 0, 0, BUS_PASS_BUS);
static const struct intr_controller upa_ic = {
upa_intr_enable,