
From: Simon Glass <sjg@chromium.org> Provide a simple function to set up the library, to avoid having to worry about the details. This requires the caller to know about global_data Signed-off-by: Simon Glass <sjg@chromium.org> --- arch/sandbox/cpu/start.c | 30 +++++++++++++++++++---- arch/sandbox/include/asm/u-boot-sandbox.h | 9 +++++++ test/ulib/ulib_test.c | 12 +++------ 3 files changed, 37 insertions(+), 14 deletions(-) diff --git a/arch/sandbox/cpu/start.c b/arch/sandbox/cpu/start.c index 59682b039e5..556d1985ccc 100644 --- a/arch/sandbox/cpu/start.c +++ b/arch/sandbox/cpu/start.c @@ -693,13 +693,14 @@ int sandbox_init(int argc, char *argv[], struct global_data *data) return 0; } -int sandbox_main(int argc, char *argv[]) +static int sandbox_flow(int argc, char *argv[], struct global_data *data, + uint flags) { - gd_t data; int ret; - memset(&data, '\0', sizeof(data)); - ret = sandbox_init(argc, argv, &data); + memset(data, '\0', sizeof(struct global_data)); + data->flags = flags; + ret = sandbox_init(argc, argv, data); if (ret) goto err; @@ -708,10 +709,29 @@ int sandbox_main(int argc, char *argv[]) board_init_r(gd->new_gd, 0); - /* NOTREACHED - board_init_r() does not return */ return 0; err: printf("Error %d\n", ret); return 1; } + +int sandbox_main(int argc, char *argv[]) +{ + gd_t data; + + sandbox_flow(argc, argv, &data, 0); + + /* NOTREACHED - board_init_r() does not return */ + return 1; +} + +int ulib_init_with_data(char *progname, struct global_data *data) +{ + char *argv[] = {progname, NULL}; + int ret; + + ret = sandbox_flow(1, argv, data, GD_FLG_ULIB); + + return ret; +} diff --git a/arch/sandbox/include/asm/u-boot-sandbox.h b/arch/sandbox/include/asm/u-boot-sandbox.h index 941f35f9e69..859c2f08b4c 100644 --- a/arch/sandbox/include/asm/u-boot-sandbox.h +++ b/arch/sandbox/include/asm/u-boot-sandbox.h @@ -75,4 +75,13 @@ int sandbox_init(int argc, char *argv[], struct global_data *data); */ int sandbox_main(int argc, char *argv[]); +/** + * ulib_init_with_data() - set up the U-Boot library + * + * @progname: Program name to use, typically argv[0] + * @data: Global data (must remain valid until the program exits) + * Return: 0 if OK, -ve error code on error + */ +int ulib_init_with_data(char *progname, struct global_data *data); + #endif /* _U_BOOT_SANDBOX_H_ */ diff --git a/test/ulib/ulib_test.c b/test/ulib/ulib_test.c index 621bcd49be9..e1e863712a8 100644 --- a/test/ulib/ulib_test.c +++ b/test/ulib/ulib_test.c @@ -23,15 +23,9 @@ int main(int argc, char *argv[]) printf("Calling U-Boot initialization via shared library...\n"); - /* init global data */ - memset(&data, '\0', sizeof(data)); - data.flags = GD_FLG_ULIB; - - ret = sandbox_init(argc, argv, &data); - - /* Do pre- and post-relocation init */ - board_init_f(gd->flags); - board_init_r(data.new_gd, 0); + ret = ulib_init_with_data(argv[0], &data); + if (ret) + return 1; return ret; } -- 2.43.0