MS's doc defines aspm control bit in acpi FADT table. If the bit is set, os should not enable aspm. Signed-off-by: Shaohua Li <shaohua.li@xxxxxxxxx> --- drivers/pci/pci-acpi.c | 7 +++++++ drivers/pci/pcie/aspm.c | 5 +++++ include/acpi/actbl.h | 1 + include/linux/pci-aspm.h | 5 +++++ 4 files changed, 18 insertions(+) Index: linux/drivers/pci/pci-acpi.c =================================================================== --- linux.orig/drivers/pci/pci-acpi.c 2008-07-21 10:40:29.000000000 +0800 +++ linux/drivers/pci/pci-acpi.c 2008-07-21 11:10:34.000000000 +0800 @@ -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; Index: linux/drivers/pci/pcie/aspm.c =================================================================== --- linux.orig/drivers/pci/pcie/aspm.c 2008-07-21 10:44:55.000000000 +0800 +++ linux/drivers/pci/pcie/aspm.c 2008-07-21 14:55:51.000000000 +0800 @@ -808,6 +808,11 @@ static int __init pcie_aspm_disable(char __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> Index: linux/include/acpi/actbl.h =================================================================== --- linux.orig/include/acpi/actbl.h 2008-07-21 10:40:42.000000000 +0800 +++ linux/include/acpi/actbl.h 2008-07-21 10:42:06.000000000 +0800 @@ -277,6 +277,7 @@ enum acpi_prefered_pm_profiles { #define BAF_LEGACY_DEVICES 0x0001 #define BAF_8042_KEYBOARD_CONTROLLER 0x0002 #define BAF_MSI_NOT_SUPPORTED 0x0008 +#define BAF_PCIE_ASPM_CONTROL 0x0010 #define FADT2_REVISION_ID 3 #define FADT2_MINUS_REVISION_ID 2 Index: linux/include/linux/pci-aspm.h =================================================================== --- linux.orig/include/linux/pci-aspm.h 2008-07-21 10:44:06.000000000 +0800 +++ linux/include/linux/pci-aspm.h 2008-07-21 10:46:15.000000000 +0800 @@ -27,6 +27,7 @@ extern void pcie_aspm_init_link_state(st extern void pcie_aspm_exit_link_state(struct pci_dev *pdev); extern void pcie_aspm_pm_state_change(struct pci_dev *pdev); extern void pci_disable_link_state(struct pci_dev *pdev, int state); +extern void pcie_no_aspm(void); #else static inline void pcie_aspm_init_link_state(struct pci_dev *pdev) { @@ -40,6 +41,10 @@ static inline void pcie_aspm_pm_state_ch static inline void pci_disable_link_state(struct pci_dev *pdev, int state) { } + +static inline void pcie_no_aspm(void) +{ +} #endif #ifdef CONFIG_PCIEASPM_DEBUG /* this depends on CONFIG_PCIEASPM */ -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html