]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
spl: Jump to image at end of board_init_r
authorJonas Karlman <jonas@kwiboo.se>
Wed, 27 Sep 2023 21:44:13 +0000 (21:44 +0000)
committerTom Rini <trini@konsulko.com>
Mon, 9 Oct 2023 19:24:31 +0000 (15:24 -0400)
spl_board_prepare_for_boot() is not called before jumping/invoking atf,
optee, opensbi or linux images.

Jump to image at the end of board_init_r() to fix this.

Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
Reviewed-by: Simon Glass <sjg@chromium.org>
common/spl/spl.c

index 0cf887fd6262d9afbbd8b02af927aa4a64490e86..66eeea41a34be8358429ead3a0965a9d463cf7d8 100644 (file)
@@ -643,6 +643,8 @@ void board_init_r(gd_t *dummy1, ulong dummy2)
                BOOT_DEVICE_NONE,
                BOOT_DEVICE_NONE,
        };
+       typedef void __noreturn (*jump_to_image_t)(struct spl_image_info *);
+       jump_to_image_t jump_to_image = &jump_to_image_no_args;
        struct spl_image_info spl_image;
        int ret, os;
 
@@ -731,20 +733,20 @@ void board_init_r(gd_t *dummy1, ulong dummy2)
        } else if (CONFIG_IS_ENABLED(ATF) && os == IH_OS_ARM_TRUSTED_FIRMWARE) {
                debug("Jumping to U-Boot via ARM Trusted Firmware\n");
                spl_fixup_fdt(spl_image_fdt_addr(&spl_image));
-               spl_invoke_atf(&spl_image);
+               jump_to_image = &spl_invoke_atf;
        } else if (CONFIG_IS_ENABLED(OPTEE_IMAGE) && os == IH_OS_TEE) {
                debug("Jumping to U-Boot via OP-TEE\n");
                spl_board_prepare_for_optee(spl_image_fdt_addr(&spl_image));
-               jump_to_image_optee(&spl_image);
+               jump_to_image = &jump_to_image_optee;
        } else if (CONFIG_IS_ENABLED(OPENSBI) && os == IH_OS_OPENSBI) {
                debug("Jumping to U-Boot via RISC-V OpenSBI\n");
-               spl_invoke_opensbi(&spl_image);
+               jump_to_image = &spl_invoke_opensbi;
        } else if (CONFIG_IS_ENABLED(OS_BOOT) && os == IH_OS_LINUX) {
                debug("Jumping to Linux\n");
                if (IS_ENABLED(CONFIG_SPL_OS_BOOT))
                        spl_fixup_fdt((void *)SPL_PAYLOAD_ARGS_ADDR);
                spl_board_prepare_for_linux();
-               jump_to_image_linux(&spl_image);
+               jump_to_image = &jump_to_image_linux;
        } else {
                debug("Unsupported OS image.. Jumping nevertheless..\n");
        }
@@ -784,7 +786,7 @@ void board_init_r(gd_t *dummy1, ulong dummy2)
        }
 
        spl_board_prepare_for_boot();
-       jump_to_image_no_args(&spl_image);
+       jump_to_image(&spl_image);
 }
 
 /*