Loading Documentation/kernel-parameters.txt +3 −0 Original line number Original line Diff line number Diff line Loading @@ -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. Loading arch/x86/pci/common.c +16 −0 Original line number Original line Diff line number Diff line Loading @@ -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> Loading Loading @@ -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__ /* /* Loading Loading @@ -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"), }, }, {} {} }; }; Loading drivers/pci/pci.c +3 −0 Original line number Original line Diff line number Diff line Loading @@ -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" Loading Loading @@ -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); Loading drivers/pci/probe.c +6 −2 Original line number Original line Diff line number Diff line Loading @@ -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 */ Loading Loading @@ -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; } } Loading include/asm-generic/pci-bridge.h +6 −0 Original line number Original line Diff line number Diff line Loading @@ -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 Loading Loading
Documentation/kernel-parameters.txt +3 −0 Original line number Original line Diff line number Diff line Loading @@ -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. Loading
arch/x86/pci/common.c +16 −0 Original line number Original line Diff line number Diff line Loading @@ -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> Loading Loading @@ -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__ /* /* Loading Loading @@ -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"), }, }, {} {} }; }; Loading
drivers/pci/pci.c +3 −0 Original line number Original line Diff line number Diff line Loading @@ -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" Loading Loading @@ -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); Loading
drivers/pci/probe.c +6 −2 Original line number Original line Diff line number Diff line Loading @@ -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 */ Loading Loading @@ -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; } } Loading
include/asm-generic/pci-bridge.h +6 −0 Original line number Original line Diff line number Diff line Loading @@ -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 Loading