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;