Re: [U-Boot] [PATCH 18/39] x86: Save the BIST value on reset
On 7 November 2014 03:21, Bin Meng wrote: > On Fri, Nov 7, 2014 at 4:20 AM, Simon Glass 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 >> --- >> >> 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$0xfff0, %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 lgdtgdt_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 Applied to u-boot-x86. ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [PATCH 18/39] x86: Save the BIST value on reset
On Fri, Nov 7, 2014 at 4:20 AM, Simon Glass 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 > --- > > 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$0xfff0, %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 lgdtgdt_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 ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
[U-Boot] [PATCH 18/39] x86: Save the BIST value on reset
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 --- 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$0xfff0, %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 lgdtgdt_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) -- 2.1.0.rc2.206.gedb03e5 ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot