It is not possible to set up MSI interrupts on devices which appear before a PCI Express root complex on Intel series 7/series 8 chipsets because the pci_msi_blacklisted() test fails (in dev/pci.c)
The reason is that the method for setting the pcie_chipset variable is no longer valid. Most devices in a PCI Express system no longer have the PCI Express capability registers, unless they are PCI Express root complexes or PCI Express plug-in cards.
An example is the XHCI controller in the 7-series chipset, which occurs at pci0:0:20:0 and has no PCI Express capability register, but is MSI-capable. Because none of the preceding devices have the PCI Express capability either, the MSI test fails.
Need a different method to determine system PCI Express property
How-To-Repeat: Boot FreeBSD on such a system and use pciconf to demonstrate that the XHCI has been set up with an IRQ and not MSI.
Adding john for commentary.
No, most devices in PCI-e systems do have these registers as they are required by the PCI-e standard. All of the PCI-e systems I have seen to date have PCI-e capabilities on 0:0:0:0 which is the very first PCI device enumerated. Please include a pciconf -lc from your system.
For bugs that match the following
- Status Is In progress
- Untouched since 2018-01-01.
- Affects Base System OR Documentation
Reset to open status.
I did a quick pass but if you are getting this email it might be worthwhile to double check to see if this bug ought to be closed.