summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/amd64/pci/pci_bus.c14
-rw-r--r--sys/amd64/pci/pci_cfgreg.c14
-rw-r--r--sys/i386/isa/pcibus.c14
-rw-r--r--sys/i386/pci/pci_bus.c14
-rw-r--r--sys/i386/pci/pci_cfgreg.c14
-rw-r--r--sys/i386/pci/pci_pir.c14
6 files changed, 84 insertions, 0 deletions
diff --git a/sys/amd64/pci/pci_bus.c b/sys/amd64/pci/pci_bus.c
index 138da75..a640e14 100644
--- a/sys/amd64/pci/pci_bus.c
+++ b/sys/amd64/pci/pci_bus.c
@@ -420,6 +420,7 @@ static void
nexus_pcib_identify(driver_t *driver, device_t parent)
{
pcicfgregs probe;
+ int found = 0;
if (pci_cfgopen() == 0)
return;
@@ -455,9 +456,22 @@ nexus_pcib_identify(driver_t *driver, device_t parent)
child = BUS_ADD_CHILD(parent, 100,
"pcib", busnum);
device_set_desc(child, s);
+ found = 1;
}
}
}
+
+ /*
+ * Make sure we add at least one bridge since some old
+ * hardware doesn't actually have a host-pci bridge device.
+ * Note that pci_cfgopen() thinks we have PCI devices..
+ */
+ if (!found) {
+ if (bootverbose)
+ printf(
+ "nexus_pcib_identify: no bridge found, adding pcib0 anyway\n");
+ BUS_ADD_CHILD(parent, 100, "pcib", 0);
+ }
}
static int
diff --git a/sys/amd64/pci/pci_cfgreg.c b/sys/amd64/pci/pci_cfgreg.c
index 138da75..a640e14 100644
--- a/sys/amd64/pci/pci_cfgreg.c
+++ b/sys/amd64/pci/pci_cfgreg.c
@@ -420,6 +420,7 @@ static void
nexus_pcib_identify(driver_t *driver, device_t parent)
{
pcicfgregs probe;
+ int found = 0;
if (pci_cfgopen() == 0)
return;
@@ -455,9 +456,22 @@ nexus_pcib_identify(driver_t *driver, device_t parent)
child = BUS_ADD_CHILD(parent, 100,
"pcib", busnum);
device_set_desc(child, s);
+ found = 1;
}
}
}
+
+ /*
+ * Make sure we add at least one bridge since some old
+ * hardware doesn't actually have a host-pci bridge device.
+ * Note that pci_cfgopen() thinks we have PCI devices..
+ */
+ if (!found) {
+ if (bootverbose)
+ printf(
+ "nexus_pcib_identify: no bridge found, adding pcib0 anyway\n");
+ BUS_ADD_CHILD(parent, 100, "pcib", 0);
+ }
}
static int
diff --git a/sys/i386/isa/pcibus.c b/sys/i386/isa/pcibus.c
index 138da75..a640e14 100644
--- a/sys/i386/isa/pcibus.c
+++ b/sys/i386/isa/pcibus.c
@@ -420,6 +420,7 @@ static void
nexus_pcib_identify(driver_t *driver, device_t parent)
{
pcicfgregs probe;
+ int found = 0;
if (pci_cfgopen() == 0)
return;
@@ -455,9 +456,22 @@ nexus_pcib_identify(driver_t *driver, device_t parent)
child = BUS_ADD_CHILD(parent, 100,
"pcib", busnum);
device_set_desc(child, s);
+ found = 1;
}
}
}
+
+ /*
+ * Make sure we add at least one bridge since some old
+ * hardware doesn't actually have a host-pci bridge device.
+ * Note that pci_cfgopen() thinks we have PCI devices..
+ */
+ if (!found) {
+ if (bootverbose)
+ printf(
+ "nexus_pcib_identify: no bridge found, adding pcib0 anyway\n");
+ BUS_ADD_CHILD(parent, 100, "pcib", 0);
+ }
}
static int
diff --git a/sys/i386/pci/pci_bus.c b/sys/i386/pci/pci_bus.c
index 138da75..a640e14 100644
--- a/sys/i386/pci/pci_bus.c
+++ b/sys/i386/pci/pci_bus.c
@@ -420,6 +420,7 @@ static void
nexus_pcib_identify(driver_t *driver, device_t parent)
{
pcicfgregs probe;
+ int found = 0;
if (pci_cfgopen() == 0)
return;
@@ -455,9 +456,22 @@ nexus_pcib_identify(driver_t *driver, device_t parent)
child = BUS_ADD_CHILD(parent, 100,
"pcib", busnum);
device_set_desc(child, s);
+ found = 1;
}
}
}
+
+ /*
+ * Make sure we add at least one bridge since some old
+ * hardware doesn't actually have a host-pci bridge device.
+ * Note that pci_cfgopen() thinks we have PCI devices..
+ */
+ if (!found) {
+ if (bootverbose)
+ printf(
+ "nexus_pcib_identify: no bridge found, adding pcib0 anyway\n");
+ BUS_ADD_CHILD(parent, 100, "pcib", 0);
+ }
}
static int
diff --git a/sys/i386/pci/pci_cfgreg.c b/sys/i386/pci/pci_cfgreg.c
index 138da75..a640e14 100644
--- a/sys/i386/pci/pci_cfgreg.c
+++ b/sys/i386/pci/pci_cfgreg.c
@@ -420,6 +420,7 @@ static void
nexus_pcib_identify(driver_t *driver, device_t parent)
{
pcicfgregs probe;
+ int found = 0;
if (pci_cfgopen() == 0)
return;
@@ -455,9 +456,22 @@ nexus_pcib_identify(driver_t *driver, device_t parent)
child = BUS_ADD_CHILD(parent, 100,
"pcib", busnum);
device_set_desc(child, s);
+ found = 1;
}
}
}
+
+ /*
+ * Make sure we add at least one bridge since some old
+ * hardware doesn't actually have a host-pci bridge device.
+ * Note that pci_cfgopen() thinks we have PCI devices..
+ */
+ if (!found) {
+ if (bootverbose)
+ printf(
+ "nexus_pcib_identify: no bridge found, adding pcib0 anyway\n");
+ BUS_ADD_CHILD(parent, 100, "pcib", 0);
+ }
}
static int
diff --git a/sys/i386/pci/pci_pir.c b/sys/i386/pci/pci_pir.c
index 138da75..a640e14 100644
--- a/sys/i386/pci/pci_pir.c
+++ b/sys/i386/pci/pci_pir.c
@@ -420,6 +420,7 @@ static void
nexus_pcib_identify(driver_t *driver, device_t parent)
{
pcicfgregs probe;
+ int found = 0;
if (pci_cfgopen() == 0)
return;
@@ -455,9 +456,22 @@ nexus_pcib_identify(driver_t *driver, device_t parent)
child = BUS_ADD_CHILD(parent, 100,
"pcib", busnum);
device_set_desc(child, s);
+ found = 1;
}
}
}
+
+ /*
+ * Make sure we add at least one bridge since some old
+ * hardware doesn't actually have a host-pci bridge device.
+ * Note that pci_cfgopen() thinks we have PCI devices..
+ */
+ if (!found) {
+ if (bootverbose)
+ printf(
+ "nexus_pcib_identify: no bridge found, adding pcib0 anyway\n");
+ BUS_ADD_CHILD(parent, 100, "pcib", 0);
+ }
}
static int
OpenPOWER on IntegriCloud