From 451162c6bb2fc9c6788ed5b8b85ccc162e00a97c Mon Sep 17 00:00:00 2001 From: Shawn Lin Date: Sat, 3 Sep 2022 11:49:50 +0800 Subject: [PATCH] PCIe: dw: rockchip: Init and free msi whenever needed Signed-off-by: Shawn Lin Change-Id: Ic7bc74c1a05b06c45f83bdb7056a8c4b206dd4dd --- drivers/pci/controller/dwc/pcie-dw-rockchip.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/drivers/pci/controller/dwc/pcie-dw-rockchip.c b/drivers/pci/controller/dwc/pcie-dw-rockchip.c index 04fe01ef55ac..0dce4b6688d9 100644 --- a/drivers/pci/controller/dwc/pcie-dw-rockchip.c +++ b/drivers/pci/controller/dwc/pcie-dw-rockchip.c @@ -684,6 +684,9 @@ static int rk_pcie_host_init(struct pcie_port *pp) ret = rk_pcie_establish_link(pci); + if (pp->msi_irq > 0) + dw_pcie_msi_init(pp); + return ret; } @@ -1747,6 +1750,9 @@ static int __maybe_unused rockchip_dw_pcie_suspend(struct device *dev) gpiod_set_value_cansleep(rk_pcie->rst_gpio, 0); ret = rk_pcie_disable_power(rk_pcie); + if (rk_pcie->pci->pp.msi_irq > 0) + dw_pcie_free_msi(&rk_pcie->pci->pp); + return ret; } @@ -1805,6 +1811,9 @@ static int __maybe_unused rockchip_dw_pcie_resume(struct device *dev) goto err; } + if (rk_pcie->pci->pp.msi_irq > 0) + dw_pcie_msi_init(&rk_pcie->pci->pp); + if (std_rc) goto std_rc_done;