diff --git a/common/cmd_bootm.c b/common/cmd_bootm.c
index e712602b8d2a2955303bf996223c7b4ef77e86f3..21ab6428a106a0e8b4a53660c80186f3de2531c6 100644
--- a/common/cmd_bootm.c
+++ b/common/cmd_bootm.c
@@ -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",