Re: [PATCH net] net: ethernet: stmmac: dwmac-rk: fix bulk clock leak when the PHY clock fails
From: Heiko Stübner
Date: Sun Sep 20 2026 - 17:59:29 EST
Am Samstag, 19. September 2026, 19:42:23 Mitteleuropäische Sommerzeit schrieb Coia Prant:
> 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 <coiaprant@xxxxxxxxx>
Thanks for catching this
Reviewed-by: Heiko Stuebner <heiko@xxxxxxxxx>
> ---
> 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);
>