diff options
author | msmith <msmith@FreeBSD.org> | 2000-11-08 11:25:15 +0000 |
---|---|---|
committer | msmith <msmith@FreeBSD.org> | 2000-11-08 11:25:15 +0000 |
commit | 6a0bbcf6900d1d78a883013b2047287a985692f3 (patch) | |
tree | 81d3fb51c60be4bae2e79c16d79ab588432970fb /sys/i386/pci/pci_bus.c | |
parent | 9258628e9e17bf87de335422352c914df29ccea6 (diff) | |
download | FreeBSD-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.c | 6 |
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) { |