summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Wasim Nazir <quic_wasimn@quicinc.com> 2025-05-25 00:01:55 +0530
committer Alexander Koskovich <akoskovich@pm.me> 2025-09-14 20:56:33 -0400
commit411a812540bdd84546eb685d346673f6af2f6e9a (patch)
treeb65244a4d5e1de63e0a46c8d4218d673313100ad
parentba795890a396af944214f309b950e99b779fdddc (diff)
libfdt: overlay_merge: Fix copy_node for multiple phandles
Update local fixups property with multiple phandles if any. Change-Id: Ic8be4ad29f59ecef07f11a0592989c979e66ea81 Signed-off-by: Wasim Nazir <quic_wasimn@quicinc.com>
-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);
}