summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorMaksim Kiselev <[email protected]>2025-08-29 11:25:00 +0300
committerTom Rini <[email protected]>2025-12-04 09:39:26 -0600
commitb493db39ea7fb1205d3a2df269352cb79874c1c7 (patch)
tree9ca993e2f0c29aea4e2d1eb7f1b2e56ea0db7743 /drivers
parent33750d8d88d519a6ec90da689776d8afccccf2c4 (diff)
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: ac30d90f336 ("clk: Ensure the parent clocks are enabled while reparenting") Signed-off-by: Maksim Kiselev <[email protected]> Reviewed-by: Miquel Raynal <[email protected]>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/clk/clk-uclass.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/drivers/clk/clk-uclass.c b/drivers/clk/clk-uclass.c
index 3dbe1ce9441..ae787b88510 100644
--- a/drivers/clk/clk-uclass.c
+++ b/drivers/clk/clk-uclass.c
@@ -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);