sandbox: Add a comment to board_init_f()
[oweals/u-boot.git] / arch / sandbox / cpu / spl.c
index 2495fa9b08fc7ee1cd3d72ba690a337e55c294a1..4f415c71d63227272db33cb7a761409f9814d8f1 100644 (file)
@@ -1,6 +1,6 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
  * Copyright (c) 2016 Google, Inc
- * SPDX-License-Identifier:    GPL-2.0+
  */
 
 #include <common.h>
@@ -12,6 +12,7 @@
 
 DECLARE_GLOBAL_DATA_PTR;
 
+/* SPL / TPL init function */
 void board_init_f(ulong flag)
 {
        struct sandbox_state *state = state_get_current();
@@ -37,12 +38,43 @@ 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);
+SPL_LOAD_IMAGE_METHOD("sandbox", 9, BOOT_DEVICE_BOARD, spl_board_load_image);
 
 void spl_board_init(void)
 {
+       struct sandbox_state *state = state_get_current();
+       struct udevice *dev;
+
        preloader_console_init();
+       if (state->show_of_platdata) {
+               /*
+                * Scan all the devices so that we can output their platform
+                * data. See sandbox_spl_probe().
+                */
+               printf("Scanning misc devices\n");
+               for (uclass_first_device(UCLASS_MISC, &dev);
+                    dev;
+                    uclass_next_device(&dev))
+                       ;
+       }
+}
+
+void __noreturn jump_to_image_no_args(struct spl_image_info *spl_image)
+{
+       const char *fname = spl_image->arg;
+
+       if (fname) {
+               os_fd_restore();
+               os_spl_to_uboot(fname);
+       } else {
+               printf("No filename provided for U-Boot\n");
+       }
+       hang();
 }