> gmac_clk_enable() enables the bulk clocks first and then the optional > PHY clock. If clk_prepare_enable() on the PHY clock fails, the function > returns without rolling back the bulk clocks, and bsp_priv->clk_enabled > stays false, so the later gmac_clk_enable(bsp_priv, false) becomes a > no-op and the bulk clock references are leaked. > > Add the missing clk_bulk_disable_unprepare() on that failure path. > > Fixes: ea449f7fa0bf ("net: ethernet: stmmac: dwmac-rk: rework optional clock handling") > Signed-off-by: Coia Prant Acked-by: Lorenzo Bianconi > --- > drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c > index 8d7042e689261..f3a98bd9d6ead 100644 > --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c > +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c > @@ -1163,7 +1163,10 @@ static int gmac_clk_enable(struct rk_priv_data *bsp_priv, bool enable) > > ret = clk_prepare_enable(bsp_priv->clk_phy); > if (ret) > + clk_bulk_disable_unprepare(bsp_priv->num_clks, > + bsp_priv->clks); > return ret; > + } > > rk_configure_io_clksel(bsp_priv); > rk_ungate_rmii_clock(bsp_priv); > -- > 2.47.3 > >