summaryrefslogtreecommitdiff
path: root/libfdt/fdt_overlay.c
diff options
context:
space:
mode:
Diffstat (limited to 'libfdt/fdt_overlay.c')
-rw-r--r--libfdt/fdt_overlay.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/libfdt/fdt_overlay.c b/libfdt/fdt_overlay.c
index 644d16b..90b9e05 100644
--- a/libfdt/fdt_overlay.c
+++ b/libfdt/fdt_overlay.c
@@ -710,7 +710,7 @@ static int copy_node(void *fdt, void *fdto, int fdt_parent,
}
fdt_for_each_property_offset(prop, fdto, fdto_child) {
- int ret;
+ int ret, fdt_len = 0;
const char *value, *pname;
void *p;
@@ -718,6 +718,9 @@ static int copy_node(void *fdt, void *fdto, int fdt_parent,
if (!value)
return len;
+ if (fdt_getprop(fdt, parent, pname, &fdt_len))
+ len += fdt_len;
+
ret = fdt_setprop_placeholder(fdt, parent, pname, len, &p);
vvdprintf
("%s: +setprop: In fdt-parent-node(%s), add fdto-prop(%s), "
@@ -726,6 +729,13 @@ static int copy_node(void *fdt, void *fdto, int fdt_parent,
if (ret)
return ret;
+ if (fdt_len > 0) {
+ p = (char *)p + fdt_len;
+ len -= fdt_len;
+ vvdprintf("%s: fdto-prop(%s): Copy only new values\n",
+ __func__, pname);
+ }
+
memcpy(p, value, len);
}