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>
This commit is contained in:
msmith 2000-11-08 11:25:15 +00:00
parent 9258628e9e
commit 6a0bbcf690
2 changed files with 10 additions and 2 deletions

View File

@ -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) {

View File

@ -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) {