spl: riscv: opensbi: Error on misaligned FDT
authorSam Edwards <cfsworks@gmail.com>
Sat, 15 Mar 2025 22:18:12 +0000 (15:18 -0700)
committerTom Rini <trini@konsulko.com>
Wed, 2 Apr 2025 20:33:50 +0000 (14:33 -0600)
libfdt 1.6.1+ requires the FDT to be 8-byte aligned and returns an error
if not. OpenSBI 1.0+ includes this version of libfdt and will also
reject misaligned FDTs.

However, OpenSBI cannot indicate the error to the user: since it cannot
access the serial console, it can only silently hang. This proved very
difficult to diagnose without proper debugging facilities. Therefore,
give the U-Boot SPL, which *can* print error messages, an additional
check for proper FDT alignment. Hopefully this saves a lot of
development cycles if another developer encounters alignment problems.

Signed-off-by: Sam Edwards <CFSworks@gmail.com>
common/spl/spl_opensbi.c

index 5a26d7c..0ed6afe 100644 (file)
@@ -57,6 +57,11 @@ void __noreturn spl_invoke_opensbi(struct spl_image_info *spl_image)
                hang();
        }
 
+       if (!IS_ALIGNED((uintptr_t)spl_image->fdt_addr, 8)) {
+               pr_err("SPL image loaded an improperly-aligned device tree\n");
+               hang();
+       }
+
        /*
         * Originally, u-boot-spl will place DTB directly after the kernel,
         * but the size of the kernel did not include the BSS section, which