summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonas Karlman <jonas@kwiboo.se>2023-09-27 21:44:13 +0000
committerTom Rini <trini@konsulko.com>2023-10-09 15:24:31 -0400
commit6826c432e35115bbdafc17062733f5030b7f8366 (patch)
tree9a79cf3e151f145ed96241e87130cb833fcc4e73
parenta60d9686f21fdf2549858ca0e728bcef545d73d2 (diff)
downloadu-boot-6826c432e35115bbdafc17062733f5030b7f8366.tar.gz
u-boot-6826c432e35115bbdafc17062733f5030b7f8366.tar.bz2
u-boot-6826c432e35115bbdafc17062733f5030b7f8366.zip
spl: Jump to image at end of board_init_r
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>
-rw-r--r--common/spl/spl.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/common/spl/spl.c b/common/spl/spl.c
index 0cf887fd62..66eeea41a3 100644
--- a/common/spl/spl.c
+++ b/common/spl/spl.c
@@ -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);
}
/*