@@ -2268,8 +2268,18 @@ static int __clk_speculate_rates(struct clk_core *core,
return ret;
}
-static void clk_calc_subtree(struct clk_core *core, unsigned long new_rate,
- struct clk_core *new_parent, u8 p_index)
+static void clk_calc_subtree(struct clk_core *core)
+{
+ struct clk_core *child;
+
+ core->new_rate = clk_recalc(core, core->parent->new_rate);
+
+ hlist_for_each_entry(child, &core->children, child_node)
+ clk_calc_subtree(child);
+}
+
+static void clk_calc_core_and_subtree(struct clk_core *core, unsigned long new_rate,
+ struct clk_core *new_parent, u8 p_index)
{
struct clk_core *child;
@@ -2281,10 +2291,8 @@ static void clk_calc_subtree(struct clk_core *core, unsigned long new_rate,
if (new_parent && new_parent != core->parent)
new_parent->new_child = core;
- hlist_for_each_entry(child, &core->children, child_node) {
- child->new_rate = clk_recalc(child, new_rate);
- clk_calc_subtree(child, child->new_rate, NULL, 0);
- }
+ hlist_for_each_entry(child, &core->children, child_node)
+ clk_calc_subtree(child);
}
/*
@@ -2368,7 +2376,7 @@ static struct clk_core *clk_calc_new_rates(struct clk_core *core,
top = clk_calc_new_rates(parent, best_parent_rate);
out:
- clk_calc_subtree(core, new_rate, parent, p_index);
+ clk_calc_core_and_subtree(core, new_rate, parent, p_index);
return top;
}
This helper does two different things: - it calculates the new clock frequency - as part of this task, it also handles a possible parent change - it walks the clock subtree to further update frequencies as well (but the parent changes are no longer relevant there). In order to ease the understanding of the next step, let's split this helper into: - clk_calc_core_and_subtree() which performs the top clock update (with the parents handling) and then calls... - clk_calc_subtree() (which calls itself recursively) in order to perform the subtree updates. There is no functional change intended. Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com> --- drivers/clk/clk.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-)