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:
Maksim Kiselev
2025-08-29 11:25:00 +03:00
committed by Tom Rini
parent 33750d8d88
commit b493db39ea

View File

@@ -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);