There should be one single entry in the OF world, so that the way we parse the DT is always the same. make sure this is the case by avoid calling of_parse_phandle_with_args() from of_clk_get_parent_name(). This is even more relevant as we currently fail to parse clock-ranges. As a result, it seems to be safer to directly call of_parse_clkspec() there, but doing so implies that we do not try the "clock-ranges" path if we already found a "clocks" property..
Suggested-by: Stephen Boyd <[email protected]> Fixes: 4472287a3b2f5 ("clk: Introduce of_clk_get_hw_from_clkspec()") Signed-off-by: Miquel Raynal (Schneider Electric) <[email protected]> Reviewed-by: Brian Masney <[email protected]> --- drivers/clk/clk.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c index 7d63d81ebc09..45f5d7a4ccc1 100644 --- a/drivers/clk/clk.c +++ b/drivers/clk/clk.c @@ -5219,6 +5219,8 @@ static int of_parse_clkspec(const struct device_node *np, int index, * has a "clock-ranges" property, then we can try one of its * clocks. */ + if (of_property_present(np, "clocks")) + break; np = np->parent; if (np && !of_property_present(np, "clock-ranges")) break; @@ -5364,8 +5366,7 @@ const char *of_clk_get_parent_name(const struct device_node *np, int index) int count; struct clk *clk; - rc = of_parse_phandle_with_args(np, "clocks", "#clock-cells", index, - &clkspec); + rc = of_parse_clkspec(np, index, NULL, &clkspec); if (rc) return NULL; -- 2.54.0

