]> git.sur5r.net Git - u-boot/blobdiff - drivers/core/root.c
dm: core: add clocks node scan
[u-boot] / drivers / core / root.c
index d691d6ff947c905453e410e391b8cc9bb7e12445..757d109e57a37399cafb5091273cf726759ce07d 100644 (file)
@@ -312,8 +312,38 @@ int dm_scan_fdt(const void *blob, bool pre_reloc_only)
 #endif
        return dm_scan_fdt_node(gd->dm_root, blob, 0, pre_reloc_only);
 }
+#else
+static int dm_scan_fdt_node(struct udevice *parent, const void *blob,
+                           int offset, bool pre_reloc_only)
+{
+       return 0;
+}
 #endif
 
+int dm_extended_scan_fdt(const void *blob, bool pre_reloc_only)
+{
+       int node, ret;
+
+       ret = dm_scan_fdt(gd->fdt_blob, pre_reloc_only);
+       if (ret) {
+               debug("dm_scan_fdt() failed: %d\n", ret);
+               return ret;
+       }
+
+       /* bind fixed-clock */
+       node = ofnode_to_offset(ofnode_path("/clocks"));
+       /* if no DT "clocks" node, no need to go further */
+       if (node < 0)
+               return ret;
+
+       ret = dm_scan_fdt_node(gd->dm_root, gd->fdt_blob, node,
+                              pre_reloc_only);
+       if (ret)
+               debug("dm_scan_fdt_node() failed: %d\n", ret);
+
+       return ret;
+}
+
 __weak int dm_scan_other(bool pre_reloc_only)
 {
        return 0;
@@ -335,9 +365,9 @@ int dm_init_and_scan(bool pre_reloc_only)
        }
 
        if (CONFIG_IS_ENABLED(OF_CONTROL) && !CONFIG_IS_ENABLED(OF_PLATDATA)) {
-               ret = dm_scan_fdt(gd->fdt_blob, pre_reloc_only);
+               ret = dm_extended_scan_fdt(gd->fdt_blob, pre_reloc_only);
                if (ret) {
-                       debug("dm_scan_fdt() failed: %d\n", ret);
+                       debug("dm_extended_scan_dt() failed: %d\n", ret);
                        return ret;
                }
        }