
On 7 November 2014 03:21, Bin Meng bmeng.cn@gmail.com wrote:
On Fri, Nov 7, 2014 at 4:20 AM, Simon Glass sjg@chromium.org wrote:
The built in self test value is available in register eax on start-up. Save it so that it can be accessed later. Unfortunately we must wait until the global_data is available before we can do this, so there is a little bit of shuffling to keep it around.
Signed-off-by: Simon Glass sjg@chromium.org
arch/x86/cpu/start.S | 9 ++++++--- arch/x86/cpu/start16.S | 7 ++++++- arch/x86/include/asm/global_data.h | 1 + lib/asm-offsets.c | 3 +++ 4 files changed, 16 insertions(+), 4 deletions(-)
diff --git a/arch/x86/cpu/start.S b/arch/x86/cpu/start.S index c41e1ae..7f41475 100644 --- a/arch/x86/cpu/start.S +++ b/arch/x86/cpu/start.S @@ -49,6 +49,8 @@ _start: */ movw $GD_FLG_COLD_BOOT, %bx 1:
/* Save BIST */
movl %eax, %ebp /* Load the segement registes to match the gdt loaded in start16.S */ movl $(X86_GDT_ENTRY_32BIT_DS * X86_GDT_ENTRY_SIZE), %eax
@@ -112,9 +114,10 @@ car_init_ret: addl $GD_MALLOC_BASE, %edx movl %esp, (%edx) #endif
/* Align temporary global descriptor table to 16-byte boundary */
andl $0xfffffff0, %esp
/* Store BIST */
movl %eax, %edx
addl $GD_BIST, %edx
movl %ebp, (%edx) /* Set second parameter to setup_gdt */ movl %ecx, %edx
diff --git a/arch/x86/cpu/start16.S b/arch/x86/cpu/start16.S index 445d5a1..9550502 100644 --- a/arch/x86/cpu/start16.S +++ b/arch/x86/cpu/start16.S @@ -21,6 +21,9 @@ .code16 .globl start16 start16:
/* Save BIST */
movl %eax, %ecx
/* Set the Cold Boot / Hard Reset flag */ movl $GD_FLG_COLD_BOOT, %ebx
@@ -45,9 +48,11 @@ o32 cs lgdt gdt_ptr /* Flush the prefetch queue */ jmp ff ff:
/* Finally jump to the 32bit initialization code */
/* Finally restore BIST and jump to the 32bit initialization code */ movw $code32start, %ax movw %ax, %bp
movl %ecx, %eax
o32 cs ljmp *(%bp)
/* 48-bit far pointer */
diff --git a/arch/x86/include/asm/global_data.h b/arch/x86/include/asm/global_data.h index 3e8e2cd..9eae228 100644 --- a/arch/x86/include/asm/global_data.h +++ b/arch/x86/include/asm/global_data.h @@ -17,6 +17,7 @@ struct arch_global_data { uint32_t tsc_base_kclocks; /* Initial tsc as a kclocks value */ uint32_t tsc_prev; /* For show_boot_progress() */ void *new_fdt; /* Relocated FDT */
uint32_t bist; /* Built-in self test value */
};
#endif diff --git a/lib/asm-offsets.c b/lib/asm-offsets.c index 129bc3e..580f763 100644 --- a/lib/asm-offsets.c +++ b/lib/asm-offsets.c @@ -31,6 +31,9 @@ int main(void) #ifdef CONFIG_SYS_MALLOC_F_LEN DEFINE(GD_MALLOC_BASE, offsetof(struct global_data, malloc_base)); #endif +#ifdef CONFIG_X86
DEFINE(GD_BIST, offsetof(struct global_data, arch.bist));
+#endif
#if defined(CONFIG_ARM)
--
Reviewed-by: Bin Meng bmeng.cn@gmail.com
Applied to u-boot-x86.