[U-Boot] [PATCH 12/39] x86: Tidy up global descriptor table setup
Simon Glass
sjg at chromium.org
Sat Nov 8 20:40:04 CET 2014
On 7 November 2014 02:37, Bin Meng <bmeng.cn at gmail.com> wrote:
> On Fri, Nov 7, 2014 at 4:20 AM, Simon Glass <sjg at chromium.org> wrote:
>> This code is a little muddled, so tidy it up. Make sure that we put the
>> GDT in the right place and set it up properly.
>>
>> Signed-off-by: Simon Glass <sjg at chromium.org>
>> ---
>>
>> arch/x86/cpu/start.S | 19 ++++++++++++++++---
>> 1 file changed, 16 insertions(+), 3 deletions(-)
>>
>> diff --git a/arch/x86/cpu/start.S b/arch/x86/cpu/start.S
>> index 62ac4cd..c41e1ae 100644
>> --- a/arch/x86/cpu/start.S
>> +++ b/arch/x86/cpu/start.S
>> @@ -69,6 +69,16 @@ car_init_ret:
>> * We now have CONFIG_SYS_CAR_SIZE bytes of Cache-As-RAM (or SRAM,
>> * or fully initialised SDRAM - we really don't care which)
>> * starting at CONFIG_SYS_CAR_ADDR to be used as a temporary stack
>> + * and early malloc area.
>> + *
>> + * Stack grows down from top of CAR. We have:
>> + *
>> + * top-> CONFIG_SYS_CAR_ADDR + CONFIG_SYS_CAR_SIZE
>> + * global_data
>> + * x86 global descriptor table
>> + * early malloc area
>> + * stack
>> + * bottom-> CONFIG_SYS_CAR_ADDR
>> */
>>
>> /* Stack grows down from top of CAR */
>> @@ -86,12 +96,16 @@ car_init_ret:
>> movl %esp, %edi
>> rep stosb
>>
>> - /* Setup first parameter to setup_gdt */
>> + /* Setup first parameter to setup_gdt, pointer to global_data */
>> movl %esp, %eax
>>
>> /* Reserve space for global descriptor table */
>> subl $X86_GDT_SIZE, %esp
>>
>> + /* Align temporary global descriptor table to 16-byte boundary */
>> + andl $0xfffffff0, %esp
>> + movl %esp, %ecx
>> +
>> #if defined(CONFIG_SYS_MALLOC_F_LEN)
>> subl $CONFIG_SYS_MALLOC_F_LEN, %esp
>> movl %eax, %edx
>> @@ -103,14 +117,13 @@ car_init_ret:
>> andl $0xfffffff0, %esp
>>
>> /* Set second parameter to setup_gdt */
>> - movl %esp, %edx
>> + movl %ecx, %edx
>>
>> /* Setup global descriptor table so gd->xyz works */
>> call setup_gdt
>>
>> /* Set parameter to board_init_f() to boot flags */
>> xorl %eax, %eax
>> - movw %bx, %ax
>>
>> /* Enter, U-boot! */
>> call board_init_f
>> --
>
> Reviewed-by: Bin Meng <bmeng.cn at gmail.com>
Applied to u-boot-x86.
More information about the U-Boot
mailing list