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;