[Concept,09/15] ulib: Provide an init function for sandbox

Message ID 20250905170132.182249-10-sjg@u-boot.org
State New
Headers
Series ulib: Provide test programs and documentation |

Commit Message

Simon Glass Sept. 5, 2025, 5:01 p.m. UTC
  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(-)
  

Patch

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;
 }