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:
parent
65f3b1f992
commit
27028f186d
@ -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)
|
||||
|
@ -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();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user