summaryrefslogtreecommitdiff
path: root/0004-PCI-pciehp-Do-not-disable-interrupt-twice-on-suspend.patch
diff options
context:
space:
mode:
Diffstat (limited to '0004-PCI-pciehp-Do-not-disable-interrupt-twice-on-suspend.patch')
-rw-r--r--0004-PCI-pciehp-Do-not-disable-interrupt-twice-on-suspend.patch99
1 files changed, 0 insertions, 99 deletions
diff --git a/0004-PCI-pciehp-Do-not-disable-interrupt-twice-on-suspend.patch b/0004-PCI-pciehp-Do-not-disable-interrupt-twice-on-suspend.patch
deleted file mode 100644
index fc49e38..0000000
--- a/0004-PCI-pciehp-Do-not-disable-interrupt-twice-on-suspend.patch
+++ /dev/null
@@ -1,99 +0,0 @@
-From 271c8fe698d3ba5b3b135ffacfd1dc0c87243e32 Mon Sep 17 00:00:00 2001
-From: Mika Westerberg <mika.westerberg@linux.intel.com>
-Date: Tue, 29 Oct 2019 20:00:21 +0300
-Subject: PCI: pciehp: Do not disable interrupt twice on suspend
-
-We try to keep PCIe hotplug ports runtime suspended when entering system
-suspend. Because the PCIe portdrv sets the DPM_FLAG_NEVER_SKIP flag, the PM
-core always calls system suspend/resume hooks even if the device is left
-runtime suspended. Since PCIe hotplug driver re-used the same function for
-both runtime suspend and system suspend, it ended up disabling hotplug
-interrupt twice and the second time following was printed:
-
- pciehp 0000:03:01.0:pcie204: pcie_do_write_cmd: no response from device
-
-Prevent this from happening by checking whether the device is already
-runtime suspended when the system suspend hook is called.
-
-Fixes: 9c62f0bfb832 ("PCI: pciehp: Implement runtime PM callbacks")
-Link: https://lore.kernel.org/r/20191029170022.57528-1-mika.westerberg@linux.intel.com
-Reported-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
-Tested-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
-Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
-Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
-Reviewed-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
----
- drivers/pci/hotplug/pciehp_core.c | 25 +++++++++++++++++++++++--
- 1 file changed, 23 insertions(+), 2 deletions(-)
-
-diff --git a/drivers/pci/hotplug/pciehp_core.c b/drivers/pci/hotplug/pciehp_core.c
-index b3122c151b80..56daad828c9e 100644
---- a/drivers/pci/hotplug/pciehp_core.c
-+++ b/drivers/pci/hotplug/pciehp_core.c
-@@ -253,7 +253,7 @@ static bool pme_is_native(struct pcie_device *dev)
- return pcie_ports_native || host->native_pme;
- }
-
--static int pciehp_suspend(struct pcie_device *dev)
-+static void pciehp_disable_interrupt(struct pcie_device *dev)
- {
- /*
- * Disable hotplug interrupt so that it does not trigger
-@@ -261,7 +261,19 @@ static int pciehp_suspend(struct pcie_device *dev)
- */
- if (pme_is_native(dev))
- pcie_disable_interrupt(get_service_data(dev));
-+}
-
-+#ifdef CONFIG_PM_SLEEP
-+static int pciehp_suspend(struct pcie_device *dev)
-+{
-+ /*
-+ * If the port is already runtime suspended we can keep it that
-+ * way.
-+ */
-+ if (dev_pm_smart_suspend_and_suspended(&dev->port->dev))
-+ return 0;
-+
-+ pciehp_disable_interrupt(dev);
- return 0;
- }
-
-@@ -279,6 +291,7 @@ static int pciehp_resume_noirq(struct pcie_device *dev)
-
- return 0;
- }
-+#endif
-
- static int pciehp_resume(struct pcie_device *dev)
- {
-@@ -292,6 +305,12 @@ static int pciehp_resume(struct pcie_device *dev)
- return 0;
- }
-
-+static int pciehp_runtime_suspend(struct pcie_device *dev)
-+{
-+ pciehp_disable_interrupt(dev);
-+ return 0;
-+}
-+
- static int pciehp_runtime_resume(struct pcie_device *dev)
- {
- struct controller *ctrl = get_service_data(dev);
-@@ -318,10 +337,12 @@ static struct pcie_port_service_driver hpdriver_portdrv = {
- .remove = pciehp_remove,
-
- #ifdef CONFIG_PM
-+#ifdef CONFIG_PM_SLEEP
- .suspend = pciehp_suspend,
- .resume_noirq = pciehp_resume_noirq,
- .resume = pciehp_resume,
-- .runtime_suspend = pciehp_suspend,
-+#endif
-+ .runtime_suspend = pciehp_runtime_suspend,
- .runtime_resume = pciehp_runtime_resume,
- #endif /* PM */
- };
---
-cgit v1.2.1-1-g437b
-