aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi
diff options
context:
space:
mode:
authorBjorn Helgaas <bhelgaas@google.com>2015-04-10 09:27:18 -0400
committerBjorn Helgaas <bhelgaas@google.com>2015-04-10 09:27:18 -0400
commit5468d5a64bf1e002e5081fa280186d0eba09fa0e (patch)
treea9c1500d4b0cfb9db1f822dc1357c184b0f2f188 /drivers/acpi
parent4dd1f57956ada782fd80b1c11c30a9595d6caafc (diff)
parent55db3208f238ee776f1f747734051723d8a3c13e (diff)
Merge branch 'pci/misc' into next
* pci/misc: PCI: Read capability list as dwords, not bytes PCI: Don't clear ASPM bits when the FADT declares it's unsupported PCI: Clarify policy for vendor IDs in pci.txt PCI/ACPI: Optimize device state transition delays PCI: Export pci_find_host_bridge() for use inside PCI core PCI: Make a shareable UUID for PCI firmware ACPI _DSM PCI: Fix typo in Thunderbolt kernel message
Diffstat (limited to 'drivers/acpi')
-rw-r--r--drivers/acpi/pci_root.c19
1 files changed, 8 insertions, 11 deletions
diff --git a/drivers/acpi/pci_root.c b/drivers/acpi/pci_root.c
index 68a5f712cd19..1b5569c092c6 100644
--- a/drivers/acpi/pci_root.c
+++ b/drivers/acpi/pci_root.c
@@ -423,8 +423,7 @@ out:
423} 423}
424EXPORT_SYMBOL(acpi_pci_osc_control_set); 424EXPORT_SYMBOL(acpi_pci_osc_control_set);
425 425
426static void negotiate_os_control(struct acpi_pci_root *root, int *no_aspm, 426static void negotiate_os_control(struct acpi_pci_root *root, int *no_aspm)
427 int *clear_aspm)
428{ 427{
429 u32 support, control, requested; 428 u32 support, control, requested;
430 acpi_status status; 429 acpi_status status;
@@ -495,10 +494,12 @@ static void negotiate_os_control(struct acpi_pci_root *root, int *no_aspm,
495 decode_osc_control(root, "OS now controls", control); 494 decode_osc_control(root, "OS now controls", control);
496 if (acpi_gbl_FADT.boot_flags & ACPI_FADT_NO_ASPM) { 495 if (acpi_gbl_FADT.boot_flags & ACPI_FADT_NO_ASPM) {
497 /* 496 /*
498 * We have ASPM control, but the FADT indicates 497 * We have ASPM control, but the FADT indicates that
499 * that it's unsupported. Clear it. 498 * it's unsupported. Leave existing configuration
499 * intact and prevent the OS from touching it.
500 */ 500 */
501 *clear_aspm = 1; 501 dev_info(&device->dev, "FADT indicates ASPM is unsupported, using BIOS configuration\n");
502 *no_aspm = 1;
502 } 503 }
503 } else { 504 } else {
504 decode_osc_control(root, "OS requested", requested); 505 decode_osc_control(root, "OS requested", requested);
@@ -525,7 +526,7 @@ static int acpi_pci_root_add(struct acpi_device *device,
525 int result; 526 int result;
526 struct acpi_pci_root *root; 527 struct acpi_pci_root *root;
527 acpi_handle handle = device->handle; 528 acpi_handle handle = device->handle;
528 int no_aspm = 0, clear_aspm = 0; 529 int no_aspm = 0;
529 bool hotadd = system_state != SYSTEM_BOOTING; 530 bool hotadd = system_state != SYSTEM_BOOTING;
530 531
531 root = kzalloc(sizeof(struct acpi_pci_root), GFP_KERNEL); 532 root = kzalloc(sizeof(struct acpi_pci_root), GFP_KERNEL);
@@ -584,7 +585,7 @@ static int acpi_pci_root_add(struct acpi_device *device,
584 585
585 root->mcfg_addr = acpi_pci_root_get_mcfg_addr(handle); 586 root->mcfg_addr = acpi_pci_root_get_mcfg_addr(handle);
586 587
587 negotiate_os_control(root, &no_aspm, &clear_aspm); 588 negotiate_os_control(root, &no_aspm);
588 589
589 /* 590 /*
590 * TBD: Need PCI interface for enumeration/configuration of roots. 591 * TBD: Need PCI interface for enumeration/configuration of roots.
@@ -607,10 +608,6 @@ static int acpi_pci_root_add(struct acpi_device *device,
607 goto remove_dmar; 608 goto remove_dmar;
608 } 609 }
609 610
610 if (clear_aspm) {
611 dev_info(&device->dev, "Disabling ASPM (FADT indicates it is unsupported)\n");
612 pcie_clear_aspm(root->bus);
613 }
614 if (no_aspm) 611 if (no_aspm)
615 pcie_no_aspm(); 612 pcie_no_aspm();
616 613