bootm: Require boot function only if it is about to be used
authorSimon Glass <sjg@chromium.org>
Thu, 4 Jul 2013 20:26:09 +0000 (13:26 -0700)
committerTom Rini <trini@ti.com>
Wed, 10 Jul 2013 13:15:14 +0000 (09:15 -0400)
The original bootm code (before commit 35fc84f) did not check for a valid
boot function in the subcommand case, which was incorrect.

This check was introduced in all cases, but in fact we should only check
for the function when we need it. Otherwise in some cases the check fires
before the OS type is known.

Signed-off-by: Simon Glass <sjg@chromium.org>
common/cmd_bootm.c

index e712602b8d2a2955303bf996223c7b4ef77e86f3..21ab6428a106a0e8b4a53660c80186f3de2531c6 100644 (file)
@@ -605,7 +605,7 @@ static int do_bootm_states(cmd_tbl_t *cmdtp, int flag, int argc,
 {
        boot_os_fn *boot_fn;
        ulong iflag = 0;
-       int ret = 0;
+       int ret = 0, need_boot_fn;
 
        images->state |= states;
 
@@ -665,7 +665,10 @@ static int do_bootm_states(cmd_tbl_t *cmdtp, int flag, int argc,
        if (ret)
                return ret;
        boot_fn = boot_os[images->os.os];
-       if (boot_fn == NULL) {
+       need_boot_fn = states & (BOOTM_STATE_OS_CMDLINE |
+                       BOOTM_STATE_OS_BD_T | BOOTM_STATE_OS_PREP |
+                       BOOTM_STATE_OS_FAKE_GO | BOOTM_STATE_OS_GO);
+       if (boot_fn == NULL && need_boot_fn) {
                if (iflag)
                        enable_interrupts();
                printf("ERROR: booting os '%s' (%d) is not supported\n",