On Thu, Nov 13, 2025 at 03:29:51PM +0100, Marek Vasut wrote: > In case the 'fdt_high' environment variable is set to ~0 and DT is > at non-8-byte aligned offset, warn users about the dangers of the > fdt_high usage. This will hopefully lead to removal of most of the > fdt_high ~0 usage over time. > > Signed-off-by: Marek Vasut <[email protected]> > --- > Cc: "João Paulo Gonçalves" <[email protected]> > Cc: Ilias Apalodimas <[email protected]> > Cc: Sam Protsenko <[email protected]> > Cc: Sughosh Ganu <[email protected]> > Cc: Tom Rini <[email protected]> > Cc: [email protected] > --- > boot/image-fdt.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/boot/image-fdt.c b/boot/image-fdt.c > index 3f0ac54f76f..e88525a3846 100644 > --- a/boot/image-fdt.c > +++ b/boot/image-fdt.c > @@ -189,6 +189,10 @@ int boot_relocate_fdt(char **of_flat_tree, ulong > *of_size) > /* All ones means use fdt in place */ > of_start = fdt_blob; > addr = map_to_sysmem(fdt_blob); > + if (addr & 7) { > + printf("WARNING: The 'fdt_high' environment > variable is set to ~0 and DT is at non-8-byte aligned address.\nWARNING: This > system will likely fail to boot. Unset 'fdt_high' environment variable and > submit fix upstream.\n"); > + } > + > err = lmb_alloc_mem(LMB_MEM_ALLOC_ADDR, 0, &addr, > of_len, LMB_NONE); > if (err) {
I think we need to yell about it sooner. Today (and for quite some years) if you pass a 4 byte and not 8 byte aligned DT to Linux, it fails to boot or breaks in loud and odd ways. This has in turn lead to much time spent and some of our older threads with the libfdt folks years ago. So I think we need something earlier in code where we're seeing that fdt_high is set to ~0 and that's where we say "Stop doing this, it will be removed soon". Historically it was either used to work-around problems that don't exist anymore, or as a misguided boot time optimization (this is different from disabling initrd relocation, which can be noticeable). -- Tom
signature.asc
Description: PGP signature

