Thread (10 messages) 10 messages, 5 authors, 2022-01-04

Re: [PATCH 1/2] net: wwan: iosm: Let PCI core handle PCI power transition

From: Kai-Heng Feng <hidden>
Date: 2021-12-30 00:58:00
Also in: linux-pci, linux-pm, lkml

On Thu, Dec 30, 2021 at 4:12 AM Bjorn Helgaas [off-list ref] wrote:
[+cc Rafael, in case you have insight about the PCI_D0 question below;
Vaibhav, since this is related to your generic PM conversions]

On Fri, Dec 24, 2021 at 04:19:13PM +0800, Kai-Heng Feng wrote:
quoted
pci_pm_suspend_noirq() and pci_pm_resume_noirq() already handle power
transition for system-wide suspend and resume, so it's not necessary to
do it in the driver.
I see DaveM has already applied this, but it looks good to me, thanks
for doing this!

One minor question below...
quoted
Signed-off-by: Kai-Heng Feng <redacted>
---
 drivers/net/wwan/iosm/iosm_ipc_pcie.c | 49 ++-------------------------
 1 file changed, 2 insertions(+), 47 deletions(-)
diff --git a/drivers/net/wwan/iosm/iosm_ipc_pcie.c b/drivers/net/wwan/iosm/iosm_ipc_pcie.c
index 2fe88b8be3481..d73894e2a84ed 100644
--- a/drivers/net/wwan/iosm/iosm_ipc_pcie.c
+++ b/drivers/net/wwan/iosm/iosm_ipc_pcie.c
@@ -363,67 +363,22 @@ static int __maybe_unused ipc_pcie_resume_s2idle(struct iosm_pcie *ipc_pcie)

 int __maybe_unused ipc_pcie_suspend(struct iosm_pcie *ipc_pcie)
 {
-     struct pci_dev *pdev;
-     int ret;
-
-     pdev = ipc_pcie->pci;
-
-     /* Execute D3 one time. */
-     if (pdev->current_state != PCI_D0) {
-             dev_dbg(ipc_pcie->dev, "done for PM=%d", pdev->current_state);
-             return 0;
-     }
I don't understand the intent of this early exit, and it's not obvious
to me that pci_pm_suspend_noirq() bails out early when
(pdev->current_state != PCI_D0).
Yes, I think this can be removed too. Please let me send v2.

Kai-Heng
quoted
      /* The HAL shall ask the shared memory layer whether D3 is allowed. */
      ipc_imem_pm_suspend(ipc_pcie->imem);

-     /* Save the PCI configuration space of a device before suspending. */
-     ret = pci_save_state(pdev);
-
-     if (ret) {
-             dev_err(ipc_pcie->dev, "pci_save_state error=%d", ret);
-             return ret;
-     }
-
-     /* Set the power state of a PCI device.
-      * Transition a device to a new power state, using the device's PCI PM
-      * registers.
-      */
-     ret = pci_set_power_state(pdev, PCI_D3cold);
-
-     if (ret) {
-             dev_err(ipc_pcie->dev, "pci_set_power_state error=%d", ret);
-             return ret;
-     }
-
      dev_dbg(ipc_pcie->dev, "SUSPEND done");
-     return ret;
+     return 0;
 }

 int __maybe_unused ipc_pcie_resume(struct iosm_pcie *ipc_pcie)
 {
-     int ret;
-
-     /* Set the power state of a PCI device.
-      * Transition a device to a new power state, using the device's PCI PM
-      * registers.
-      */
-     ret = pci_set_power_state(ipc_pcie->pci, PCI_D0);
-
-     if (ret) {
-             dev_err(ipc_pcie->dev, "pci_set_power_state error=%d", ret);
-             return ret;
-     }
-
-     pci_restore_state(ipc_pcie->pci);
-
      /* The HAL shall inform the shared memory layer that the device is
       * active.
       */
      ipc_imem_pm_resume(ipc_pcie->imem);

      dev_dbg(ipc_pcie->dev, "RESUME done");
-     return ret;
+     return 0;
 }

 static int __maybe_unused ipc_pcie_suspend_cb(struct device *dev)
--
2.33.1
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help