PCI: work around Stratus ftServer broken PCIe hierarchy
A PCIe downstream port is a P2P bridge. Its secondary interface is a link that should lead only to device 0 (unless ARI is enabled)[1], so we don't probe for non-zero device numbers. Some Stratus ftServer systems have a PCIe downstream port (02:00.0) that leads to both an upstream port (03:00.0) and a downstream port (03:01.0), and 03:01.0 has important devices below it: [0000:02]-+-00.0-[03-3c]--+-00.0-[04-09]--... \-01.0-[0a-0d]--+-[USB] +-[NIC] +-... Previously, we didn't enumerate device 03:01.0, so USB and the network didn't work. This patch adds a DMI quirk to scan all device numbers, not just 0, below a downstream port. Based on a patch by Prarit Bhargava. [1] PCIe spec r3.0, sec 7.3.1 CC: Myron Stowe <mstowe@redhat.com> CC: Don Dutile <ddutile@redhat.com> CC: James Paradis <james.paradis@stratus.com> CC: Matthew Wilcox <matthew.r.wilcox@intel.com> CC: Jesse Barnes <jbarnes@virtuousgeek.org> CC: Prarit Bhargava <prarit@redhat.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
This commit is contained in:
parent
66f75a5d02
commit
284f5f9dba
5 changed files with 34 additions and 2 deletions
|
@ -30,6 +30,12 @@ enum {
|
|||
PCI_ENABLE_PROC_DOMAINS = 0x00000010,
|
||||
/* ... except for domain 0 */
|
||||
PCI_COMPAT_DOMAIN_0 = 0x00000020,
|
||||
|
||||
/* PCIe downstream ports are bridges that normally lead to only a
|
||||
* device 0, but if this is set, we scan all possible devices, not
|
||||
* just device 0.
|
||||
*/
|
||||
PCI_SCAN_ALL_PCIE_DEVS = 0x00000040,
|
||||
};
|
||||
|
||||
#ifdef CONFIG_PCI
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue