clk: Skip clamping when rounding if there's no boundaries
Commit 948fb0969eae ("clk: Always clamp the rounded rate") recently started to clamp the request rate in the clk_rate_request passed as an argument of clk_core_determine_round_nolock() with the min_rate and max_rate fields of that same request. While the clk_rate_requests created by the framework itself always have those fields set, some drivers will create it themselves and don't always fill min_rate and max_rate. In such a case, we end up clamping the rate with a minimum and maximum of 0, thus always rounding the rate to 0. Let's skip the clamping if both min_rate and max_rate are set to 0 and complain so that it gets fixed. Fixes: 948fb0969eae ("clk: Always clamp the rounded rate") Signed-off-by: Maxime Ripard <maxime@cerno.tech> Link: https://lore.kernel.org/r/20220816112530.1837489-4-maxime@cerno.tech Tested-by: Linux Kernel Functional Testing <lkft@linaro.org> Tested-by: Naresh Kamboju <naresh.kamboju@linaro.org> Signed-off-by: Stephen Boyd <sboyd@kernel.org>
This commit is contained in:
parent
d773882232
commit
facf949b2e
@ -1341,7 +1341,19 @@ static int clk_core_determine_round_nolock(struct clk_core *core,
|
||||
if (!core)
|
||||
return 0;
|
||||
|
||||
req->rate = clamp(req->rate, req->min_rate, req->max_rate);
|
||||
/*
|
||||
* Some clock providers hand-craft their clk_rate_requests and
|
||||
* might not fill min_rate and max_rate.
|
||||
*
|
||||
* If it's the case, clamping the rate is equivalent to setting
|
||||
* the rate to 0 which is bad. Skip the clamping but complain so
|
||||
* that it gets fixed, hopefully.
|
||||
*/
|
||||
if (!req->min_rate && !req->max_rate)
|
||||
pr_warn("%s: %s: clk_rate_request has initialized min or max rate.\n",
|
||||
__func__, core->name);
|
||||
else
|
||||
req->rate = clamp(req->rate, req->min_rate, req->max_rate);
|
||||
|
||||
/*
|
||||
* At this point, core protection will be disabled
|
||||
|
Loading…
x
Reference in New Issue
Block a user