diff --git a/drivers/pci/controller/pcie-rockchip-host.c b/drivers/pci/controller/pcie-rockchip-host.c index ca2857dd7092..4b3230fcca77 100644 --- a/drivers/pci/controller/pcie-rockchip-host.c +++ b/drivers/pci/controller/pcie-rockchip-host.c @@ -1291,6 +1291,7 @@ static int rockchip_pcie_remove(struct platform_device *pdev) struct device *dev = &pdev->dev; struct rockchip_pcie *rockchip = dev_get_drvdata(dev); u32 status1, status2; + u32 status; status1 = rockchip_pcie_read(rockchip, PCIE_CLIENT_BASIC_STATUS1); status2 = rockchip_pcie_read(rockchip, PCIE_CLIENT_DEBUG_OUT_0); @@ -1306,6 +1307,17 @@ static int rockchip_pcie_remove(struct platform_device *pdev) pci_unmap_iospace(rockchip->io); irq_domain_remove(rockchip->irq_domain); + /* disable link state */ + status = rockchip_pcie_read(rockchip, PCIE_RC_CONFIG_LCS); + status |= BIT(4); + rockchip_pcie_write(rockchip, status, PCIE_RC_CONFIG_LCS); + + mdelay(1); + + status = rockchip_pcie_read(rockchip, PCIE_RC_CONFIG_LCS); + status &= ~BIT(4); + rockchip_pcie_write(rockchip, status, PCIE_RC_CONFIG_LCS); + rockchip_pcie_deinit_phys(rockchip); rockchip_pcie_disable_clocks(rockchip);