+// SPDX-License-Identifier: GPL-2.0+
/*
* Copyright (c) 2016 Google, Inc
- * SPDX-License-Identifier: GPL-2.0+
*/
#include <common.h>
#include <dm.h>
+#include <hang.h>
+#include <init.h>
+#include <log.h>
#include <os.h>
#include <spl.h>
#include <asm/spl.h>
DECLARE_GLOBAL_DATA_PTR;
+/* SPL / TPL init function */
void board_init_f(ulong flag)
{
struct sandbox_state *state = state_get_current();
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();
+}
+
+int handoff_arch_save(struct spl_handoff *ho)
+{
+ ho->arch.magic = TEST_HANDOFF_MAGIC;
- /*
- * Scan all the devices so that we can output their platform data. See
- * sandbox_spl_probe().
- */
- for (uclass_first_device(UCLASS_MISC, &dev);
- dev;
- uclass_next_device(&dev))
- ;
+ return 0;
}