clk: imx: clk-scu: fix clk enable state save and restore
authorDong Aisheng <aisheng.dong@nxp.com>
Sun, 27 Oct 2024 12:00:10 +0000 (20:00 +0800)
committerAbel Vesa <abel.vesa@linaro.org>
Tue, 5 Nov 2024 10:02:22 +0000 (12:02 +0200)
The scu clk_ops only inplements prepare() and unprepare() callback.
Saving the clock state during suspend by checking clk_hw_is_enabled()
is not safe as it's possible that some device drivers may only
disable the clocks without unprepare. Then the state retention will not
work for such clocks.

Fixing it by checking clk_hw_is_prepared() which is more reasonable
and safe.

Fixes: d0409631f466 ("clk: imx: scu: add suspend/resume support")
Reviewed-by: Peng Fan <peng.fan@nxp.com>
Tested-by: Carlos Song <carlos.song@nxp.com>
Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com>
Link: https://lore.kernel.org/r/20241027-imx-clk-v1-v3-4-89152574d1d7@nxp.com
Signed-off-by: Abel Vesa <abel.vesa@linaro.org>
drivers/clk/imx/clk-scu.c

index b1dd0c0..b27186a 100644 (file)
@@ -596,7 +596,7 @@ static int __maybe_unused imx_clk_scu_suspend(struct device *dev)
                clk->rate = clk_scu_recalc_rate(&clk->hw, 0);
        else
                clk->rate = clk_hw_get_rate(&clk->hw);
-       clk->is_enabled = clk_hw_is_enabled(&clk->hw);
+       clk->is_enabled = clk_hw_is_prepared(&clk->hw);
 
        if (clk->parent)
                dev_dbg(dev, "save parent %s idx %u\n", clk_hw_get_name(clk->parent),