dm: core: Avoid creating a name property when unflattening
authorSimon Glass <sjg@chromium.org>
Wed, 7 Sep 2022 02:27:15 +0000 (20:27 -0600)
committerTom Rini <trini@konsulko.com>
Thu, 29 Sep 2022 20:11:14 +0000 (16:11 -0400)
The current implementation creates a 'name' value for every node. This
is not needed for the latest device tree format, which includes a name in
the node header.

Adjust the code to point the name at the node header instead.

Also simplify ofnode_get_name(), now that we can rely on it to set the
name correctly. Update the comment to make it clear what name the root
node has.

Signed-off-by: Simon Glass <sjg@chromium.org>
drivers/core/ofnode.c
include/dm/ofnode.h
lib/of_live.c

index f9c9ca1..154c7b2 100644 (file)
@@ -356,7 +356,7 @@ const char *ofnode_get_name(ofnode node)
        }
 
        if (ofnode_is_np(node))
-               return strrchr(node.np->full_name, '/') + 1;
+               return node.np->name;
 
        return fdt_get_name(gd->fdt_blob, ofnode_to_offset(node), NULL);
 }
index 9dcc1fe..1e23a40 100644 (file)
@@ -466,7 +466,7 @@ ofnode ofnode_get_parent(ofnode node);
  * ofnode_get_name() - get the name of a node
  *
  * @node: valid node to look up
- * Return: name of node
+ * Return: name of node (for the root node this is "")
  */
 const char *ofnode_get_name(ofnode node);
 
index 30cae9a..1b5964d 100644 (file)
@@ -97,6 +97,10 @@ static void *unflatten_dt_node(const void *blob, void *mem, int *poffset,
                char *fn;
 
                fn = (char *)np + sizeof(*np);
+               if (new_format) {
+                       np->name = pathp;
+                       has_name = 1;
+               }
                np->full_name = fn;
                if (new_format) {
                        /* rebuild full path for new format */
@@ -202,7 +206,8 @@ static void *unflatten_dt_node(const void *blob, void *mem, int *poffset,
        }
        if (!dryrun) {
                *prev_pp = NULL;
-               np->name = of_get_property(np, "name", NULL);
+               if (!has_name)
+                       np->name = of_get_property(np, "name", NULL);
                np->type = of_get_property(np, "device_type", NULL);
 
                if (!np->name)