By doing so of_new_node does not depend on the global root_node
anymore.

Signed-off-by: Sascha Hauer <s.ha...@pengutronix.de>
---
 drivers/of/base.c |   17 ++++++++++++-----
 1 file changed, 12 insertions(+), 5 deletions(-)

diff --git a/drivers/of/base.c b/drivers/of/base.c
index fd9b8e1..d134f1e 100644
--- a/drivers/of/base.c
+++ b/drivers/of/base.c
@@ -946,7 +946,7 @@ int of_unflatten_dtb(struct fdt_header *fdt)
        const struct fdt_property *fdt_prop;
        const char *pathp;
        int depth = 10000;
-       struct device_node *node = NULL, *n;
+       struct device_node *node = NULL, *n, *root = NULL;
        struct property *p;
 
        nodeoffset = fdt_path_offset(fdt, "/");
@@ -959,6 +959,10 @@ int of_unflatten_dtb(struct fdt_header *fdt)
                return -EINVAL;
        }
 
+       root = of_new_node(NULL, NULL);
+       if (!root)
+               return -ENOMEM;
+
        while (1) {
                tag = fdt_next_tag(fdt, nodeoffset, &nextoffset);
                switch (tag) {
@@ -968,11 +972,14 @@ int of_unflatten_dtb(struct fdt_header *fdt)
                        if (pathp == NULL)
                                pathp = "/* NULL pointer error */";
 
-                       n = of_find_child(node, pathp);
-                       if (n) {
-                               node = n;
+                       if (!node) {
+                               node = root;
                        } else {
-                               node = of_new_node(node, pathp);
+                               if ((n = of_find_child(node, pathp))) {
+                                       node = n;
+                               } else {
+                                       node = of_new_node(node, pathp);
+                               }
                        }
                        break;
                case FDT_END_NODE:
-- 
1.7.10.4


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

Reply via email to