Commit 0cbaa57d authored by Bjorn Helgaas's avatar Bjorn Helgaas

Merge branch 'topic/stratus' into next

parents 99662dd1 284f5f9d
...@@ -2161,6 +2161,9 @@ bytes respectively. Such letter suffixes can also be entirely omitted. ...@@ -2161,6 +2161,9 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
on: Turn realloc on on: Turn realloc on
realloc same as realloc=on realloc same as realloc=on
noari do not use PCIe ARI. noari do not use PCIe ARI.
pcie_scan_all Scan all possible PCIe devices. Otherwise we
only look for one device below a PCIe downstream
port.
pcie_aspm= [PCIE] Forcibly enable or disable PCIe Active State Power pcie_aspm= [PCIE] Forcibly enable or disable PCIe Active State Power
Management. Management.
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include <linux/dmi.h> #include <linux/dmi.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <asm-generic/pci-bridge.h>
#include <asm/acpi.h> #include <asm/acpi.h>
#include <asm/segment.h> #include <asm/segment.h>
#include <asm/io.h> #include <asm/io.h>
...@@ -229,6 +230,14 @@ static int __devinit assign_all_busses(const struct dmi_system_id *d) ...@@ -229,6 +230,14 @@ static int __devinit assign_all_busses(const struct dmi_system_id *d)
} }
#endif #endif
static int __devinit set_scan_all(const struct dmi_system_id *d)
{
printk(KERN_INFO "PCI: %s detected, enabling pci=pcie_scan_all\n",
d->ident);
pci_add_flags(PCI_SCAN_ALL_PCIE_DEVS);
return 0;
}
static const struct dmi_system_id __devinitconst pciprobe_dmi_table[] = { static const struct dmi_system_id __devinitconst pciprobe_dmi_table[] = {
#ifdef __i386__ #ifdef __i386__
/* /*
...@@ -420,6 +429,13 @@ static const struct dmi_system_id __devinitconst pciprobe_dmi_table[] = { ...@@ -420,6 +429,13 @@ static const struct dmi_system_id __devinitconst pciprobe_dmi_table[] = {
DMI_MATCH(DMI_PRODUCT_NAME, "ProLiant DL585 G2"), DMI_MATCH(DMI_PRODUCT_NAME, "ProLiant DL585 G2"),
}, },
}, },
{
.callback = set_scan_all,
.ident = "Stratus/NEC ftServer",
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "ftServer"),
},
},
{} {}
}; };
......
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/device.h> #include <linux/device.h>
#include <linux/pm_runtime.h> #include <linux/pm_runtime.h>
#include <asm-generic/pci-bridge.h>
#include <asm/setup.h> #include <asm/setup.h>
#include "pci.h" #include "pci.h"
...@@ -3900,6 +3901,8 @@ static int __init pci_setup(char *str) ...@@ -3900,6 +3901,8 @@ static int __init pci_setup(char *str)
pcie_bus_config = PCIE_BUS_PERFORMANCE; pcie_bus_config = PCIE_BUS_PERFORMANCE;
} else if (!strncmp(str, "pcie_bus_peer2peer", 18)) { } else if (!strncmp(str, "pcie_bus_peer2peer", 18)) {
pcie_bus_config = PCIE_BUS_PEER2PEER; pcie_bus_config = PCIE_BUS_PEER2PEER;
} else if (!strncmp(str, "pcie_scan_all", 13)) {
pci_add_flags(PCI_SCAN_ALL_PCIE_DEVS);
} else { } else {
printk(KERN_ERR "PCI: Unknown option `%s'\n", printk(KERN_ERR "PCI: Unknown option `%s'\n",
str); str);
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include <linux/module.h> #include <linux/module.h>
#include <linux/cpumask.h> #include <linux/cpumask.h>
#include <linux/pci-aspm.h> #include <linux/pci-aspm.h>
#include <asm-generic/pci-bridge.h>
#include "pci.h" #include "pci.h"
#define CARDBUS_LATENCY_TIMER 176 /* secondary latency timer */ #define CARDBUS_LATENCY_TIMER 176 /* secondary latency timer */
...@@ -1336,10 +1337,13 @@ static unsigned no_next_fn(struct pci_dev *dev, unsigned fn) ...@@ -1336,10 +1337,13 @@ static unsigned no_next_fn(struct pci_dev *dev, unsigned fn)
static int only_one_child(struct pci_bus *bus) static int only_one_child(struct pci_bus *bus)
{ {
struct pci_dev *parent = bus->self; struct pci_dev *parent = bus->self;
if (!parent || !pci_is_pcie(parent)) if (!parent || !pci_is_pcie(parent))
return 0; return 0;
if (parent->pcie_type == PCI_EXP_TYPE_ROOT_PORT || if (parent->pcie_type == PCI_EXP_TYPE_ROOT_PORT)
parent->pcie_type == PCI_EXP_TYPE_DOWNSTREAM) return 1;
if (parent->pcie_type == PCI_EXP_TYPE_DOWNSTREAM &&
!pci_has_flag(PCI_SCAN_ALL_PCIE_DEVS))
return 1; return 1;
return 0; return 0;
} }
......
...@@ -30,6 +30,12 @@ enum { ...@@ -30,6 +30,12 @@ enum {
PCI_ENABLE_PROC_DOMAINS = 0x00000010, PCI_ENABLE_PROC_DOMAINS = 0x00000010,
/* ... except for domain 0 */ /* ... except for domain 0 */
PCI_COMPAT_DOMAIN_0 = 0x00000020, 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 #ifdef CONFIG_PCI
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment