summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCan Peng <pengcan@kylinos.cn>2026-07-22 15:56:25 +0800
committerDaniel Lezcano <daniel.lezcano@kernel.org>2026-08-07 17:18:50 +0200
commitfcbf9964b67a6d6704c50ed28daa24c3b164f01c (patch)
treea388403c7b536464c5caa11037a70223d3fba907
parent6b73e78462ad420a61ef0bede534c0fecb0d7ba6 (diff)
downloadlinux-stable-fcbf9964b67a6d6704c50ed28daa24c3b164f01c.tar.gz
linux-stable-fcbf9964b67a6d6704c50ed28daa24c3b164f01c.zip
thermal/drivers/qoriq: Disable clock on resume failure
qoriq_tmu_resume() enables the TMU clock before clearing the power-down bit and enabling monitoring. If either register update fails, the function returns with the clock still enabled. This leaves the clock enable count unbalanced after a failed resume. Disable the clock on those failure paths before returning the error. Fixes: 51904045d4aa ("thermal: qoriq: Add clock operations") Cc: stable@vger.kernel.org Signed-off-by: Can Peng <pengcan@kylinos.cn> Signed-off-by: Daniel Lezcano <daniel.lezcano@kernel.org> Link: https://patch.msgid.link/20260722075625.452684-1-pengcan@kylinos.cn
-rw-r--r--drivers/thermal/qoriq_thermal.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/drivers/thermal/qoriq_thermal.c b/drivers/thermal/qoriq_thermal.c
index 35439ec5f8bc..297724e81593 100644
--- a/drivers/thermal/qoriq_thermal.c
+++ b/drivers/thermal/qoriq_thermal.c
@@ -415,11 +415,20 @@ static int qoriq_tmu_resume(struct device *dev)
if (data->ver > TMU_VER1) {
ret = regmap_clear_bits(data->regmap, REGS_TMR, TMR_CMD);
if (ret)
- return ret;
+ goto disable_clk;
}
/* Enable monitoring */
- return regmap_update_bits(data->regmap, REGS_TMR, TMR_ME, TMR_ME);
+ ret = regmap_update_bits(data->regmap, REGS_TMR, TMR_ME, TMR_ME);
+ if (ret)
+ goto disable_clk;
+
+ return 0;
+
+disable_clk:
+ clk_disable_unprepare(data->clk);
+
+ return ret;
}
static DEFINE_SIMPLE_DEV_PM_OPS(qoriq_tmu_pm_ops,