diff --git a/arch/mips/lib/bootm.c b/arch/mips/lib/bootm.c
index 8c2e5082439d84aff6698d911118826f3d7f5786..a36154a892c1ea687b5148772d1d384da664712d 100644
--- a/arch/mips/lib/bootm.c
+++ b/arch/mips/lib/bootm.c
@@ -104,8 +104,19 @@ static void boot_jump_linux(bootm_headers_t *images)
 int do_bootm_linux(int flag, int argc, char * const argv[],
 			bootm_headers_t *images)
 {
-	if ((flag != 0) && (flag != BOOTM_STATE_OS_GO))
-		return 1;
+	/* No need for those on MIPS */
+	if (flag & BOOTM_STATE_OS_BD_T || flag & BOOTM_STATE_OS_CMDLINE)
+		return -1;
+
+	if (flag & BOOTM_STATE_OS_PREP) {
+		boot_prep_linux(images);
+		return 0;
+	}
+
+	if (flag & BOOTM_STATE_OS_GO) {
+		boot_jump_linux(images);
+		return 0;
+	}
 
 	boot_prep_linux(images);
 	boot_jump_linux(images);