[PATCH] bus: mhi: host: pci_generic: Resume the device before executing mhi_pci_remove()

Manivannan Sadhasivam <[email protected]> Mon, 2 Mar 2026 19:11:16 +0530
Newsgroups dev.linux.lists.mhi,org.kernel.vger.linux-arm-msm,org.kernel.vger.linux-kernel,org.kernel.vger.stable
Message-ID <[email protected]>
mhi_pci_remove() carries out device specific operations that requires the
device to be active. But pm_runtime_get_noresume() called at the end of the
remove() will not guarantee that.

So use pm_runtime_get_sync() and call it at the start of remove().

Cc: <[email protected]> # 5.13
Cc: Loic Poulain <[email protected]>
Fixes: d3800c1dce24 ("bus: mhi: pci_generic: Add support for runtime PM")
Signed-off-by: Manivannan Sadhasivam <[email protected]>
---
 drivers/bus/mhi/host/pci_generic.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/bus/mhi/host/pci_generic.c b/drivers/bus/mhi/host/pci_generic.c
index 425362037830..fe3aefa15966 100644
--- a/drivers/bus/mhi/host/pci_generic.c
+++ b/drivers/bus/mhi/host/pci_generic.c
@@ -1440,6 +1440,10 @@ static void mhi_pci_remove(struct pci_dev *pdev)
 	struct mhi_pci_device *mhi_pdev = pci_get_drvdata(pdev);
 	struct mhi_controller *mhi_cntrl = &mhi_pdev->mhi_cntrl;
 
+	/* balancing probe put_noidle */
+	if (pci_pme_capable(pdev, PCI_D3hot))
+		pm_runtime_get_sync(&pdev->dev);
+
 	pci_disable_sriov(pdev);
 
 	if (pdev->is_physfn)
@@ -1451,10 +1455,6 @@ static void mhi_pci_remove(struct pci_dev *pdev)
 		mhi_unprepare_after_power_down(mhi_cntrl);
 	}
 
-	/* balancing probe put_noidle */
-	if (pci_pme_capable(pdev, PCI_D3hot))
-		pm_runtime_get_noresume(&pdev->dev);
-
 	if (mhi_pdev->reset_on_remove)
 		mhi_soc_reset(mhi_cntrl);
 
-- 
2.51.0