]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
PCI: mediatek: Release the resource when PCIe enable port fail
authorChuanjia Liu <Chuanjia.Liu@mediatek.com>
Mon, 31 Aug 2020 07:53:12 +0000 (15:53 +0800)
committerTom Rini <trini@konsulko.com>
Thu, 10 Sep 2020 19:32:09 +0000 (15:32 -0400)
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@mediatek.com>
Tested-by: Frank Wunderlich <frank-w@public-files.de>
drivers/pci/pcie_mediatek.c

index ad34f7c597ed857c5b25326f969237eb11c21941..55b6a40f254aa030137f6e4ee9bad19eff9736a8 100644 (file)
@@ -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);
 }