Browse Source

x86: Rationalise kernel booting logic and bootstage

The 'Starting linux' message appears twice in the code, but both call
through the same place. Unify these and add calls to bootstage to
mark the occasion.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Michael Spang <spang@chromium.org>
Acked-by: Graeme Russ <graeme.russ@gmail.com>
Simon Glass 12 years ago
parent
commit
7949703a95
3 changed files with 12 additions and 12 deletions
  1. 5 0
      arch/x86/cpu/cpu.c
  2. 0 8
      arch/x86/lib/bootm.c
  3. 7 4
      arch/x86/lib/zimage.c

+ 5 - 0
arch/x86/cpu/cpu.c

@@ -120,6 +120,11 @@ void setup_gdt(gd_t *id, u64 *gdt_addr)
 
 
 int __weak x86_cleanup_before_linux(void)
 int __weak x86_cleanup_before_linux(void)
 {
 {
+#ifdef CONFIG_BOOTSTAGE_STASH
+	bootstage_stash((void *)CONFIG_BOOTSTAGE_STASH,
+			CONFIG_BOOTSTAGE_STASH_SIZE);
+#endif
+
 	return 0;
 	return 0;
 }
 }
 
 

+ 0 - 8
arch/x86/lib/bootm.c

@@ -93,14 +93,6 @@ int do_bootm_linux(int flag, int argc, char * const argv[],
 		goto error;
 		goto error;
 	}
 	}
 
 
-#ifdef DEBUG
-	printf("## Transferring control to Linux (at address %08x) ...\n",
-		(u32)base_ptr);
-#endif
-
-	/* we assume that the kernel is in place */
-	printf("\nStarting kernel ...\n\n");
-
 	boot_zimage(base_ptr, load_address);
 	boot_zimage(base_ptr, load_address);
 	/* does not return */
 	/* does not return */
 
 

+ 7 - 4
arch/x86/lib/zimage.c

@@ -283,6 +283,13 @@ __weak void board_final_cleanup(void)
 
 
 void boot_zimage(void *setup_base, void *load_address)
 void boot_zimage(void *setup_base, void *load_address)
 {
 {
+	debug("## Transferring control to Linux (at address %08x) ...\n",
+	      (u32)setup_base);
+
+	bootstage_mark_name(BOOTSTAGE_ID_BOOTM_HANDOFF, "start_kernel");
+#ifdef CONFIG_BOOTSTAGE_REPORT
+	bootstage_report();
+#endif
 	board_final_cleanup();
 	board_final_cleanup();
 
 
 	printf("\nStarting kernel ...\n\n");
 	printf("\nStarting kernel ...\n\n");
@@ -363,10 +370,6 @@ int do_zboot(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
 		return -1;
 		return -1;
 	}
 	}
 
 
-	printf("## Transferring control to Linux "
-	       "(at address %08x) ...\n",
-	       (u32)base_ptr);
-
 	/* we assume that the kernel is in place */
 	/* we assume that the kernel is in place */
 	boot_zimage(base_ptr, load_address);
 	boot_zimage(base_ptr, load_address);
 	/* does not return */
 	/* does not return */