lkml.org 
[lkml]   [2020]   [Nov]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v3 2/2] PCI: brcmstb: use reset/rearm instead of deassert/assert
    Date
    The Brcmstb PCIe RC uses a reset control "rescal" for certain chips.  This
    reset implements a "pulse reset" so it matches more the reset/rearm
    calls instead of the deassert/assert calls.

    Also, add reset_control calls in suspend/resume functions.

    Signed-off-by: Jim Quinlan <james.quinlan@broadcom.com>
    ---
    drivers/pci/controller/pcie-brcmstb.c | 19 +++++++++++++------
    1 file changed, 13 insertions(+), 6 deletions(-)

    diff --git a/drivers/pci/controller/pcie-brcmstb.c b/drivers/pci/controller/pcie-brcmstb.c
    index bea86899bd5d..b9745ac2ee0b 100644
    --- a/drivers/pci/controller/pcie-brcmstb.c
    +++ b/drivers/pci/controller/pcie-brcmstb.c
    @@ -1138,6 +1138,7 @@ static int brcm_pcie_suspend(struct device *dev)

    brcm_pcie_turn_off(pcie);
    ret = brcm_phy_stop(pcie);
    + reset_control_rearm(pcie->rescal);
    clk_disable_unprepare(pcie->clk);

    return ret;
    @@ -1153,9 +1154,13 @@ static int brcm_pcie_resume(struct device *dev)
    base = pcie->base;
    clk_prepare_enable(pcie->clk);

    + ret = reset_control_reset(pcie->rescal);
    + if (ret)
    + goto err0;
    +
    ret = brcm_phy_start(pcie);
    if (ret)
    - goto err;
    + goto err1;

    /* Take bridge out of reset so we can access the SERDES reg */
    pcie->bridge_sw_init_set(pcie, 0);
    @@ -1170,14 +1175,16 @@ static int brcm_pcie_resume(struct device *dev)

    ret = brcm_pcie_setup(pcie);
    if (ret)
    - goto err;
    + goto err1;

    if (pcie->msi)
    brcm_msi_set_regs(pcie->msi);

    return 0;

    -err:
    +err1:
    + reset_control_rearm(pcie->rescal);
    +err0:
    clk_disable_unprepare(pcie->clk);
    return ret;
    }
    @@ -1187,7 +1194,7 @@ static void __brcm_pcie_remove(struct brcm_pcie *pcie)
    brcm_msi_remove(pcie);
    brcm_pcie_turn_off(pcie);
    brcm_phy_stop(pcie);
    - reset_control_assert(pcie->rescal);
    + reset_control_rearm(pcie->rescal);
    clk_disable_unprepare(pcie->clk);
    }

    @@ -1262,13 +1269,13 @@ static int brcm_pcie_probe(struct platform_device *pdev)
    return PTR_ERR(pcie->rescal);
    }

    - ret = reset_control_deassert(pcie->rescal);
    + ret = reset_control_reset(pcie->rescal);
    if (ret)
    dev_err(&pdev->dev, "failed to deassert 'rescal'\n");

    ret = brcm_phy_start(pcie);
    if (ret) {
    - reset_control_assert(pcie->rescal);
    + reset_control_rearm(pcie->rescal);
    clk_disable_unprepare(pcie->clk);
    return ret;
    }
    --
    2.17.1
    [unhandled content-type:application/pkcs7-signature]
    \
     
     \ /
      Last update: 2020-11-20 21:39    [W:3.195 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site