[PATCH v2 27/45] dm: core: Avoid creating a name property when unflattening

Simon Glass sjg at chromium.org
Wed Sep 7 04:27:15 CEST 2022


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 at chromium.org>
---

(no changes since v1)

 drivers/core/ofnode.c | 2 +-
 include/dm/ofnode.h   | 2 +-
 lib/of_live.c         | 7 ++++++-
 3 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/drivers/core/ofnode.c b/drivers/core/ofnode.c
index 71b2c4f8c9d..d0716b79f9d 100644
--- a/drivers/core/ofnode.c
+++ b/drivers/core/ofnode.c
@@ -294,7 +294,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);
 }
diff --git a/include/dm/ofnode.h b/include/dm/ofnode.h
index 81e332f697e..ac9babbb5b5 100644
--- a/include/dm/ofnode.h
+++ b/include/dm/ofnode.h
@@ -426,7 +426,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);
 
diff --git a/lib/of_live.c b/lib/of_live.c
index 30cae9ab881..1b5964d09a9 100644
--- a/lib/of_live.c
+++ b/lib/of_live.c
@@ -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)
-- 
2.37.2.789.g6183377224-goog



More information about the U-Boot mailing list