提交 c3944ec8 编写于 作者: M Maxime Ripard 提交者: Stephen Boyd

clk: Fix phase init check

Commit 27608786 ("clk: Bail out when calculating phase fails during
clk registration") introduced a check on error values at the time the
clock is registered to bail out when such an error occurs. However, it
doesn't check whether the returned value is positive which will happen
if the driver returns a non-zero phase. Since a phase is usually a
non-zero positive number this ends up returning something that isn't 0
to the caller of __clk_core_init(), making most clks fail to register
if they implement a phase clk op and return anything besides 0 for the
phase.

Fix this by returning the error if phase is less than zero or just
return zero if the phase is a positive number.

Fixes: 27608786 ("clk: Bail out when calculating phase fails during clk registration")
Signed-off-by: NMaxime Ripard <maxime@cerno.tech>
Link: https://lkml.kernel.org/r/20200225134248.919889-1-maxime@cerno.techReported-by: N"kernelci.org bot" <bot@kernelci.org>
[sboyd@kernel.org: Reword commit text to provide clarity]
Signed-off-by: NStephen Boyd <sboyd@kernel.org>
上级 27608786
......@@ -3344,6 +3344,7 @@ static int __clk_core_init(struct clk_core *core)
int ret;
struct clk_core *parent;
unsigned long rate;
int phase;
if (!core)
return -EINVAL;
......@@ -3457,8 +3458,9 @@ static int __clk_core_init(struct clk_core *core)
* Since a phase is by definition relative to its parent, just
* query the current clock phase, or just assume it's in phase.
*/
ret = clk_core_get_phase(core);
if (ret < 0) {
phase = clk_core_get_phase(core);
if (phase < 0) {
ret = phase;
pr_warn("%s: Failed to get phase for clk '%s'\n", __func__,
core->name);
goto out;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册
反馈
建议
客服 返回
顶部