]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
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)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 14 Dec 2024 18:51:02 +0000 (19:51 +0100)
[ Upstream commit e81361f6cf9bf4a1848b0813bc4becb2250870b8 ]

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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/clk/imx/clk-scu.c

index 89a914a15d62d6fcc8cdf4371f2fa34d238e60c6..7e2b09f7bbc50e0a737626c8daa5c758f6e795d1 100644 (file)
@@ -577,7 +577,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),