]> git.baikalelectronics.ru Git - kernel.git/commitdiff
PCI/ASPM: Remove pcie_aspm_pm_state_change()
authorKai-Heng Feng <kai.heng.feng@canonical.com>
Mon, 11 Jul 2022 23:07:01 +0000 (18:07 -0500)
committerBjorn Helgaas <bhelgaas@google.com>
Tue, 12 Jul 2022 15:08:26 +0000 (10:08 -0500)
pcie_aspm_pm_state_change() was introduced at the inception of PCIe ASPM
code, but it can cause some issues. For instance, when ASPM config is
changed via sysfs, those changes won't persist across power state change
because pcie_aspm_pm_state_change() overwrites them.

Also, if the driver restores L1SS [1] after system resume, the restored
state will also be overwritten by pcie_aspm_pm_state_change().

Remove pcie_aspm_pm_state_change().  If there's any hardware that really
needs it to function, a quirk can be used instead.

[1] https://lore.kernel.org/linux-pci/20220201123536.12962-1-vidyas@nvidia.com/
Link: https://lore.kernel.org/r/20220509073639.2048236-1-kai.heng.feng@canonical.com
[bhelgaas: remove additional pcie_aspm_pm_state_change() call in
pci_set_low_power_state(), added by
df103ceaff28 ("PCI/PM: Split pci_raw_set_power_state()") and moved by
695f877e11e8 ("PCI/PM: Relocate pci_set_low_power_state()")]
Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
drivers/pci/pci.c
drivers/pci/pci.h
drivers/pci/pcie/aspm.c

index cfaf40a540a82771f3e6ab69a2e9784dfec0667f..093303c27ea8ec888a5f409f300090a50fa07c5b 100644 (file)
@@ -1293,9 +1293,6 @@ static int pci_set_full_power_state(struct pci_dev *dev)
                pci_restore_bars(dev);
        }
 
-       if (dev->bus->self)
-               pcie_aspm_pm_state_change(dev->bus->self);
-
        return 0;
 }
 
@@ -1390,9 +1387,6 @@ static int pci_set_low_power_state(struct pci_dev *dev, pci_power_t state)
                                     pci_power_name(dev->current_state),
                                     pci_power_name(state));
 
-       if (dev->bus->self)
-               pcie_aspm_pm_state_change(dev->bus->self);
-
        return 0;
 }
 
index e10cdec6c56e813d997f54c895bcca9a2836da52..785f31086313ab8c28515e377dafa18ac94732ef 100644 (file)
@@ -560,12 +560,10 @@ bool pcie_wait_for_link(struct pci_dev *pdev, bool active);
 #ifdef CONFIG_PCIEASPM
 void pcie_aspm_init_link_state(struct pci_dev *pdev);
 void pcie_aspm_exit_link_state(struct pci_dev *pdev);
-void pcie_aspm_pm_state_change(struct pci_dev *pdev);
 void pcie_aspm_powersave_config_link(struct pci_dev *pdev);
 #else
 static inline void pcie_aspm_init_link_state(struct pci_dev *pdev) { }
 static inline void pcie_aspm_exit_link_state(struct pci_dev *pdev) { }
-static inline void pcie_aspm_pm_state_change(struct pci_dev *pdev) { }
 static inline void pcie_aspm_powersave_config_link(struct pci_dev *pdev) { }
 #endif
 
index a96b7424c9bc8a2ad10010812e240222d1e8a296..7f76a5875feb40657249795d4dc8e9b142090533 100644 (file)
@@ -1012,25 +1012,6 @@ out:
        up_read(&pci_bus_sem);
 }
 
-/* @pdev: the root port or switch downstream port */
-void pcie_aspm_pm_state_change(struct pci_dev *pdev)
-{
-       struct pcie_link_state *link = pdev->link_state;
-
-       if (aspm_disabled || !link)
-               return;
-       /*
-        * Devices changed PM state, we should recheck if latency
-        * meets all functions' requirement
-        */
-       down_read(&pci_bus_sem);
-       mutex_lock(&aspm_lock);
-       pcie_update_aspm_capable(link->root);
-       pcie_config_aspm_path(link);
-       mutex_unlock(&aspm_lock);
-       up_read(&pci_bus_sem);
-}
-
 void pcie_aspm_powersave_config_link(struct pci_dev *pdev)
 {
        struct pcie_link_state *link = pdev->link_state;