]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
Revert "clk: Fix invalid execution of clk_set_rate"
authorJohan Hovold <johan+linaro@kernel.org>
Mon, 2 Dec 2024 10:06:21 +0000 (11:06 +0100)
committerStephen Boyd <sboyd@kernel.org>
Tue, 3 Dec 2024 01:20:12 +0000 (17:20 -0800)
This reverts commit 25f1c96a0e841013647d788d4598e364e5c2ebb7.

The offending commit results in errors like

cpu cpu0: _opp_config_clk_single: failed to set clock rate: -22

spamming the logs on the Lenovo ThinkPad X13s and other Qualcomm
machines when cpufreq tries to update the CPUFreq HW Engine clocks.

As mentioned in commit 4370232c727b ("cpufreq: qcom-hw: Add CPU clock
provider support"):

[T]he frequency supplied by the driver is the actual frequency
that comes out of the EPSS/OSM block after the DCVS operation.
This frequency is not same as what the CPUFreq framework has set
but it is the one that gets supplied to the CPUs after
throttling by LMh.

which seems to suggest that the driver relies on the previous behaviour
of clk_set_rate().

Since this affects many Qualcomm machines, let's revert for now.

Fixes: 25f1c96a0e84 ("clk: Fix invalid execution of clk_set_rate")
Reported-by: Aishwarya TCV <aishwarya.tcv@arm.com>
Link: https://lore.kernel.org/all/e2d83e57-ad07-411b-99f6-a4fc3c4534fa@arm.com/
Cc: Chuan Liu <chuan.liu@amlogic.com>
Cc: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
Link: https://lore.kernel.org/r/20241202100621.29209-1-johan+linaro@kernel.org
Signed-off-by: Stephen Boyd <sboyd@kernel.org>
drivers/clk/clk.c

index bdc6e5b90da581b3b9cbedcde3366c880a7dfd92..9b45fa005030f56e1478b9742715ebcde898133f 100644 (file)
@@ -2530,7 +2530,7 @@ static int clk_core_set_rate_nolock(struct clk_core *core,
        rate = clk_core_req_round_rate_nolock(core, req_rate);
 
        /* bail early if nothing to do */
-       if (rate == clk_core_get_rate_recalc(core))
+       if (rate == clk_core_get_rate_nolock(core))
                return 0;
 
        /* fail on a direct rate set of a protected provider */