123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- // SPDX-License-Identifier: GPL-2.0+
- /*
- * Copyright (c) 2016 Google, Inc
- */
- #include <common.h>
- #include <dm.h>
- #include <hang.h>
- #include <init.h>
- #include <log.h>
- #include <os.h>
- #include <spl.h>
- #include <asm/global_data.h>
- #include <asm/spl.h>
- #include <asm/state.h>
- #include <test/ut.h>
- DECLARE_GLOBAL_DATA_PTR;
- int sandbox_find_next_phase(char *fname, int maxlen, bool use_img)
- {
- const char *cur_prefix, *next_prefix;
- int ret;
- cur_prefix = spl_phase_prefix(spl_phase());
- next_prefix = spl_phase_prefix(spl_next_phase());
- ret = os_find_u_boot(fname, maxlen, use_img, cur_prefix, next_prefix);
- if (ret)
- return log_msg_ret("find", ret);
- return 0;
- }
- /* SPL / TPL init function */
- void board_init_f(ulong flag)
- {
- struct sandbox_state *state = state_get_current();
- gd->arch.ram_buf = state->ram_buf;
- gd->ram_size = state->ram_size;
- }
- u32 spl_boot_device(void)
- {
- return BOOT_DEVICE_BOARD;
- }
- static int spl_board_load_image(struct spl_image_info *spl_image,
- struct spl_boot_device *bootdev)
- {
- char fname[256];
- int ret;
- ret = sandbox_find_next_phase(fname, sizeof(fname), false);
- if (ret) {
- printf("(%s not found, error %d)\n", fname, ret);
- return ret;
- }
- /*
- * Set up spl_image to boot from jump_to_image_no_args(). Allocate this
- * outsdide the RAM buffer (i.e. don't use strdup()).
- */
- spl_image->arg = os_malloc(strlen(fname) + 1);
- if (!spl_image->arg)
- return log_msg_ret("exec", -ENOMEM);
- strcpy(spl_image->arg, fname);
- return 0;
- }
- 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();
- preloader_console_init();
- if (state->run_unittests) {
- struct unit_test *tests = UNIT_TEST_ALL_START();
- const int count = UNIT_TEST_ALL_COUNT();
- int ret;
- ret = ut_run_list("spl", NULL, tests, count,
- state->select_unittests);
- /* continue execution into U-Boot */
- }
- }
- 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;
- return 0;
- }
|