Commit 6b7fd312 authored by Tero Kristo's avatar Tero Kristo Committed by Lokesh Vutla
Browse files

clk: fix set_rate to clean up cached rates for the hierarchy



Clock rates are cached within the individual clock nodes, and right now
if one changes a clock rate somewhere in the middle of the tree, none
of its child clocks notice the change. To fix this, clear up all the
cached rates for us and our child clocks.
Signed-off-by: default avatarTero Kristo <t-kristo@ti.com>
Signed-off-by: default avatarTero Kristo <kristo@kernel.org>
parent 1e1fab0b
......@@ -568,6 +568,22 @@ ulong clk_round_rate(struct clk *clk, ulong rate)
return ops->round_rate(clk, rate);
}
static void clk_clean_rate_cache(struct clk *clk)
{
struct udevice *child_dev;
struct clk *clkp;
if (!clk)
return;
clk->rate = 0;
list_for_each_entry(child_dev, &clk->dev->child_head, sibling_node) {
clkp = dev_get_clk_ptr(child_dev);
clk_clean_rate_cache(clkp);
}
}
ulong clk_set_rate(struct clk *clk, ulong rate)
{
const struct clk_ops *ops;
......@@ -580,6 +596,9 @@ ulong clk_set_rate(struct clk *clk, ulong rate)
if (!ops->set_rate)
return -ENOSYS;
/* Clean up cached rates for us and all child clocks */
clk_clean_rate_cache(clk);
return ops->set_rate(clk, rate);
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment