]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
net: dsa: bcm_sf2: fix missing clk_disable_unprepare() in error paths
authorAnas Iqbal <mohd.abd.6602@gmail.com>
Wed, 18 Mar 2026 08:42:12 +0000 (08:42 +0000)
committerJakub Kicinski <kuba@kernel.org>
Thu, 19 Mar 2026 16:26:40 +0000 (09:26 -0700)
Smatch reports:
drivers/net/dsa/bcm_sf2.c:997 bcm_sf2_sw_resume() warn:
'priv->clk' from clk_prepare_enable() not released on lines: 983,990.

The clock enabled by clk_prepare_enable() in bcm_sf2_sw_resume()
is not released if bcm_sf2_sw_rst() or bcm_sf2_cfp_resume() fails.

Add the missing clk_disable_unprepare() calls in the error paths
to properly release the clock resource.

Fixes: e9ec5c3bd238 ("net: dsa: bcm_sf2: request and handle clocks")
Reviewed-by: Jonas Gorski <jonas.gorski@gmail.com>
Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
Signed-off-by: Anas Iqbal <mohd.abd.6602@gmail.com>
Link: https://patch.msgid.link/20260318084212.1287-1-mohd.abd.6602@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/dsa/bcm_sf2.c

index 960685596093b67235625b5741a5f7ceaaf719e6..de3efa3ce9a75fc38dcef706087347552dd53f49 100644 (file)
@@ -980,15 +980,19 @@ static int bcm_sf2_sw_resume(struct dsa_switch *ds)
        ret = bcm_sf2_sw_rst(priv);
        if (ret) {
                pr_err("%s: failed to software reset switch\n", __func__);
+               if (!priv->wol_ports_mask)
+                       clk_disable_unprepare(priv->clk);
                return ret;
        }
 
        bcm_sf2_crossbar_setup(priv);
 
        ret = bcm_sf2_cfp_resume(ds);
-       if (ret)
+       if (ret) {
+               if (!priv->wol_ports_mask)
+                       clk_disable_unprepare(priv->clk);
                return ret;
-
+       }
        if (priv->hw_params.num_gphy == 1)
                bcm_sf2_gphy_enable_set(ds, true);