Patchwork [U-Boot,06/20] x86: Add back cold- and warm-boot flags

login
register
mail settings
Submitter Simon Glass
Date Nov. 3, 2012, 9:41 p.m.
Message ID <1351978902-23719-7-git-send-email-sjg@chromium.org>
Download mbox | patch
Permalink /patch/196951/
State Accepted, archived
Delegated to: Simon Glass
Headers show

Comments

Simon Glass - Nov. 3, 2012, 9:41 p.m.
From: Gabe Black <gabeblack@chromium.org>

These were removed, but actually are useful.

Cold means that we started from a reset/power on.
Warm means that we started from another U-Boot.

We determine whether u-boot on x86 was warm or cold booted (really if
it started at the beginning of the text segment or at the ELF entry point).
We plumb the result through to the global data structure.

Signed-off-by: Simon Glass <sjg@chromium.org>
---
 arch/x86/cpu/start.S               |   10 +++++++++-
 arch/x86/cpu/start16.S             |    3 +++
 arch/x86/include/asm/global_data.h |    6 ++++++
 3 files changed, 18 insertions(+), 1 deletions(-)

Patch

diff --git a/arch/x86/cpu/start.S b/arch/x86/cpu/start.S
index ee0dabe..acdd054 100644
--- a/arch/x86/cpu/start.S
+++ b/arch/x86/cpu/start.S
@@ -55,8 +55,16 @@  _x86boot_start:
 	movl	%eax, %cr0
 	wbinvd
 
+	/* Tell 32-bit code it is being entered from an in-RAM copy */
+	movw	$GD_FLG_WARM_BOOT, %bx
+	jmp	1f
 _start:
-	/* This is the 32-bit cold-reset entry point */
+	/*
+	 * This is the 32-bit cold-reset entry point. Initialize %bx to 0
+	 * in case we're preceeded by some sort of boot stub.
+	 */
+	movw	$GD_FLG_COLD_BOOT, %bx
+1:
 
 	/* Load the segement registes to match the gdt loaded in start16.S */
 	movl	$(X86_GDT_ENTRY_32BIT_DS * X86_GDT_ENTRY_SIZE), %eax
diff --git a/arch/x86/cpu/start16.S b/arch/x86/cpu/start16.S
index cc393ff..603bf1d 100644
--- a/arch/x86/cpu/start16.S
+++ b/arch/x86/cpu/start16.S
@@ -37,6 +37,9 @@ 
 .code16
 .globl start16
 start16:
+	/* Set the Cold Boot / Hard Reset flag */
+	movl	$GD_FLG_COLD_BOOT, %ebx
+
 	/*
 	 * First we let the BSP do some early initialization
 	 * this code have to map the flash to its final position
diff --git a/arch/x86/include/asm/global_data.h b/arch/x86/include/asm/global_data.h
index d3b6031..b3a6b50 100644
--- a/arch/x86/include/asm/global_data.h
+++ b/arch/x86/include/asm/global_data.h
@@ -77,6 +77,12 @@  static inline gd_t *get_fs_gd_ptr(void)
 
 #include <asm-generic/global_data_flags.h>
 
+/*
+ * Our private Global Data Flags
+ */
+#define GD_FLG_COLD_BOOT	0x00100	/* Cold Boot */
+#define GD_FLG_WARM_BOOT	0x00200	/* Warm Boot */
+
 #define DECLARE_GLOBAL_DATA_PTR
 
 #endif /* __ASM_GBL_DATA_H */