]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
bus: mhi: pci_generic: Implement PCI shutdown callback
authorLoic Poulain <loic.poulain@linaro.org>
Fri, 19 Mar 2021 15:50:37 +0000 (16:50 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 12 May 2021 06:39:37 +0000 (08:39 +0200)
[ Upstream commit 757072abe1c0b67cb226936c709291889658a222 ]

Deinit the device on shutdown to halt MHI/PCI operation on device
side. This change fixes floating device state with some hosts that
do not fully shutdown PCIe device when rebooting.

Signed-off-by: Loic Poulain <loic.poulain@linaro.org>
Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Link: https://lore.kernel.org/r/1616169037-7969-1-git-send-email-loic.poulain@linaro.org
Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/bus/mhi/pci_generic.c

index 356c19ce4bbf9ec46a07c27cad0f806a4a3167c5..ef549c695b55c6ab445378394b103bf8a510442e 100644 (file)
@@ -516,6 +516,12 @@ static void mhi_pci_remove(struct pci_dev *pdev)
        mhi_unregister_controller(mhi_cntrl);
 }
 
+static void mhi_pci_shutdown(struct pci_dev *pdev)
+{
+       mhi_pci_remove(pdev);
+       pci_set_power_state(pdev, PCI_D3hot);
+}
+
 static void mhi_pci_reset_prepare(struct pci_dev *pdev)
 {
        struct mhi_pci_device *mhi_pdev = pci_get_drvdata(pdev);
@@ -686,6 +692,7 @@ static struct pci_driver mhi_pci_driver = {
        .id_table       = mhi_pci_id_table,
        .probe          = mhi_pci_probe,
        .remove         = mhi_pci_remove,
+       .shutdown       = mhi_pci_shutdown,
        .err_handler    = &mhi_pci_err_handler,
        .driver.pm      = &mhi_pci_pm_ops
 };