summaryrefslogtreecommitdiffstats
path: root/sys/i386/pci/pci_bus.c
diff options
context:
space:
mode:
authormsmith <msmith@FreeBSD.org>2000-11-08 11:25:15 +0000
committermsmith <msmith@FreeBSD.org>2000-11-08 11:25:15 +0000
commit6a0bbcf6900d1d78a883013b2047287a985692f3 (patch)
tree81d3fb51c60be4bae2e79c16d79ab588432970fb /sys/i386/pci/pci_bus.c
parent9258628e9e17bf87de335422352c914df29ccea6 (diff)
downloadFreeBSD-src-6a0bbcf6900d1d78a883013b2047287a985692f3.zip
FreeBSD-src-6a0bbcf6900d1d78a883013b2047287a985692f3.tar.gz
Hack to work around a probe which will lock up at least some i450GX-based
systems. From the PR: When 'probe.slot' is PCI_SLOTMAX (== 31) and 'probe.func' is 7, call to 'pci_cfgread()' here and machine suddenly hangs up. I don't know why... (or 450GX chipset's bug?) PR: i386/20379 Submitted by: Masayuki FUKUI <fukui@sonic.nm.fujitsu.co.jp>
Diffstat (limited to 'sys/i386/pci/pci_bus.c')
-rw-r--r--sys/i386/pci/pci_bus.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/sys/i386/pci/pci_bus.c b/sys/i386/pci/pci_bus.c
index c7faf41..c1a0599 100644
--- a/sys/i386/pci/pci_bus.c
+++ b/sys/i386/pci/pci_bus.c
@@ -267,6 +267,7 @@ nexus_pcib_identify(driver_t *driver, device_t parent)
int found = 0;
int pcifunchigh;
int found824xx = 0;
+ int found_orion = 0;
device_t child;
devclass_t pci_devclass;
@@ -288,7 +289,8 @@ nexus_pcib_identify(driver_t *driver, device_t parent)
func = 0;
hdrtype = nexus_pcib_read_config(0, bus, slot, func,
PCIR_HEADERTYPE, 1);
- if (hdrtype & PCIM_MFDEV)
+ if ((hdrtype & PCIM_MFDEV) &&
+ (!found_orion || hdrtype != 0xff))
pcifunchigh = 7;
else
pcifunchigh = 0;
@@ -347,6 +349,8 @@ nexus_pcib_identify(driver_t *driver, device_t parent)
found = 1;
if (id == 0x12258086)
found824xx = 1;
+ if (id == 0x84c48086)
+ found_orion = 1;
}
}
if (found824xx && bus == 0) {
OpenPOWER on IntegriCloud