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;