sandbox: Boot in U-Boot through the standard call

Most architectures use jump_to_image_no_args() to jump from SPL to U-Boot.
At present sandbox is special in that it jumps in its
spl_board_load_image() call. This is not strictly correct, and means that
sandbox misses out some parts of board_init_r(), just as calling
bloblist_finish(), for example.

Change spl_board_load_image() to just identify the filename to boot, and
implement jump_to_image_no_args() to actually jump to it.

Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Simon Glass 2018-11-15 18:44:08 -07:00 committed by Tom Rini
parent 65f3b1f992
commit 27028f186d
2 changed files with 20 additions and 14 deletions

View File

@ -666,8 +666,11 @@ static int os_jump_to_file(const char *fname)
err = execv(fname, argv);
os_free(argv);
if (err)
if (err) {
perror("Unable to run image");
printf("Image filename '%s'\n", mem_fname);
return err;
}
return unlink(fname);
}
@ -747,17 +750,7 @@ int os_find_u_boot(char *fname, int maxlen)
int os_spl_to_uboot(const char *fname)
{
struct sandbox_state *state = state_get_current();
char *argv[state->argc + 1];
int ret;
memcpy(argv, state->argv, sizeof(char *) * (state->argc + 1));
argv[0] = (char *)fname;
ret = execv(fname, argv);
if (ret)
return ret;
return unlink(fname);
return os_jump_to_file(fname);
}
void os_localtime(struct rtc_time *rt)

View File

@ -37,8 +37,12 @@ static int spl_board_load_image(struct spl_image_info *spl_image,
return ret;
}
/* Hopefully this will not return */
return os_spl_to_uboot(fname);
/* Set up spl_image to boot from jump_to_image_no_args() */
spl_image->arg = strdup(fname);
if (!spl_image->arg)
return log_msg_ret("Setup exec filename", -ENOMEM);
return 0;
}
SPL_LOAD_IMAGE_METHOD("sandbox", 0, BOOT_DEVICE_BOARD, spl_board_load_image);
@ -60,3 +64,12 @@ void spl_board_init(void)
;
}
}
void __noreturn jump_to_image_no_args(struct spl_image_info *spl_image)
{
const char *fname = spl_image->arg;
os_fd_restore();
os_spl_to_uboot(fname);
hang();
}