Relax the check for a PCI-express chipset by assuming the system is a

PCI-express chipset (and thus has functional MSI) if there are any
PCI-express devices in the system, not requiring a root port device.

With PCI-X the chipset detection has to be very conservative because there
are known systems with PCI-X devices that do not appear to have PCI-X
chipsets.  However, with PCI-express I'm not sure it is possible to have
a PCI-express device in a system with a non-PCI-express chipset.  If we
assume that is the case then this change is valid.  It is also required
for at least some PCI-express systems that don't have any devices with
a root port capability (some ICH9 systems).

MFC after:	1 week
Reported by:	jfv
This commit is contained in:
jhb 2008-02-01 20:31:09 +00:00
parent c121b7dc85
commit 51f10aedc0

View File

@ -616,12 +616,9 @@ pci_read_extcap(device_t pcib, pcicfgregs *cfg)
case PCIY_EXPRESS: /* PCI-express */ case PCIY_EXPRESS: /* PCI-express */
/* /*
* Assume we have a PCI-express chipset if we have * Assume we have a PCI-express chipset if we have
* at least one PCI-express root port. * at least one PCI-express device.
*/ */
val = REG(ptr + PCIR_EXPRESS_FLAGS, 2); pcie_chipset = 1;
if ((val & PCIM_EXP_FLAGS_TYPE) ==
PCIM_EXP_TYPE_ROOT_PORT)
pcie_chipset = 1;
break; break;
default: default:
break; break;