lkml.org 
[lkml]   [2022]   [Feb]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v8 2/8] PCI: imx6: Add the error propagation from host_init
    Date
    Since there is error return check of the host_init callback, add error
    check to imx6_pcie_deassert_core_reset() function, and change the
    function type accordingly.

    Signed-off-by: Richard Zhu <hongxing.zhu@nxp.com>
    Reviewed-by: Lucas Stach <l.stach@pengutronix.de>
    ---
    drivers/pci/controller/dwc/pci-imx6.c | 24 ++++++++++++++++--------
    1 file changed, 16 insertions(+), 8 deletions(-)

    diff --git a/drivers/pci/controller/dwc/pci-imx6.c b/drivers/pci/controller/dwc/pci-imx6.c
    index 5582ee1b420a..3ca2eef39617 100644
    --- a/drivers/pci/controller/dwc/pci-imx6.c
    +++ b/drivers/pci/controller/dwc/pci-imx6.c
    @@ -546,24 +546,24 @@ static void imx7d_pcie_wait_for_phy_pll_lock(struct imx6_pcie *imx6_pcie)
    dev_err(dev, "PCIe PLL lock timeout\n");
    }

    -static void imx6_pcie_deassert_core_reset(struct imx6_pcie *imx6_pcie)
    +static int imx6_pcie_deassert_core_reset(struct imx6_pcie *imx6_pcie)
    {
    struct dw_pcie *pci = imx6_pcie->pci;
    struct device *dev = pci->dev;
    - int ret;
    + int ret, err;

    if (imx6_pcie->vpcie && !regulator_is_enabled(imx6_pcie->vpcie)) {
    ret = regulator_enable(imx6_pcie->vpcie);
    if (ret) {
    dev_err(dev, "failed to enable vpcie regulator: %d\n",
    ret);
    - return;
    + return ret;
    }
    }

    - ret = imx6_pcie_clk_enable(imx6_pcie);
    - if (ret) {
    - dev_err(dev, "unable to enable pcie clocks\n");
    + err = imx6_pcie_clk_enable(imx6_pcie);
    + if (err) {
    + dev_err(dev, "unable to enable pcie clocks: %d\n", err);
    goto err_clks;
    }

    @@ -622,7 +622,7 @@ static void imx6_pcie_deassert_core_reset(struct imx6_pcie *imx6_pcie)
    break;
    }

    - return;
    + return 0;

    err_clks:
    if (imx6_pcie->vpcie && regulator_is_enabled(imx6_pcie->vpcie) > 0) {
    @@ -631,6 +631,7 @@ static void imx6_pcie_deassert_core_reset(struct imx6_pcie *imx6_pcie)
    dev_err(dev, "failed to disable vpcie regulator: %d\n",
    ret);
    }
    + return err;
    }

    static void imx6_pcie_configure_type(struct imx6_pcie *imx6_pcie)
    @@ -882,11 +883,18 @@ static int imx6_pcie_start_link(struct dw_pcie *pci)
    static int imx6_pcie_host_init(struct pcie_port *pp)
    {
    struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
    + struct device *dev = pci->dev;
    struct imx6_pcie *imx6_pcie = to_imx6_pcie(pci);
    + int ret;

    imx6_pcie_assert_core_reset(imx6_pcie);
    imx6_pcie_init_phy(imx6_pcie);
    - imx6_pcie_deassert_core_reset(imx6_pcie);
    + ret = imx6_pcie_deassert_core_reset(imx6_pcie);
    + if (ret < 0) {
    + dev_err(dev, "pcie host init failed: %d.\n", ret);
    + return ret;
    + }
    +
    imx6_setup_phy_mpll(imx6_pcie);

    return 0;
    --
    2.25.1
    \
     
     \ /
      Last update: 2022-02-25 04:54    [W:4.450 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site