bootm/fdt: Only process the fdt if an fdt address was provided
authorGrant Likely <grant.likely@secretlab.ca>
Thu, 6 Sep 2007 15:47:40 +0000 (09:47 -0600)
committerGrant Likely <grant.likely@secretlab.ca>
Thu, 6 Sep 2007 15:47:40 +0000 (09:47 -0600)
Boards with CONFIG_OF_LIBFDT enabled are not able to boot old-style
kernels using the board info structure (instead of passing a device tree)
This change allows the old style booting to be used if the fdt argument
was not passed to 'bootm'.

Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
Acked-by: Kim Phillips <kim.phillips@freescale.com>
common/cmd_bootm.c

index bcb927f..919188f 100644 (file)
@@ -962,29 +962,31 @@ do_bootm_linux (cmd_tbl_t *cmdtp, int flag,
         * Add the chosen node if it doesn't exist, add the env and bd_t
         * if the user wants it (the logic is in the subroutines).
         */
-       if (fdt_chosen(of_flat_tree, initrd_start, initrd_end, 0) < 0) {
-               puts ("ERROR: /chosen node create failed - "
-                       "must RESET the board to recover.\n");
-               do_reset (cmdtp, flag, argc, argv);
-       }
+       if (of_flat_tree) {
+               if (fdt_chosen(of_flat_tree, initrd_start, initrd_end, 0) < 0) {
+                       puts ("ERROR: /chosen node create failed - "
+                               "must RESET the board to recover.\n");
+                       do_reset (cmdtp, flag, argc, argv);
+               }
 #ifdef CONFIG_OF_HAS_UBOOT_ENV
-       if (fdt_env(of_flat_tree) < 0) {
-               puts ("ERROR: /u-boot-env node create failed - "
-                       "must RESET the board to recover.\n");
-               do_reset (cmdtp, flag, argc, argv);
-       }
+               if (fdt_env(of_flat_tree) < 0) {
+                       puts ("ERROR: /u-boot-env node create failed - "
+                               "must RESET the board to recover.\n");
+                       do_reset (cmdtp, flag, argc, argv);
+               }
 #endif
 #ifdef CONFIG_OF_HAS_BD_T
-       if (fdt_bd_t(of_flat_tree) < 0) {
-               puts ("ERROR: /bd_t node create failed - "
-                       "must RESET the board to recover.\n");
-               do_reset (cmdtp, flag, argc, argv);
-       }
+               if (fdt_bd_t(of_flat_tree) < 0) {
+                       puts ("ERROR: /bd_t node create failed - "
+                               "must RESET the board to recover.\n");
+                       do_reset (cmdtp, flag, argc, argv);
+               }
 #endif
 #ifdef CONFIG_OF_BOARD_SETUP
-       /* Call the board-specific fixup routine */
-       ft_board_setup(of_flat_tree, gd->bd);
+               /* Call the board-specific fixup routine */
+               ft_board_setup(of_flat_tree, gd->bd);
 #endif
+       }
 #endif /* CONFIG_OF_LIBFDT */
 #if defined(CONFIG_OF_FLAT_TREE)
 #ifdef CFG_BOOTMAPSZ