|
Jiri Slaby |
4efb06 |
From: Kai-Heng Feng <kai.heng.feng@canonical.com>
|
|
Jiri Slaby |
4efb06 |
Date: Mon, 11 Jul 2022 18:07:01 -0500
|
|
Jiri Slaby |
4efb06 |
Subject: PCI/ASPM: Remove pcie_aspm_pm_state_change()
|
|
Jiri Slaby |
4efb06 |
Git-commit: 08d0cc5f34265d1a1e3031f319f594bd1970976c
|
|
Jiri Slaby |
4efb06 |
Patch-mainline: 6.0-rc1
|
|
Jiri Slaby |
4efb06 |
References: git-fixes
|
|
Jiri Slaby |
4efb06 |
|
|
Jiri Slaby |
4efb06 |
pcie_aspm_pm_state_change() was introduced at the inception of PCIe ASPM
|
|
Jiri Slaby |
4efb06 |
code, but it can cause some issues. For instance, when ASPM config is
|
|
Jiri Slaby |
4efb06 |
changed via sysfs, those changes won't persist across power state change
|
|
Jiri Slaby |
4efb06 |
because pcie_aspm_pm_state_change() overwrites them.
|
|
Jiri Slaby |
4efb06 |
|
|
Jiri Slaby |
4efb06 |
Also, if the driver restores L1SS [1] after system resume, the restored
|
|
Jiri Slaby |
4efb06 |
state will also be overwritten by pcie_aspm_pm_state_change().
|
|
Jiri Slaby |
4efb06 |
|
|
Jiri Slaby |
4efb06 |
Remove pcie_aspm_pm_state_change(). If there's any hardware that really
|
|
Jiri Slaby |
4efb06 |
needs it to function, a quirk can be used instead.
|
|
Jiri Slaby |
4efb06 |
|
|
Jiri Slaby |
4efb06 |
[js] no pcie_aspm_pm_state_change() in pci_set_low_power_state(), see below.
|
|
Jiri Slaby |
4efb06 |
|
|
Jiri Slaby |
4efb06 |
[1] https://lore.kernel.org/linux-pci/20220201123536.12962-1-vidyas@nvidia.com/
|
|
Jiri Slaby |
4efb06 |
Link: https://lore.kernel.org/r/20220509073639.2048236-1-kai.heng.feng@canonical.com
|
|
Jiri Slaby |
4efb06 |
[bhelgaas: remove additional pcie_aspm_pm_state_change() call in
|
|
Jiri Slaby |
4efb06 |
pci_set_low_power_state(), added by
|
|
Jiri Slaby |
4efb06 |
10aa5377fc8a ("PCI/PM: Split pci_raw_set_power_state()") and moved by
|
|
Jiri Slaby |
4efb06 |
7957d201456f ("PCI/PM: Relocate pci_set_low_power_state()")]
|
|
Jiri Slaby |
4efb06 |
Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
|
|
Jiri Slaby |
4efb06 |
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
|
|
Jiri Slaby |
4efb06 |
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
|
|
Jiri Slaby |
4efb06 |
---
|
|
Jiri Slaby |
4efb06 |
drivers/pci/pci.c | 3 ---
|
|
Jiri Slaby |
4efb06 |
drivers/pci/pci.h | 2 --
|
|
Jiri Slaby |
4efb06 |
drivers/pci/pcie/aspm.c | 19 -------------------
|
|
Jiri Slaby |
4efb06 |
3 files changed, 24 deletions(-)
|
|
Jiri Slaby |
4efb06 |
|
|
Jiri Slaby |
4efb06 |
--- a/drivers/pci/pci.c
|
|
Jiri Slaby |
4efb06 |
+++ b/drivers/pci/pci.c
|
|
Jiri Slaby |
4efb06 |
@@ -1160,9 +1160,6 @@ static int pci_raw_set_power_state(struc
|
|
Jiri Slaby |
4efb06 |
if (need_restore)
|
|
Jiri Slaby |
4efb06 |
pci_restore_bars(dev);
|
|
Jiri Slaby |
4efb06 |
|
|
Jiri Slaby |
4efb06 |
- if (dev->bus->self)
|
|
Jiri Slaby |
4efb06 |
- pcie_aspm_pm_state_change(dev->bus->self);
|
|
Jiri Slaby |
4efb06 |
-
|
|
Jiri Slaby |
4efb06 |
return 0;
|
|
Jiri Slaby |
4efb06 |
}
|
|
Jiri Slaby |
4efb06 |
|
|
Jiri Slaby |
4efb06 |
--- a/drivers/pci/pci.h
|
|
Jiri Slaby |
4efb06 |
+++ b/drivers/pci/pci.h
|
|
Jiri Slaby |
4efb06 |
@@ -598,12 +598,10 @@ bool pcie_wait_for_link(struct pci_dev *
|
|
Jiri Slaby |
4efb06 |
#ifdef CONFIG_PCIEASPM
|
|
Jiri Slaby |
4efb06 |
void pcie_aspm_init_link_state(struct pci_dev *pdev);
|
|
Jiri Slaby |
4efb06 |
void pcie_aspm_exit_link_state(struct pci_dev *pdev);
|
|
Jiri Slaby |
4efb06 |
-void pcie_aspm_pm_state_change(struct pci_dev *pdev);
|
|
Jiri Slaby |
4efb06 |
void pcie_aspm_powersave_config_link(struct pci_dev *pdev);
|
|
Jiri Slaby |
4efb06 |
#else
|
|
Jiri Slaby |
4efb06 |
static inline void pcie_aspm_init_link_state(struct pci_dev *pdev) { }
|
|
Jiri Slaby |
4efb06 |
static inline void pcie_aspm_exit_link_state(struct pci_dev *pdev) { }
|
|
Jiri Slaby |
4efb06 |
-static inline void pcie_aspm_pm_state_change(struct pci_dev *pdev) { }
|
|
Jiri Slaby |
4efb06 |
static inline void pcie_aspm_powersave_config_link(struct pci_dev *pdev) { }
|
|
Jiri Slaby |
4efb06 |
#endif
|
|
Jiri Slaby |
4efb06 |
|
|
Jiri Slaby |
4efb06 |
--- a/drivers/pci/pcie/aspm.c
|
|
Jiri Slaby |
4efb06 |
+++ b/drivers/pci/pcie/aspm.c
|
|
Jiri Slaby |
4efb06 |
@@ -1020,25 +1020,6 @@ out:
|
|
Jiri Slaby |
4efb06 |
up_read(&pci_bus_sem);
|
|
Jiri Slaby |
4efb06 |
}
|
|
Jiri Slaby |
4efb06 |
|
|
Jiri Slaby |
4efb06 |
-/* @pdev: the root port or switch downstream port */
|
|
Jiri Slaby |
4efb06 |
-void pcie_aspm_pm_state_change(struct pci_dev *pdev)
|
|
Jiri Slaby |
4efb06 |
-{
|
|
Jiri Slaby |
4efb06 |
- struct pcie_link_state *link = pdev->link_state;
|
|
Jiri Slaby |
4efb06 |
-
|
|
Jiri Slaby |
4efb06 |
- if (aspm_disabled || !link)
|
|
Jiri Slaby |
4efb06 |
- return;
|
|
Jiri Slaby |
4efb06 |
- /*
|
|
Jiri Slaby |
4efb06 |
- * Devices changed PM state, we should recheck if latency
|
|
Jiri Slaby |
4efb06 |
- * meets all functions' requirement
|
|
Jiri Slaby |
4efb06 |
- */
|
|
Jiri Slaby |
4efb06 |
- down_read(&pci_bus_sem);
|
|
Jiri Slaby |
4efb06 |
- mutex_lock(&aspm_lock);
|
|
Jiri Slaby |
4efb06 |
- pcie_update_aspm_capable(link->root);
|
|
Jiri Slaby |
4efb06 |
- pcie_config_aspm_path(link);
|
|
Jiri Slaby |
4efb06 |
- mutex_unlock(&aspm_lock);
|
|
Jiri Slaby |
4efb06 |
- up_read(&pci_bus_sem);
|
|
Jiri Slaby |
4efb06 |
-}
|
|
Jiri Slaby |
4efb06 |
-
|
|
Jiri Slaby |
4efb06 |
void pcie_aspm_powersave_config_link(struct pci_dev *pdev)
|
|
Jiri Slaby |
4efb06 |
{
|
|
Jiri Slaby |
4efb06 |
struct pcie_link_state *link = pdev->link_state;
|