From: Stefan Roese Date: Mon, 27 Nov 2006 16:04:06 +0000 (+0100) Subject: [PATCH] Allow CONFIG_OF_FLAT_TREE to boot a non-arch/powerpc kernel X-Git-Tag: U-Boot-1_2_0~31^2 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=da5553b095bf04f4f109ad7e565dae3aba47b230;p=oweals%2Fu-boot.git [PATCH] Allow CONFIG_OF_FLAT_TREE to boot a non-arch/powerpc kernel 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 Acked-by: Jon Loeliger --- diff --git a/common/cmd_bootm.c b/common/cmd_bootm.c index 3091a58897..7aae8a6d1b 100644 --- a/common/cmd_bootm.c +++ b/common/cmd_bootm.c @@ -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 */