[PATCH] Allow CONFIG_OF_FLAT_TREE to boot a non-arch/powerpc kernel
authorStefan Roese <sr@denx.de>
Mon, 27 Nov 2006 16:04:06 +0000 (17:04 +0100)
committerStefan Roese <sr@denx.de>
Mon, 27 Nov 2006 16:04:06 +0000 (17:04 +0100)
This patch allows an arch/ppc kernel to be booted by just passing 1 or 2
arguments to bootm.  It removes the getenv("disable_of") test that used
to be used for this purpose.

Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
Acked-by: Jon Loeliger <jdl@freescale.com>
common/cmd_bootm.c

index 3091a58897d109e2b716deed0aa520a899723108..7aae8a6d1b0a2f9919a1219c5a7f067f87dc7564 100644 (file)
@@ -833,10 +833,6 @@ do_bootm_linux (cmd_tbl_t *cmdtp, int flag,
                        printf ("ERROR: flat device tree size does not agree with image\n");
                        return;
                }
-
-       } else if (getenv("disable_of") == NULL) {
-               printf ("ERROR: bootm needs flat device tree as third argument\n");
-               return;
        }
 #endif
        if (!data) {
@@ -913,23 +909,11 @@ do_bootm_linux (cmd_tbl_t *cmdtp, int flag,
 
        SHOW_BOOT_PROGRESS (15);
 
-#ifndef CONFIG_OF_FLAT_TREE
-
 #if defined(CFG_INIT_RAM_LOCK) && !defined(CONFIG_E500)
        unlock_ram_in_cache();
 #endif
 
-       /*
-        * Linux Kernel Parameters:
-        *   r3: ptr to board info data
-        *   r4: initrd_start or 0 if no initrd
-        *   r5: initrd_end - unused if r4 is 0
-        *   r6: Start of command line string
-        *   r7: End   of command line string
-        */
-       (*kernel) (kbd, initrd_start, initrd_end, cmd_start, cmd_end);
-
-#else  /* CONFIG_OF_FLAT_TREE */
+#ifdef CONFIG_OF_FLAT_TREE
        /* move of_flat_tree if needed */
        if (of_data) {
                ulong of_start, of_len;
@@ -948,30 +932,36 @@ do_bootm_linux (cmd_tbl_t *cmdtp, int flag,
                        of_start, of_start + of_len - 1);
                memmove ((void *)of_start, (void *)of_data, of_len);
        }
+#endif
 
-       ft_setup(of_flat_tree, kbd, initrd_start, initrd_end);
-       /* ft_dump_blob(of_flat_tree); */
-
-#if defined(CFG_INIT_RAM_LOCK) && !defined(CONFIG_E500)
-       unlock_ram_in_cache();
+       /*
+        * Linux Kernel Parameters (passing board info data):
+        *   r3: ptr to board info data
+        *   r4: initrd_start or 0 if no initrd
+        *   r5: initrd_end - unused if r4 is 0
+        *   r6: Start of command line string
+        *   r7: End   of command line string
+        */
+#ifdef CONFIG_OF_FLAT_TREE
+       if (!of_flat_tree)      /* no device tree; boot old style */
 #endif
+               (*kernel) (kbd, initrd_start, initrd_end, cmd_start, cmd_end);
+               /* does not return */
+
+#ifdef CONFIG_OF_FLAT_TREE
        /*
-        * Linux Kernel Parameters:
+        * Linux Kernel Parameters (passing device tree):
         *   r3: ptr to OF flat tree, followed by the board info data
         *   r4: physical pointer to the kernel itself
         *   r5: NULL
         *   r6: NULL
         *   r7: NULL
         */
-       if (getenv("disable_of") != NULL)
-               (*kernel) ((bd_t *)of_flat_tree, initrd_start, initrd_end,
-                       cmd_start, cmd_end);
-       else {
-               ft_setup(of_flat_tree, kbd, initrd_start, initrd_end);
-               /* ft_dump_blob(of_flat_tree); */
-               (*kernel) ((bd_t *)of_flat_tree, (ulong)kernel, 0, 0, 0);
-       }
-#endif /* CONFIG_OF_FLAT_TREE */
+       ft_setup(of_flat_tree, kbd, initrd_start, initrd_end);
+       /* ft_dump_blob(of_flat_tree); */
+
+       (*kernel) ((bd_t *)of_flat_tree, (ulong)kernel, 0, 0, 0);
+#endif
 }
 #endif /* CONFIG_PPC */