In ofw_pcibus_attach() skip dupe PCI devices reported by the
firmware (mainly 'pmu' and its 'lomp' dupe found in a couple of later USII{e,i}-based machines) by checking whether a device with the same triple of bus number, slot and function already has been added. This is the simple yet effective approach introduced in OpenBSD some time ago, but which has the flaw that it assumes that the device and its dupe(s) found in the OFW device tree are equal or at least the one encountered first is in some way the more important one (this is the case with 'pmu' and 'lomp'; the 'pmu' node has couple of properties and children while the 'lomp' one misses most of these). If there's ever a device/dupe pair where we don't encounter the more important node first, we'll probably need to introduce a quirk list in order to add the desired device but prevent its dupe(s) from being added. MFC after: 1 week
This commit is contained in:
parent
303cb7331b
commit
0975feff68
@ -197,6 +197,8 @@ ofw_pcibus_attach(device_t dev)
|
||||
continue;
|
||||
slot = OFW_PCI_PHYS_HI_DEVICE(pcir.phys_hi);
|
||||
func = OFW_PCI_PHYS_HI_FUNCTION(pcir.phys_hi);
|
||||
if (pci_find_bsf(busno, slot, func) != NULL)
|
||||
continue;
|
||||
ofw_pcibus_setup_device(pcib, busno, slot, func);
|
||||
dinfo = (struct ofw_pcibus_devinfo *)pci_read_device(pcib,
|
||||
busno, slot, func, sizeof(*dinfo));
|
||||
|
Loading…
x
Reference in New Issue
Block a user