]> git.baikalelectronics.ru Git - uboot.git/commitdiff
clk: fix assigned-clocks to pass with deferring provider
authorTero Kristo <t-kristo@ti.com>
Fri, 11 Jun 2021 08:45:11 +0000 (11:45 +0300)
committerLokesh Vutla <lokeshvutla@ti.com>
Fri, 11 Jun 2021 11:04:52 +0000 (16:34 +0530)
If a clock provider is not ready for assigning default rates/parents
during its probe, it may return -EPROBE_DEFER directly from xlate.
Handle this special case properly by skipping the entry and adjusting the
return value to pass. The defaults will be handled properly in post probe
phase then.

Signed-off-by: Tero Kristo <t-kristo@ti.com>
Signed-off-by: Tero Kristo <kristo@kernel.org>
drivers/clk/clk-uclass.c

index 451d7da001ad7f8ff7352b88bc3038a8ded01ad4..815f7bfe987b3888717ac01176d1c65c34130a09 100644 (file)
@@ -241,6 +241,15 @@ static int clk_set_default_parents(struct udevice *dev, int stage)
 
                ret = clk_get_by_indexed_prop(dev, "assigned-clocks",
                                              index, &clk);
+               /*
+                * If the clock provider is not ready yet, let it handle
+                * the re-programming later.
+                */
+               if (ret == -EPROBE_DEFER) {
+                       ret = 0;
+                       continue;
+               }
+
                if (ret) {
                        debug("%s: could not get assigned clock %d for %s\n",
                              __func__, index, dev_read_name(dev));
@@ -309,6 +318,15 @@ static int clk_set_default_rates(struct udevice *dev, int stage)
 
                ret = clk_get_by_indexed_prop(dev, "assigned-clocks",
                                              index, &clk);
+               /*
+                * If the clock provider is not ready yet, let it handle
+                * the re-programming later.
+                */
+               if (ret == -EPROBE_DEFER) {
+                       ret = 0;
+                       continue;
+               }
+
                if (ret) {
                        dev_dbg(dev,
                                "could not get assigned clock %d (err = %d)\n",