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