]> git.sur5r.net Git - u-boot/blobdiff - arch/sandbox/cpu/start.c
Merge branch 'master' of git://www.denx.de/git/u-boot-imx
[u-boot] / arch / sandbox / cpu / start.c
index aad3b8b14758b1cd3926119dbf7157a0bbdd2d52..ec010402d77f47f40b2ca3950d4cb9a5e52355c4 100644 (file)
@@ -5,7 +5,10 @@
 
 #include <common.h>
 #include <os.h>
+#include <cli.h>
+#include <malloc.h>
 #include <asm/getopt.h>
+#include <asm/io.h>
 #include <asm/sections.h>
 #include <asm/state.h>
 
@@ -37,7 +40,7 @@ int sandbox_early_getopt_check(void)
 
        max_arg_len = 0;
        for (i = 0; i < num_options; ++i)
-               max_arg_len = max(strlen(sb_opt[i]->flag), max_arg_len);
+               max_arg_len = max((int)strlen(sb_opt[i]->flag), max_arg_len);
        max_noarg_len = max_arg_len + 7;
 
        for (i = 0; i < num_options; ++i) {
@@ -75,9 +78,13 @@ int sandbox_main_loop_init(void)
 
        /* Execute command if required */
        if (state->cmd) {
-               run_command_list(state->cmd, -1, 0);
+               int retval;
+
+               cli_init();
+
+               retval = run_command_list(state->cmd, -1, 0);
                if (!state->interactive)
-                       os_exit(state->exit_type);
+                       os_exit(retval);
        }
 
        return 0;
@@ -98,6 +105,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)
 {
@@ -126,7 +152,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;
        }
@@ -218,6 +245,7 @@ SANDBOX_CMDLINE_OPT_SHORT(terminal, 't', 1,
 int main(int argc, char *argv[])
 {
        struct sandbox_state *state;
+       gd_t data;
        int ret;
 
        ret = state_init();
@@ -236,6 +264,12 @@ int main(int argc, char *argv[])
        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
+       gd->malloc_base = CONFIG_MALLOC_F_ADDR;
+#endif
+
        /* Do pre- and post-relocation init */
        board_init_f(0);