[U-Boot] [PATCH 18/39] x86: Save the BIST value on reset
Simon Glass
sjg at chromium.org
Sat Nov 8 20:40:28 CET 2014
On 7 November 2014 03:21, Bin Meng <bmeng.cn at gmail.com> wrote:
> On Fri, Nov 7, 2014 at 4:20 AM, Simon Glass <sjg at 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 at 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 at gmail.com>
Applied to u-boot-x86.
More information about the U-Boot
mailing list