sandbox: Update os_find_u_boot() to find the .img file
authorSimon Glass <sjg@chromium.org>
Mon, 8 Mar 2021 00:35:13 +0000 (17:35 -0700)
committerTom Rini <trini@konsulko.com>
Fri, 12 Mar 2021 14:57:31 +0000 (09:57 -0500)
At present this function can only locate the u-boot ELF file. For SPL it
is handy to be able to locate u-boot.img since this is what would normally
be loaded by SPL.

Add another argument to allow this to be selected.

While we are here, update the function to load SPL when running in TPL,
since that is the next stage.

Signed-off-by: Simon Glass <sjg@chromium.org>
arch/sandbox/cpu/os.c
arch/sandbox/cpu/spl.c
include/os.h

index f5000e64966a03c3d65e41c9fd39b90890ff738a..2d9583c17ca70b1d639635a6623a2e2d1bb5243a 100644 (file)
@@ -777,7 +777,7 @@ int os_jump_to_image(const void *dest, int size)
        return os_jump_to_file(fname);
 }
 
-int os_find_u_boot(char *fname, int maxlen)
+int os_find_u_boot(char *fname, int maxlen, bool use_img)
 {
        struct sandbox_state *state = state_get_current();
        const char *progname = state->argv[0];
@@ -801,8 +801,8 @@ int os_find_u_boot(char *fname, int maxlen)
                        return 0;
                }
 
-               /* Look for 'u-boot-tpl' in the tpl/ directory */
-               p = strstr(fname, "/tpl/");
+               /* Look for 'u-boot-spl' in the spl/ directory */
+               p = strstr(fname, "/spl/");
                if (p) {
                        p[1] = 's';
                        fd = os_open(fname, O_RDONLY);
@@ -829,6 +829,8 @@ int os_find_u_boot(char *fname, int maxlen)
        if (p) {
                /* Remove the "spl" characters */
                memmove(p, p + 4, strlen(p + 4) + 1);
+               if (use_img)
+                       strcat(p, ".img");
                fd = os_open(fname, O_RDONLY);
                if (fd >= 0) {
                        close(fd);
index ce5aae87fb6affceefdf4a632d07a4023b31b754..f82b0d3de16138c88f6b4917a4e8a0f379b0bdf0 100644 (file)
@@ -37,7 +37,7 @@ static int spl_board_load_image(struct spl_image_info *spl_image,
        char fname[256];
        int ret;
 
-       ret = os_find_u_boot(fname, sizeof(fname));
+       ret = os_find_u_boot(fname, sizeof(fname), false);
        if (ret) {
                printf("(%s not found, error %d)\n", fname, ret);
                return ret;
index d2a4afeca0f06a12a01265e8515d31a56dc66f66..77d8bd89d0f7497728a2736ceffdd87239805ce8 100644 (file)
@@ -324,9 +324,10 @@ int os_jump_to_image(const void *dest, int size);
  *
  * @fname:     place to put full path to U-Boot
  * @maxlen:    maximum size of @fname
+ * @use_img:   select the 'u-boot.img' file instead of the 'u-boot' ELF file
  * Return:     0 if OK, -NOSPC if the filename is too large, -ENOENT if not found
  */
-int os_find_u_boot(char *fname, int maxlen);
+int os_find_u_boot(char *fname, int maxlen, bool use_img);
 
 /**
  * os_spl_to_uboot() - Run U-Boot proper