On 1/20/26 11:45 AM, [email protected] wrote:
Hello Jamie,
2489 debug("%s loaded at 0x%08lx len=0x%08lx\n", 2490 uname, ovload, ovlen); 2491 ov = map_sysmem(ovload, ovlen); 2492 2493 ovcopylen = ALIGN(fdt_totalsize(ov), SZ_4K); 2494 ovcopy = memalign(8, ovcopylen); 2495 if (!ovcopy) { 2496 printf("failed to duplicate DTO before application\n"); 2497 fdt_noffset = -ENOMEM; 2498 goto out; 2499 } 2500 2501 err = fdt_open_into(ov, ovcopy, ovcopylen); 2502 if (err < 0) { 2503 printf("failed on fdt_open_into for DTO\n"); This is where it fails. Is $ov or $ovcopy 4-byte aligned ? Enable the debug() print at the beginning (or #define DEBUG at the beginning of this file) to find out. If $ov is 4-byte aligned, try to generate your fitImage with "mkimage ... -E -B 8 ..." , does that make any difference ?Thank you for your suggestions. I followed your advice and investigated the alignment of the overlay buffer. The error code returned by fdt_open_into was FDT_ERR_ALIGNMENT (-19), confirming that the overlay was not sufficiently aligned for the updated libfdt. I modified our Buildroot post-image.sh script to generate the FIT image using the suggested arguments. With the -B 8 option, all blobs in the FIT image are now 8-byte aligned. This resolved the alignment error, and device tree overlays are now applied successfully in U-Boot.
But this is not the fix. Which parameter of fdt_open_into() is unaligned, the ov or ovcopy ?

