[PATCH] PCI: mediatek: Release the resource when PCIe enable port fail

Chuanjia Liu Chuanjia.Liu at mediatek.com
Mon Aug 31 09:53:12 CEST 2020


On the mt7623 platform, if one port enable fail and other port
enable succeed. It will hang on when using pci enum
because the resource was not released correctly.

Signed-off-by: Chuanjia Liu <Chuanjia.Liu at mediatek.com>
Tested-by: Frank Wunderlich <frank-w at public-files.de>
---
 drivers/pci/pcie_mediatek.c | 19 +++++++++++++------
 1 file changed, 13 insertions(+), 6 deletions(-)

diff --git a/drivers/pci/pcie_mediatek.c b/drivers/pci/pcie_mediatek.c
index ad34f7c597..55b6a40f25 100644
--- a/drivers/pci/pcie_mediatek.c
+++ b/drivers/pci/pcie_mediatek.c
@@ -443,29 +443,36 @@ static void mtk_pcie_enable_port(struct mtk_pcie_port *port)
 
 	err = clk_enable(&port->sys_ck);
 	if (err)
-		goto exit;
+		goto err_sys_clk;
 
 	err = reset_assert(&port->reset);
 	if (err)
-		goto exit;
+		goto err_reset;
 
 	err = reset_deassert(&port->reset);
 	if (err)
-		goto exit;
+		goto err_reset;
 
 	err = generic_phy_init(&port->phy);
 	if (err)
-		goto exit;
+		goto err_phy_init;
 
 	err = generic_phy_power_on(&port->phy);
 	if (err)
-		goto exit;
+		goto err_phy_on;
 
 	if (!mtk_pcie_startup_port(port))
 		return;
 
 	pr_err("Port%d link down\n", port->slot);
-exit:
+
+	generic_phy_power_off(&port->phy);
+err_phy_on:
+	generic_phy_exit(&port->phy);
+err_phy_init:
+err_reset:
+	clk_disable(&port->sys_ck);
+err_sys_clk:
 	mtk_pcie_port_free(port);
 }
 
-- 
2.18.0


More information about the U-Boot mailing list