diff options
author | Bjorn Helgaas <bhelgaas@google.com> | 2012-05-07 17:23:27 +0200 |
---|---|---|
committer | Bjorn Helgaas <bhelgaas@google.com> | 2012-05-07 17:23:27 +0200 |
commit | 0cbaa57d828aa0a067e06d3c6d795b12ae9fb776 (patch) | |
tree | 871e08f70566b16736ae228eddac018c77ca1144 /drivers/pci | |
parent | MAINTAINERS: update PCI git tree and patchwork (diff) | |
parent | PCI: work around Stratus ftServer broken PCIe hierarchy (diff) | |
download | linux-0cbaa57d828aa0a067e06d3c6d795b12ae9fb776.tar.xz linux-0cbaa57d828aa0a067e06d3c6d795b12ae9fb776.zip |
Merge branch 'topic/stratus' into next
Diffstat (limited to 'drivers/pci')
-rw-r--r-- | drivers/pci/pci.c | 3 | ||||
-rw-r--r-- | drivers/pci/probe.c | 8 |
2 files changed, 9 insertions, 2 deletions
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index 9e31c0ab650e..8f169002dc7e 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -22,6 +22,7 @@ #include <linux/interrupt.h> #include <linux/device.h> #include <linux/pm_runtime.h> +#include <asm-generic/pci-bridge.h> #include <asm/setup.h> #include "pci.h" @@ -3900,6 +3901,8 @@ static int __init pci_setup(char *str) pcie_bus_config = PCIE_BUS_PERFORMANCE; } else if (!strncmp(str, "pcie_bus_peer2peer", 18)) { pcie_bus_config = PCIE_BUS_PEER2PEER; + } else if (!strncmp(str, "pcie_scan_all", 13)) { + pci_add_flags(PCI_SCAN_ALL_PCIE_DEVS); } else { printk(KERN_ERR "PCI: Unknown option `%s'\n", str); diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index 4c2f22668ea7..658ac977cb56 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c @@ -10,6 +10,7 @@ #include <linux/module.h> #include <linux/cpumask.h> #include <linux/pci-aspm.h> +#include <asm-generic/pci-bridge.h> #include "pci.h" #define CARDBUS_LATENCY_TIMER 176 /* secondary latency timer */ @@ -1336,10 +1337,13 @@ static unsigned no_next_fn(struct pci_dev *dev, unsigned fn) static int only_one_child(struct pci_bus *bus) { struct pci_dev *parent = bus->self; + if (!parent || !pci_is_pcie(parent)) return 0; - if (parent->pcie_type == PCI_EXP_TYPE_ROOT_PORT || - parent->pcie_type == PCI_EXP_TYPE_DOWNSTREAM) + if (parent->pcie_type == PCI_EXP_TYPE_ROOT_PORT) + return 1; + if (parent->pcie_type == PCI_EXP_TYPE_DOWNSTREAM && + !pci_has_flag(PCI_SCAN_ALL_PCIE_DEVS)) return 1; return 0; } |