Symptoms: I ran into an issue with the generic ccf_clk_divider clock driver. ccf_clk_divider assumes that the pointer passed to clk_divider_recalc_rate() (https://github.com/u-boot/u-boot/blob/master/drivers/clk/clk-divider.c#L80) is the same that was kzalloc()'d during clock registration. This assumption was breaking when calling clk_get_rate() on a clock retrieved via clk_get_by_index(), since clk_get_by_index() returns a copy of `struct clk` rather than the original pointer. For example, in https://github.com/u-boot/u-boot/blob/master/drivers/serial/serial_s5p.c#L131 the serial driver retrieves a clock using clk_get_by_index(), and then indirectly passes a pointer to stack-allocated `struct clk` to clk_divider_recalc_rate(), which breaks the ccf_clk_divider driver.
Description: The Clock API relies on the fact that you call it's functions with a pointer to the kzalloc()'d `struct clk`, and not a copy of it. To ensure this, existing clock drivers use ccf_clk_get_rate() and clk_get_by_id(). The clock rework path missed this fact, and instead was returning names and pointers for the root device. Testing: I tested this on Samsung S10 (exynos9820 SoC) with a custom clock driver and a device tree. Unfortunately, I don't own any other exynos devices supported by u-boot. chiffathefox (2): clk: clk_resolve_parent_clk(): resolve external clocks by id clk: exynos: do not reparent requested clock drivers/clk/clk-uclass.c | 7 ++++++- drivers/clk/exynos/clk.c | 1 - 2 files changed, 6 insertions(+), 2 deletions(-) -- 2.34.1 base-commit: d503633a36767d756c7de28305cf0de79440cbc0 branch: clk-rework-improvements

