[PATCH] dt:overlay: fix operation with multiple overlays

Enrico Scholz enrico.scholz at sigma-chemnitz.de
Wed Feb 10 09:27:02 EST 2021


When applying multiple devicetree overlays the 'phandle' attribute
must be updated too.  Else, every overlay will be adjusted to start
with the same base which causes duplicate phandles.

Signed-off-by: Enrico Scholz <enrico.scholz at sigma-chemnitz.de>
---
 drivers/of/base.c    | 1 +
 drivers/of/overlay.c | 4 +++-
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/of/base.c b/drivers/of/base.c
index edb0a8e71a0f..c88803d8ab4b 100644
--- a/drivers/of/base.c
+++ b/drivers/of/base.c
@@ -2385,6 +2385,7 @@ struct device_node *of_copy_node(struct device_node *parent, const struct device
 	struct property *pp;
 
 	np = of_new_node(parent, other->name);
+	np->phandle = other->phandle;
 
 	list_for_each_entry(pp, &other->properties, list)
 		of_new_property(np, pp->name, pp->value, pp->length);
diff --git a/drivers/of/overlay.c b/drivers/of/overlay.c
index 92d20b9a247e..79f8b6dfdbcf 100644
--- a/drivers/of/overlay.c
+++ b/drivers/of/overlay.c
@@ -66,8 +66,10 @@ static int of_overlay_apply(struct device_node *target,
 
 	for_each_child_of_node(overlay, child) {
 		target_child = of_get_child_by_name(target, child->name);
-		if (!target_child)
+		if (!target_child) {
 			target_child = of_new_node(target, child->name);
+			target_child->phandle = child->phandle;
+		}
 		if (!target_child)
 			return -ENOMEM;
 
-- 
2.29.2




More information about the barebox mailing list