Merge branch 'master' of git://git.denx.de/u-boot-spi
[platform/kernel/u-boot.git] / arch / sandbox / cpu / start.c
index 097f29a..b1566a8 100644 (file)
@@ -1,9 +1,10 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
  * Copyright (c) 2011-2012 The Chromium OS Authors.
- * SPDX-License-Identifier:    GPL-2.0+
  */
 
 #include <common.h>
+#include <errno.h>
 #include <os.h>
 #include <cli.h>
 #include <malloc.h>
@@ -65,6 +66,11 @@ int sandbox_early_getopt_check(void)
        os_exit(0);
 }
 
+int misc_init_f(void)
+{
+       return sandbox_early_getopt_check();
+}
+
 static int sandbox_cmdline_cb_help(struct sandbox_state *state, const char *arg)
 {
        /* just flag to sandbox_early_getopt_check to show usage */
@@ -72,21 +78,40 @@ static int sandbox_cmdline_cb_help(struct sandbox_state *state, const char *arg)
 }
 SANDBOX_CMDLINE_OPT_SHORT(help, 'h', 0, "Display help");
 
+#ifndef CONFIG_SPL_BUILD
 int sandbox_main_loop_init(void)
 {
        struct sandbox_state *state = state_get_current();
 
        /* Execute command if required */
-       if (state->cmd) {
+       if (state->cmd || state->run_distro_boot) {
+               int retval = 0;
+
                cli_init();
 
-               run_command_list(state->cmd, -1, 0);
+#ifdef CONFIG_CMDLINE
+               if (state->cmd)
+                       retval = run_command_list(state->cmd, -1, 0);
+
+               if (state->run_distro_boot)
+                       retval = cli_simple_run_command("run distro_bootcmd",
+                                                       0);
+#endif
                if (!state->interactive)
-                       os_exit(state->exit_type);
+                       os_exit(retval);
        }
 
        return 0;
 }
+#endif
+
+static int sandbox_cmdline_cb_boot(struct sandbox_state *state,
+                                     const char *arg)
+{
+       state->run_distro_boot = true;
+       return 0;
+}
+SANDBOX_CMDLINE_OPT_SHORT(boot, 'b', 0, "Run distro boot commands");
 
 static int sandbox_cmdline_cb_command(struct sandbox_state *state,
                                      const char *arg)
@@ -152,7 +177,7 @@ static int sandbox_cmdline_cb_memory(struct sandbox_state *state,
 
        err = os_read_ram_buf(arg);
        if (err) {
-               printf("Failed to read RAM buffer\n");
+               printf("Failed to read RAM buffer '%s': %d\n", arg, err);
                return err;
        }
 
@@ -240,6 +265,56 @@ static int sandbox_cmdline_cb_terminal(struct sandbox_state *state,
 SANDBOX_CMDLINE_OPT_SHORT(terminal, 't', 1,
                          "Set terminal to raw/cooked mode");
 
+static int sandbox_cmdline_cb_verbose(struct sandbox_state *state,
+                                     const char *arg)
+{
+       state->show_test_output = true;
+       return 0;
+}
+SANDBOX_CMDLINE_OPT_SHORT(verbose, 'v', 0, "Show test output");
+
+static int sandbox_cmdline_cb_log_level(struct sandbox_state *state,
+                                       const char *arg)
+{
+       state->default_log_level = simple_strtol(arg, NULL, 10);
+
+       return 0;
+}
+SANDBOX_CMDLINE_OPT_SHORT(log_level, 'L', 1,
+                         "Set log level (0=panic, 7=debug)");
+
+static int sandbox_cmdline_cb_show_of_platdata(struct sandbox_state *state,
+                                              const char *arg)
+{
+       state->show_of_platdata = true;
+
+       return 0;
+}
+SANDBOX_CMDLINE_OPT(show_of_platdata, 0, "Show of-platdata in SPL");
+
+int board_run_command(const char *cmdline)
+{
+       printf("## Commands are disabled. Please enable CONFIG_CMDLINE.\n");
+
+       return 1;
+}
+
+static void setup_ram_buf(struct sandbox_state *state)
+{
+       gd->arch.ram_buf = state->ram_buf;
+       gd->ram_size = state->ram_size;
+}
+
+void state_show(struct sandbox_state *state)
+{
+       char **p;
+
+       printf("Arguments:\n");
+       for (p = state->argv; *p; p++)
+               printf("%s ", *p);
+       printf("\n");
+}
+
 int main(int argc, char *argv[])
 {
        struct sandbox_state *state;
@@ -258,15 +333,15 @@ int main(int argc, char *argv[])
        if (ret)
                goto err;
 
-       /* Remove old memory file if required */
-       if (state->ram_buf_rm && state->ram_buf_fname)
-               os_unlink(state->ram_buf_fname);
-
        memset(&data, '\0', sizeof(data));
        gd = &data;
-#ifdef CONFIG_SYS_MALLOC_F_LEN
+#if CONFIG_VAL(SYS_MALLOC_F_LEN)
        gd->malloc_base = CONFIG_MALLOC_F_ADDR;
 #endif
+#if CONFIG_IS_ENABLED(LOG)
+       gd->default_log_level = state->default_log_level;
+#endif
+       setup_ram_buf(state);
 
        /* Do pre- and post-relocation init */
        board_init_f(0);