]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/commit - drivers/pci/pci.c
PCI: Configure ASPM when enabling device
authorVidya Sagar <sagar.tv@gmail.com>
Wed, 16 Jul 2014 10:03:42 +0000 (15:33 +0530)
committerBjorn Helgaas <bhelgaas@google.com>
Wed, 16 Jul 2014 20:27:31 +0000 (14:27 -0600)
commit1f6ae47ecff7f23da73417e068018b311f3b5583
tree2356701528c4c2ea96768f504f63d20e91035988
parentcbace46a9710a480cae51e4611697df5de41713e
PCI: Configure ASPM when enabling device

We can't do ASPM configuration at enumeration-time because enabling it
makes some defective hardware unresponsive, even if ASPM is disabled later
(see 41cd766b0659 ("PCI: Don't enable aspm before drivers have had a chance
to veto it").  Therefore, we have to do it after a driver claims the
device.

We previously configured ASPM in pci_set_power_state(), but that's not a
very good place because it's not really related to setting the PCI device
power state, and doing it there means:

  - We incorrectly skipped ASPM config when setting a device that's
    already in D0 to D0.

  - We unnecessarily configured ASPM when setting a device to a low-power
    state (the ASPM feature only applies when the device is in D0).

  - We unnecessarily configured ASPM when called from a .resume() method
    (ASPM configuration needs to be restored during resume, but
    pci_restore_pcie_state() should already do this).

Move ASPM configuration from pci_set_power_state() to
do_pci_enable_device() so we do it when a driver enables a device.

[bhelgaas: changelog]
Link: https://bugzilla.kernel.org/show_bug.cgi?id=79621
Fixes: db288c9c5f9d ("PCI / PM: restore the original behavior of pci_set_power_state()")
Suggested-by: Bjorn Helgaas <bhelgaas@google.com>
Signed-off-by: Vidya Sagar <sagar.tv@gmail.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
CC: stable@vger.kernel.org # v3.6+
drivers/pci/pci.c