diff --git a/sys/amd64/pci/pci_bus.c b/sys/amd64/pci/pci_bus.c index 138da756ef27..a640e141b3d9 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 138da756ef27..a640e141b3d9 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 138da756ef27..a640e141b3d9 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 138da756ef27..a640e141b3d9 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 138da756ef27..a640e141b3d9 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 138da756ef27..a640e141b3d9 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