mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2026-06-13 15:03:58 +03:00
clk: Only enable the parent clock if the clock was enabled before reparenting
The current implementation of clk_set_parent() unconditionally enables
the new parent clock, even if the target clock was not previously enabled.
To avoid this implicit behavior, this patch adds a check for whether
the target clock has been enabled before parent enabling..
Fixes: ac30d90f33 ("clk: Ensure the parent clocks are enabled while reparenting")
Signed-off-by: Maksim Kiselev <bigunclemax@gmail.com>
Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
This commit is contained in:
@@ -631,10 +631,12 @@ int clk_set_parent(struct clk *clk, struct clk *parent)
|
||||
if (!ops->set_parent)
|
||||
return -ENOSYS;
|
||||
|
||||
ret = clk_enable(parent);
|
||||
if (ret && ret != -ENOSYS) {
|
||||
printf("Cannot enable parent %s\n", parent->dev->name);
|
||||
return ret;
|
||||
if (clk->enable_count) {
|
||||
ret = clk_enable(parent);
|
||||
if (ret && ret != -ENOSYS) {
|
||||
printf("Cannot enable parent %s\n", parent->dev->name);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
ret = ops->set_parent(clk, parent);
|
||||
|
||||
Reference in New Issue
Block a user