net: sun8i_emac: Use consistent clock bitfield definitions
[oweals/u-boot.git] / drivers / core / root.c
index aa5ca4087a592643ad9bbd3f4865633ef334a476..7d257ea887dd482b803c94836fa6375f84d228a7 100644 (file)
@@ -9,6 +9,7 @@
 #include <common.h>
 #include <errno.h>
 #include <fdtdec.h>
+#include <log.h>
 #include <malloc.h>
 #include <linux/libfdt.h>
 #include <dm/device.h>
@@ -203,15 +204,6 @@ static int dm_scan_fdt_live(struct udevice *parent,
        int ret = 0, err;
 
        for (np = node_parent->child; np; np = np->sibling) {
-               /* "chosen" node isn't a device itself but may contain some: */
-               if (!strcmp(np->name, "chosen")) {
-                       pr_debug("parsing subnodes of \"chosen\"\n");
-
-                       err = dm_scan_fdt_live(parent, np, pre_reloc_only);
-                       if (err && !ret)
-                               ret = err;
-                       continue;
-               }
 
                if (!of_device_is_available(np)) {
                        pr_debug("   - ignoring disabled device\n");
@@ -256,21 +248,6 @@ static int dm_scan_fdt_node(struct udevice *parent, const void *blob,
             offset = fdt_next_subnode(blob, offset)) {
                const char *node_name = fdt_get_name(blob, offset, NULL);
 
-               /*
-                * The "chosen" and "firmware" nodes aren't devices
-                * themselves but may contain some:
-                */
-               if (!strcmp(node_name, "chosen") ||
-                   !strcmp(node_name, "firmware")) {
-                       pr_debug("parsing subnodes of \"%s\"\n", node_name);
-
-                       err = dm_scan_fdt_node(parent, blob, offset,
-                                              pre_reloc_only);
-                       if (err && !ret)
-                               ret = err;
-                       continue;
-               }
-
                if (!fdtdec_get_is_enabled(blob, offset)) {
                        pr_debug("   - ignoring disabled device\n");
                        continue;
@@ -314,15 +291,9 @@ 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
 
-static int dm_scan_fdt_ofnode_path(const char *path, bool pre_reloc_only)
+static int dm_scan_fdt_ofnode_path(const void *blob, const char *path,
+                                  bool pre_reloc_only)
 {
        ofnode node;
 
@@ -334,13 +305,18 @@ static int dm_scan_fdt_ofnode_path(const char *path, bool pre_reloc_only)
        if (of_live_active())
                return dm_scan_fdt_live(gd->dm_root, node.np, pre_reloc_only);
 #endif
-       return dm_scan_fdt_node(gd->dm_root, gd->fdt_blob, node.of_offset,
+       return dm_scan_fdt_node(gd->dm_root, blob, node.of_offset,
                                pre_reloc_only);
 }
 
 int dm_extended_scan_fdt(const void *blob, bool pre_reloc_only)
 {
-       int ret;
+       int ret, i;
+       const char * const nodes[] = {
+               "/chosen",
+               "/clocks",
+               "/firmware"
+       };
 
        ret = dm_scan_fdt(blob, pre_reloc_only);
        if (ret) {
@@ -348,18 +324,19 @@ int dm_extended_scan_fdt(const void *blob, bool pre_reloc_only)
                return ret;
        }
 
-       ret = dm_scan_fdt_ofnode_path("/clocks", pre_reloc_only);
-       if (ret) {
-               debug("scan for /clocks failed: %d\n", ret);
-               return ret;
+       /* Some nodes aren't devices themselves but may contain some */
+       for (i = 0; i < ARRAY_SIZE(nodes); i++) {
+               ret = dm_scan_fdt_ofnode_path(blob, nodes[i], pre_reloc_only);
+               if (ret) {
+                       debug("dm_scan_fdt() scan for %s failed: %d\n",
+                             nodes[i], ret);
+                       return ret;
+               }
        }
 
-       ret = dm_scan_fdt_ofnode_path("/firmware", pre_reloc_only);
-       if (ret)
-               debug("scan for /firmware failed: %d\n", ret);
-
        return ret;
 }
+#endif
 
 __weak int dm_scan_other(bool pre_reloc_only)
 {