lkml.org 
[lkml]   [2018]   [Jul]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 13/66] bcm63xx_enet: correct clock usage
    Date
    4.9-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Jonas Gorski <jonas.gorski@gmail.com>

    commit 9c86b846ce02f7e35d7234cf090b80553eba5389 upstream.

    Check the return code of prepare_enable and change one last instance of
    enable only to prepare_enable. Also properly disable and release the
    clock in error paths and on remove for enetsw.

    Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Amit Pundir <amit.pundir@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/net/ethernet/broadcom/bcm63xx_enet.c | 31 ++++++++++++++++++++-------
    1 file changed, 23 insertions(+), 8 deletions(-)

    --- a/drivers/net/ethernet/broadcom/bcm63xx_enet.c
    +++ b/drivers/net/ethernet/broadcom/bcm63xx_enet.c
    @@ -1790,7 +1790,9 @@ static int bcm_enet_probe(struct platfor
    ret = PTR_ERR(priv->mac_clk);
    goto out;
    }
    - clk_prepare_enable(priv->mac_clk);
    + ret = clk_prepare_enable(priv->mac_clk);
    + if (ret)
    + goto out_put_clk_mac;

    /* initialize default and fetch platform data */
    priv->rx_ring_size = BCMENET_DEF_RX_DESC;
    @@ -1822,9 +1824,11 @@ static int bcm_enet_probe(struct platfor
    if (IS_ERR(priv->phy_clk)) {
    ret = PTR_ERR(priv->phy_clk);
    priv->phy_clk = NULL;
    - goto out_put_clk_mac;
    + goto out_disable_clk_mac;
    }
    - clk_prepare_enable(priv->phy_clk);
    + ret = clk_prepare_enable(priv->phy_clk);
    + if (ret)
    + goto out_put_clk_phy;
    }

    /* do minimal hardware init to be able to probe mii bus */
    @@ -1915,13 +1919,16 @@ out_free_mdio:
    out_uninit_hw:
    /* turn off mdc clock */
    enet_writel(priv, 0, ENET_MIISC_REG);
    - if (priv->phy_clk) {
    + if (priv->phy_clk)
    clk_disable_unprepare(priv->phy_clk);
    +
    +out_put_clk_phy:
    + if (priv->phy_clk)
    clk_put(priv->phy_clk);
    - }

    -out_put_clk_mac:
    +out_disable_clk_mac:
    clk_disable_unprepare(priv->mac_clk);
    +out_put_clk_mac:
    clk_put(priv->mac_clk);
    out:
    free_netdev(dev);
    @@ -2766,7 +2773,9 @@ static int bcm_enetsw_probe(struct platf
    ret = PTR_ERR(priv->mac_clk);
    goto out_unmap;
    }
    - clk_enable(priv->mac_clk);
    + ret = clk_prepare_enable(priv->mac_clk);
    + if (ret)
    + goto out_put_clk;

    priv->rx_chan = 0;
    priv->tx_chan = 1;
    @@ -2787,7 +2796,7 @@ static int bcm_enetsw_probe(struct platf

    ret = register_netdev(dev);
    if (ret)
    - goto out_put_clk;
    + goto out_disable_clk;

    netif_carrier_off(dev);
    platform_set_drvdata(pdev, dev);
    @@ -2796,6 +2805,9 @@ static int bcm_enetsw_probe(struct platf

    return 0;

    +out_disable_clk:
    + clk_disable_unprepare(priv->mac_clk);
    +
    out_put_clk:
    clk_put(priv->mac_clk);

    @@ -2827,6 +2839,9 @@ static int bcm_enetsw_remove(struct plat
    res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
    release_mem_region(res->start, resource_size(res));

    + clk_disable_unprepare(priv->mac_clk);
    + clk_put(priv->mac_clk);
    +
    free_netdev(dev);
    return 0;
    }

    \
     
     \ /
      Last update: 2018-07-20 14:58    [W:4.099 / U:0.196 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site