Merge git://git.denx.de/u-boot-fsl-qoriq
[oweals/u-boot.git] / drivers / core / root.c
index d691d6ff947c905453e410e391b8cc9bb7e12445..976e2c4fdd9d6b3842f7db8a2781306a3739690f 100644 (file)
@@ -227,7 +227,7 @@ static int dm_scan_fdt_live(struct udevice *parent,
                    !of_find_property(np, "u-boot,dm-pre-reloc", NULL))
                        continue;
                if (!of_device_is_available(np)) {
-                       dm_dbg("   - ignoring disabled device\n");
+                       pr_debug("   - ignoring disabled device\n");
                        continue;
                }
                err = lists_bind_fdt(parent, np_to_ofnode(np), NULL);
@@ -270,7 +270,7 @@ static int dm_scan_fdt_node(struct udevice *parent, const void *blob,
                    !dm_fdt_pre_reloc(blob, offset))
                        continue;
                if (!fdtdec_get_is_enabled(blob, offset)) {
-                       dm_dbg("   - ignoring disabled device\n");
+                       pr_debug("   - ignoring disabled device\n");
                        continue;
                }
                err = lists_bind_fdt(parent, offset_to_ofnode(offset), NULL);
@@ -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;
                }
        }