summaryrefslogtreecommitdiffstats
path: root/pci-aspm-dont-enable-too-early.patch
diff options
context:
space:
mode:
authorJesse Keating <jkeating@redhat.com>2010-07-29 16:46:31 -0700
committerJesse Keating <jkeating@redhat.com>2010-07-29 16:46:31 -0700
commit7a32965a104c3363e8505fe566531fcf071cced7 (patch)
treee45cb84552b2b022f49047bbddd9d887753c35bc /pci-aspm-dont-enable-too-early.patch
parent64ba2e5ffde5f2418eb26c700cb0ab62b04e5013 (diff)
downloadkernel-7a32965a104c3363e8505fe566531fcf071cced7.tar.gz
kernel-7a32965a104c3363e8505fe566531fcf071cced7.tar.xz
kernel-7a32965a104c3363e8505fe566531fcf071cced7.zip
initial srpm import
Diffstat (limited to 'pci-aspm-dont-enable-too-early.patch')
-rw-r--r--pci-aspm-dont-enable-too-early.patch50
1 files changed, 50 insertions, 0 deletions
diff --git a/pci-aspm-dont-enable-too-early.patch b/pci-aspm-dont-enable-too-early.patch
new file mode 100644
index 000000000..ea91a2554
--- /dev/null
+++ b/pci-aspm-dont-enable-too-early.patch
@@ -0,0 +1,50 @@
+From: Matthew Garrett <mjg@redhat.com>
+Date: Wed, 9 Jun 2010 20:05:07 +0000 (-0400)
+Subject: PCI: Don't enable aspm before drivers have had a chance to veto it
+X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fjbarnes%2Fpci-2.6.git;a=commitdiff_plain;h=8f0b08c29f1df91315e48adce04462eb23671099
+
+PCI: Don't enable aspm before drivers have had a chance to veto it
+
+The aspm code will currently set the configured aspm policy before drivers
+have had an opportunity to indicate that their hardware doesn't support it.
+Unfortunately, putting some hardware in L0 or L1 can result in the hardware
+no longer responding to any requests, even after aspm is disabled. It makes
+more sense to leave aspm policy at the BIOS defaults at initial setup time,
+reconfiguring it after pci_enable_device() is called. This allows the
+driver to blacklist individual devices beforehand.
+
+Reviewed-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
+Signed-off-by: Matthew Garrett <mjg@redhat.com>
+Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
+---
+
+diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c
+index be53d98..7122281 100644
+--- a/drivers/pci/pcie/aspm.c
++++ b/drivers/pci/pcie/aspm.c
+@@ -588,11 +588,23 @@ void pcie_aspm_init_link_state(struct pci_dev *pdev)
+ * update through pcie_aspm_cap_init().
+ */
+ pcie_aspm_cap_init(link, blacklist);
+- pcie_config_aspm_path(link);
+
+ /* Setup initial Clock PM state */
+ pcie_clkpm_cap_init(link, blacklist);
+- pcie_set_clkpm(link, policy_to_clkpm_state(link));
++
++ /*
++ * At this stage drivers haven't had an opportunity to change the
++ * link policy setting. Enabling ASPM on broken hardware can cripple
++ * it even before the driver has had a chance to disable ASPM, so
++ * default to a safe level right now. If we're enabling ASPM beyond
++ * the BIOS's expectation, we'll do so once pci_enable_device() is
++ * called.
++ */
++ if (aspm_policy != POLICY_POWERSAVE) {
++ pcie_config_aspm_path(link);
++ pcie_set_clkpm(link, policy_to_clkpm_state(link));
++ }
++
+ unlock:
+ mutex_unlock(&aspm_lock);
+ out: