lib: libufdt: Support to modify properties under root node.
Add support to modify properties under the root node.
Change-Id: I6d68d501eee3570083c7f117f77ccd5842e483a2
diff --git a/lib/libufdt/ufdt_overlay.c b/lib/libufdt/ufdt_overlay.c
index 2f7830f..4a909a0 100644
--- a/lib/libufdt/ufdt_overlay.c
+++ b/lib/libufdt/ufdt_overlay.c
@@ -482,6 +482,29 @@
return 0;
}
+static int ufdt_overlay_root_node(struct ufdt *tree,
+ struct ufdt *overlay_tree) {
+ struct ufdt_node *target_node = ufdt_get_node_by_path(tree, "/");
+ struct ufdt_node *overlay_node = ufdt_get_node_by_path(overlay_tree, "/");
+ struct ufdt_node **it_prop;
+ struct ufdt_node *target_prop;
+
+ if(!target_node)
+ return 0;
+
+ for_each_prop(it_prop, overlay_node) {
+ target_prop =
+ ufdt_node_get_property_by_name(target_node, name_of(*it_prop));
+
+ if (target_prop) {
+ if(merge_ufdt_into(target_prop, *it_prop))
+ return -1;
+ }
+ }
+
+ return 0;
+}
+
/*
* Handle __local_fixups__ node in overlay DTB
* The __local_fixups__ format we expect is
@@ -542,6 +565,9 @@
return -1;
}
+ if(ufdt_overlay_root_node(main_tree, overlay_tree))
+ return -1;
+
if (ufdt_overlay_local_ref_update(main_tree, overlay_tree) < 0) {
dto_error("failed to perform local fixups in overlay\n");
return -1;