diff options
author | 2025-05-25 00:01:55 +0530 | |
---|---|---|
committer | 2025-09-14 20:56:33 -0400 | |
commit | 411a812540bdd84546eb685d346673f6af2f6e9a (patch) | |
tree | b65244a4d5e1de63e0a46c8d4218d673313100ad | |
parent | ba795890a396af944214f309b950e99b779fdddc (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.c | 12 |
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); } |