aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pci
diff options
context:
space:
mode:
authorShaohua Li <shaohua.li@intel.com>2008-07-23 10:32:24 +0800
committerJesse Barnes <jbarnes@virtuousgeek.org>2008-07-28 14:56:09 -0700
commit5fde244d39b88625ac578d83e6625138714de031 (patch)
treee50762b22a94f7f7990c9dbab699a857da0982eb /drivers/pci
parentce6fce4295ba727b36fdc73040e444bd1aae64cd (diff)
downloadkernel_samsung_tuna-5fde244d39b88625ac578d83e6625138714de031.zip
kernel_samsung_tuna-5fde244d39b88625ac578d83e6625138714de031.tar.gz
kernel_samsung_tuna-5fde244d39b88625ac578d83e6625138714de031.tar.bz2
PCI: disable ASPM per ACPI FADT setting
The ACPI FADT table includes an ASPM control bit. If the bit is set, do not enable ASPM since it may indicate that the platform doesn't actually support the feature. Tested-by: Jack Howarth <howarth@bromo.msbb.uc.edu> Signed-off-by: Shaohua Li <shaohua.li@intel.com> Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Diffstat (limited to 'drivers/pci')
-rw-r--r--drivers/pci/pci-acpi.c7
-rw-r--r--drivers/pci/pcie/aspm.c5
2 files changed, 12 insertions, 0 deletions
diff --git a/drivers/pci/pci-acpi.c b/drivers/pci/pci-acpi.c
index 7764768b..89a2f0f 100644
--- a/drivers/pci/pci-acpi.c
+++ b/drivers/pci/pci-acpi.c
@@ -11,6 +11,7 @@
#include <linux/init.h>
#include <linux/pci.h>
#include <linux/module.h>
+#include <linux/pci-aspm.h>
#include <acpi/acpi.h>
#include <acpi/acnamesp.h>
#include <acpi/acresrc.h>
@@ -372,6 +373,12 @@ static int __init acpi_pci_init(void)
printk(KERN_INFO"ACPI FADT declares the system doesn't support MSI, so disable it\n");
pci_no_msi();
}
+
+ if (acpi_gbl_FADT.boot_flags & BAF_PCIE_ASPM_CONTROL) {
+ printk(KERN_INFO"ACPI FADT declares the system doesn't support PCIe ASPM, so disable it\n");
+ pcie_no_aspm();
+ }
+
ret = register_acpi_bus_type(&acpi_pci_bus);
if (ret)
return 0;
diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c
index f824955..759c51a 100644
--- a/drivers/pci/pcie/aspm.c
+++ b/drivers/pci/pcie/aspm.c
@@ -808,6 +808,11 @@ static int __init pcie_aspm_disable(char *str)
__setup("pcie_noaspm", pcie_aspm_disable);
+void pcie_no_aspm(void)
+{
+ aspm_disabled = 1;
+}
+
#ifdef CONFIG_ACPI
#include <acpi/acpi_bus.h>
#include <linux/pci-acpi.h>