aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pci/pcie/portdrv_acpi.c
diff options
context:
space:
mode:
authorJon Derrick <jonathan.derrick@intel.com>2016-04-08 14:44:24 -0500
committerBjorn Helgaas <bhelgaas@google.com>2016-04-08 14:44:24 -0500
commit52966bd1c2a09fdd3149f00568cc18f45cc09785 (patch)
treee15274426bd88a3c0fe2287ee88f302138cef649 /drivers/pci/pcie/portdrv_acpi.c
parentLinux 4.6-rc2 (diff)
downloadlinux-dev-52966bd1c2a09fdd3149f00568cc18f45cc09785.tar.xz
linux-dev-52966bd1c2a09fdd3149f00568cc18f45cc09785.zip
PCI/ACPI: Allow all PCIe services on non-ACPI host bridges
Host bridges we discover via ACPI, i.e., PNP0A03 and PNP0A08 devices, may have an _OSC method by which the OS can ask the platform for control of PCIe features like native hotplug, power management events, AER, etc. Previously, if we found a bridge without an ACPI device, we assumed we did not have permission to use any of these PCIe features. That seems unreasonably restrictive. If we find no ACPI device, assume we can take control of all PCIe features. The Intel Volume Management Device (VMD) is one such bridge with no ACPI device. Prior to this change, users had to boot with "pcie_ports=native" to get hotplug and other services to work below the VMD Root Port. [bhelgaas: changelog] Suggested-by: Bjorn Helgaas <helgaas@kernel.org> Signed-off-by: Jon Derrick <jonathan.derrick@intel.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Diffstat (limited to 'drivers/pci/pcie/portdrv_acpi.c')
-rw-r--r--drivers/pci/pcie/portdrv_acpi.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/pci/pcie/portdrv_acpi.c b/drivers/pci/pcie/portdrv_acpi.c
index b4d2894ee3fc..f097a73cb291 100644
--- a/drivers/pci/pcie/portdrv_acpi.c
+++ b/drivers/pci/pcie/portdrv_acpi.c
@@ -43,11 +43,11 @@ int pcie_port_acpi_setup(struct pci_dev *port, int *srv_mask)
handle = acpi_find_root_bridge_handle(port);
if (!handle)
- return -EINVAL;
+ return 0;
root = acpi_pci_find_root(handle);
if (!root)
- return -ENODEV;
+ return 0;
flags = root->osc_control_set;