[patch 1/3] disable aspm per acpi FADT table's setting

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

[Index of Archives]     [DMA Engine]     [Linux Coverity]     [Linux USB]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Greybus]

  Powered by Linux