diff --git a/drivers/pci/controller/dwc/pcie-dw-rockchip.c b/drivers/pci/controller/dwc/pcie-dw-rockchip.c index cdc9c5dc6d77..c6421475bdb2 100644 --- a/drivers/pci/controller/dwc/pcie-dw-rockchip.c +++ b/drivers/pci/controller/dwc/pcie-dw-rockchip.c @@ -1777,6 +1777,16 @@ static int rk_pcie_remove(struct platform_device *pdev) return 0; } +static void rk_pcie_shutdown(struct platform_device *pdev) +{ + struct device *dev = &pdev->dev; + struct rk_pcie *rk_pcie = dev_get_drvdata(dev); + + dev_dbg(rk_pcie->pci->dev, "shutdown...\n"); + rk_pcie_disable_ltssm(rk_pcie); + rk_pcie_writel_apb(rk_pcie, PCIE_CLIENT_INTR_MASK, 0xffffffff); +} + #ifdef CONFIG_PCIEASPM static void rk_pcie_downstream_dev_to_d0(struct rk_pcie *rk_pcie, bool enable) { @@ -2082,6 +2092,7 @@ static struct platform_driver rk_plat_pcie_driver = { }, .probe = rk_pcie_probe, .remove = rk_pcie_remove, + .shutdown = rk_pcie_shutdown, }; module_platform_driver(rk_plat_pcie_driver);