]> git.sur5r.net Git - u-boot/blobdiff - arch/sandbox/cpu/start.c
mailbox: implement a sandbox test
[u-boot] / arch / sandbox / cpu / start.c
index 0df77704c6f769c7085940ca81592d064c7362af..969618ef87502dfb1f34c0f677c18e66c4f6072f 100644 (file)
@@ -4,8 +4,10 @@
  */
 
 #include <common.h>
+#include <errno.h>
 #include <os.h>
 #include <cli.h>
+#include <malloc.h>
 #include <asm/getopt.h>
 #include <asm/io.h>
 #include <asm/sections.h>
@@ -76,17 +78,34 @@ 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;
 }
 
+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)
 {
@@ -102,6 +121,25 @@ static int sandbox_cmdline_cb_fdt(struct sandbox_state *state, const char *arg)
 }
 SANDBOX_CMDLINE_OPT_SHORT(fdt, 'd', 1, "Specify U-Boot's control FDT");
 
+static int sandbox_cmdline_cb_default_fdt(struct sandbox_state *state,
+                                         const char *arg)
+{
+       const char *fmt = "%s.dtb";
+       char *fname;
+       int len;
+
+       len = strlen(state->argv[0]) + strlen(fmt) + 1;
+       fname = os_malloc(len);
+       if (!fname)
+               return -ENOMEM;
+       snprintf(fname, len, fmt, state->argv[0]);
+       state->fdt_fname = fname;
+
+       return 0;
+}
+SANDBOX_CMDLINE_OPT_SHORT(default_fdt, 'D', 0,
+               "Use the default u-boot.dtb control FDT in U-Boot directory");
+
 static int sandbox_cmdline_cb_interactive(struct sandbox_state *state,
                                          const char *arg)
 {
@@ -130,7 +168,8 @@ static int sandbox_cmdline_cb_memory(struct sandbox_state *state,
        state->write_ram_buf = true;
        state->ram_buf_fname = arg;
 
-       if (os_read_ram_buf(arg)) {
+       err = os_read_ram_buf(arg);
+       if (err) {
                printf("Failed to read RAM buffer\n");
                return err;
        }
@@ -219,6 +258,21 @@ 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");
+
+int board_run_command(const char *cmdline)
+{
+       printf("## Commands are disabled. Please enable CONFIG_CMDLINE.\n");
+
+       return 1;
+}
+
 int main(int argc, char *argv[])
 {
        struct sandbox_state *state;