clk: fix crash on clk_set_rate clean rate cache
It's currently possible to make the bootloader crash on calling
clk_set_rate caused by the loop in clk_clean_rate_cache.
The loop assume that every child of the clock node are also clock
device but this is not always the case. For example it's common for a
clock to bind to a reset device or also expose a syscon if the clock
register map is also used to apply special configuration.
In such case, on accessing a device as a clock, the bootloader crash. To
correctly handle this, check if the child device is actually a clock and
ignore otherwise.
Fixes: 6b7fd3128f
("clk: fix set_rate to clean up cached rates for the hierarchy")
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
Reviewed-by: Michael Trimarchi <michael@amarulasolutions.com>
This commit is contained in:

committed by
Tom Rini

parent
a6da395b5d
commit
aa96cda0a5
@@ -572,6 +572,9 @@ static void clk_clean_rate_cache(struct clk *clk)
|
||||
clk->rate = 0;
|
||||
|
||||
list_for_each_entry(child_dev, &clk->dev->child_head, sibling_node) {
|
||||
if (device_get_uclass_id(child_dev) != UCLASS_CLK)
|
||||
continue;
|
||||
|
||||
clkp = dev_get_clk_ptr(child_dev);
|
||||
clk_clean_rate_cache(clkp);
|
||||
}
|
||||
|
Reference in New Issue
Block a user