diff options
| author | Chen-Yu Tsai <wenst@chromium.org> | 2026-03-24 08:19:54 +0300 |
|---|---|---|
| committer | Bjorn Helgaas <bhelgaas@google.com> | 2026-03-25 21:47:42 +0300 |
| commit | eddbac092e5f1edcf502056348d98acb811dbb31 (patch) | |
| tree | 5b2b3f67bf7e3036b8d451a885c75a508e0ec132 | |
| parent | 98752193de5b3306b6815cba5a217337c2a93876 (diff) | |
| download | linux-eddbac092e5f1edcf502056348d98acb811dbb31.tar.xz | |
PCI: mediatek-gen3: Move mtk_pcie_setup_irq() out of mtk_pcie_setup()
mtk_pcie_setup_irq() sets up the IRQ domains for PCI INTx and MSI, and
chains them to the controller's interrupt. It doesn't touch the PCIe
controller itself.
Move mtk_pcie_setup_irq() out of mtk_pcie_setup(), do it earlier so there's
nothing to clean up if it fails, and add an error message if it does fail.
Reorder mtk_pcie_irq_teardown() in the remove callback to follow. Also
create an error path in the probe function.
Suggested-by: Bjorn Helgaas <helgaas@kernel.org>
Signed-off-by: Chen-Yu Tsai <wenst@chromium.org>
Signed-off-by: Manivannan Sadhasivam <mani@kernel.org>
[bhelgaas: commit log]
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
Link: https://patch.msgid.link/20260324052002.4072430-3-wenst@chromium.org
| -rw-r--r-- | drivers/pci/controller/pcie-mediatek-gen3.c | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/drivers/pci/controller/pcie-mediatek-gen3.c b/drivers/pci/controller/pcie-mediatek-gen3.c index 1939cac995b5..04ae195d36c2 100644 --- a/drivers/pci/controller/pcie-mediatek-gen3.c +++ b/drivers/pci/controller/pcie-mediatek-gen3.c @@ -1152,10 +1152,6 @@ static int mtk_pcie_setup(struct mtk_gen3_pcie *pcie) if (err) goto err_setup; - err = mtk_pcie_setup_irq(pcie); - if (err) - goto err_setup; - return 0; err_setup: @@ -1181,21 +1177,28 @@ static int mtk_pcie_probe(struct platform_device *pdev) pcie->soc = device_get_match_data(dev); platform_set_drvdata(pdev, pcie); + err = mtk_pcie_setup_irq(pcie); + if (err) + return dev_err_probe(dev, err, "Failed to setup IRQ domains\n"); + err = mtk_pcie_setup(pcie); if (err) - return err; + goto err_tear_down_irq; host->ops = &mtk_pcie_ops; host->sysdata = pcie; err = pci_host_probe(host); - if (err) { - mtk_pcie_irq_teardown(pcie); - mtk_pcie_power_down(pcie); - return err; - } + if (err) + goto err_power_down_pcie; return 0; + +err_power_down_pcie: + mtk_pcie_power_down(pcie); +err_tear_down_irq: + mtk_pcie_irq_teardown(pcie); + return err; } static void mtk_pcie_remove(struct platform_device *pdev) @@ -1208,8 +1211,8 @@ static void mtk_pcie_remove(struct platform_device *pdev) pci_remove_root_bus(host->bus); pci_unlock_rescan_remove(); - mtk_pcie_irq_teardown(pcie); mtk_pcie_power_down(pcie); + mtk_pcie_irq_teardown(pcie); } static void mtk_pcie_irq_save(struct mtk_gen3_pcie *pcie) |
