sandbox: Generalise SPL booting

At present sandbox only supports jumping to a file, to get to the next
U-Boot phase. We want to support other methods, so update the code to
use an enum for the method. Also use the

Use board_boot_order() to set the order, so we can add more options.
Also add the MMC methods into the BOOT_DEVICE enum so that booting
from MMC can be supported.

Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Simon Glass 2022-10-20 18:23:01 -06:00 committed by Tom Rini
parent 494e66d3a9
commit 830690d2ed
3 changed files with 32 additions and 11 deletions

View file

@ -49,13 +49,13 @@ void board_init_f(ulong flag)
preloader_console_init();
}
u32 spl_boot_device(void)
void board_boot_order(u32 *spl_boot_list)
{
return BOOT_DEVICE_BOARD;
spl_boot_list[0] = BOOT_DEVICE_BOARD;
}
static int spl_board_load_image(struct spl_image_info *spl_image,
struct spl_boot_device *bootdev)
static int spl_board_load_file(struct spl_image_info *spl_image,
struct spl_boot_device *bootdev)
{
char fname[256];
int ret;
@ -74,10 +74,11 @@ static int spl_board_load_image(struct spl_image_info *spl_image,
if (!spl_image->arg)
return log_msg_ret("exec", -ENOMEM);
strcpy(spl_image->arg, fname);
spl_image->flags = SPL_SANDBOXF_ARG_IS_FNAME;
return 0;
}
SPL_LOAD_IMAGE_METHOD("sandbox", 9, BOOT_DEVICE_BOARD, spl_board_load_image);
SPL_LOAD_IMAGE_METHOD("sandbox", 9, BOOT_DEVICE_BOARD, spl_board_load_file);
void spl_board_init(void)
{
@ -96,13 +97,21 @@ void spl_board_init(void)
void __noreturn jump_to_image_no_args(struct spl_image_info *spl_image)
{
const char *fname = spl_image->arg;
switch (spl_image->flags) {
case SPL_SANDBOXF_ARG_IS_FNAME: {
const char *fname = spl_image->arg;
if (fname) {
os_fd_restore();
os_spl_to_uboot(fname);
} else {
printf("No filename provided for U-Boot\n");
if (fname) {
os_fd_restore();
os_spl_to_uboot(fname);
} else {
log_err("No filename provided for U-Boot\n");
}
break;
}
default:
log_err("Invalid flags\n");
break;
}
hang();
}

View file

@ -7,6 +7,9 @@
#define __asm_spl_h
enum {
BOOT_DEVICE_MMC1,
BOOT_DEVICE_MMC2,
BOOT_DEVICE_MMC2_2,
BOOT_DEVICE_BOARD,
};

View file

@ -228,6 +228,15 @@ static inline const char *spl_phase_prefix(enum u_boot_phase phase)
# define SPL_TPL_PROMPT ""
#endif
/**
* enum spl_sandbox_flags - flags for sandbox's use of spl_image_info->flags
*
* @SPL_SANDBOXF_ARG_IS_FNAME: arg is the filename to jump to (default)
*/
enum spl_sandbox_flags {
SPL_SANDBOXF_ARG_IS_FNAME = 0,
};
struct spl_image_info {
const char *name;
u8 os;