x86: Add various minor tidy-ups to the 32-bit startup code

Fix a typo, improve some comments and add a little more detail in some
cases.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
This commit is contained in:
Simon Glass 2015-07-31 09:31:25 -06:00
parent 5598facbd2
commit da3a95d60b

View File

@ -25,11 +25,11 @@
.globl _x86boot_start .globl _x86boot_start
_x86boot_start: _x86boot_start:
/* /*
* This is the fail safe 32-bit bootstrap entry point. The * This is the fail-safe 32-bit bootstrap entry point.
* following code is not executed from a cold-reset (actually, a *
* lot of it is, but from real-mode after cold reset. It is * This code is used when booting from another boot loader like
* repeated here to put the board into a state as close to cold * coreboot or EFI. So we repeat some of the same init found in
* reset as necessary) * start16.
*/ */
cli cli
cld cld
@ -45,15 +45,15 @@ _x86boot_start:
jmp 1f jmp 1f
_start: _start:
/* /*
* This is the 32-bit cold-reset entry point. Initialize %bx to 0 * This is the 32-bit cold-reset entry point, coming from start16.
* in case we're preceeded by some sort of boot stub. * Set %bx to 0 to indicate this.
*/ */
movw $GD_FLG_COLD_BOOT, %bx movw $GD_FLG_COLD_BOOT, %bx
1: 1:
/* Save BIST */ /* Save BIST */
movl %eax, %ebp movl %eax, %ebp
/* Load the segement registes to match the gdt loaded in start16.S */ /* Load the segement registers to match the GDT loaded in start16.S */
movl $(X86_GDT_ENTRY_32BIT_DS * X86_GDT_ENTRY_SIZE), %eax movl $(X86_GDT_ENTRY_32BIT_DS * X86_GDT_ENTRY_SIZE), %eax
movw %ax, %fs movw %ax, %fs
movw %ax, %ds movw %ax, %ds
@ -64,7 +64,11 @@ _start:
/* Clear the interrupt vectors */ /* Clear the interrupt vectors */
lidt blank_idt_ptr lidt blank_idt_ptr
/* Early platform init (setup gpio, etc ) */ /*
* Critical early platform init - generally not used, we prefer init
* to happen later when we have a console, in case something goes
* wrong.
*/
jmp early_board_init jmp early_board_init
.globl early_board_init_ret .globl early_board_init_ret
early_board_init_ret: early_board_init_ret:
@ -79,7 +83,7 @@ car_init_ret:
* We now have CONFIG_SYS_CAR_SIZE bytes of Cache-As-RAM (or SRAM, * We now have CONFIG_SYS_CAR_SIZE bytes of Cache-As-RAM (or SRAM,
* or fully initialised SDRAM - we really don't care which) * or fully initialised SDRAM - we really don't care which)
* starting at CONFIG_SYS_CAR_ADDR to be used as a temporary stack * starting at CONFIG_SYS_CAR_ADDR to be used as a temporary stack
* and early malloc area. The MRC requires some space at the top. * and early malloc() area. The MRC requires some space at the top.
* *
* Stack grows down from top of CAR. We have: * Stack grows down from top of CAR. We have:
* *
@ -97,7 +101,7 @@ car_init_ret:
#endif #endif
#else #else
/* /*
* When we get here after car_init, esp points to a temporary stack * When we get here after car_init(), esp points to a temporary stack
* and esi holds the HOB list address returned by the FSP. * and esi holds the HOB list address returned by the FSP.
*/ */
#endif #endif
@ -137,17 +141,18 @@ skip_hob:
movl %esp, %ecx movl %esp, %ecx
#if defined(CONFIG_SYS_MALLOC_F_LEN) #if defined(CONFIG_SYS_MALLOC_F_LEN)
/* Set up the pre-relocation malloc pool */
subl $CONFIG_SYS_MALLOC_F_LEN, %esp subl $CONFIG_SYS_MALLOC_F_LEN, %esp
movl %eax, %edx movl %eax, %edx
addl $GD_MALLOC_BASE, %edx addl $GD_MALLOC_BASE, %edx
movl %esp, (%edx) movl %esp, (%edx)
#endif #endif
/* Store BIST */ /* Store BIST into global_data */
movl %eax, %edx movl %eax, %edx
addl $GD_BIST, %edx addl $GD_BIST, %edx
movl %ebp, (%edx) movl %ebp, (%edx)
/* Set second parameter to setup_gdt */ /* Set second parameter to setup_gdt() */
movl %ecx, %edx movl %ecx, %edx
/* Setup global descriptor table so gd->xyz works */ /* Setup global descriptor table so gd->xyz works */
@ -157,7 +162,7 @@ skip_hob:
post_code(POST_START_DONE) post_code(POST_START_DONE)
xorl %eax, %eax xorl %eax, %eax
/* Enter, U-boot! */ /* Enter, U-Boot! */
call board_init_f call board_init_f
/* indicate (lack of) progress */ /* indicate (lack of) progress */
@ -184,13 +189,13 @@ board_init_f_r_trampoline:
/* Align global data to 16-byte boundary */ /* Align global data to 16-byte boundary */
andl $0xfffffff0, %esp andl $0xfffffff0, %esp
/* Setup first parameter to memcpy (and setup_gdt) */ /* Setup first parameter to memcpy() and setup_gdt() */
movl %esp, %eax movl %esp, %eax
/* Setup second parameter to memcpy */ /* Setup second parameter to memcpy() */
fs movl 0, %edx fs movl 0, %edx
/* Set third parameter to memcpy */ /* Set third parameter to memcpy() */
movl $GENERATED_GBL_DATA_SIZE, %ecx movl $GENERATED_GBL_DATA_SIZE, %ecx
/* Copy global data from CAR to SDRAM stack */ /* Copy global data from CAR to SDRAM stack */
@ -202,7 +207,7 @@ board_init_f_r_trampoline:
/* Align global descriptor table to 16-byte boundary */ /* Align global descriptor table to 16-byte boundary */
andl $0xfffffff0, %esp andl $0xfffffff0, %esp
/* Set second parameter to setup_gdt */ /* Set second parameter to setup_gdt() */
movl %esp, %edx movl %esp, %edx
/* Setup global descriptor table so gd->xyz works */ /* Setup global descriptor table so gd->xyz works */
@ -216,7 +221,7 @@ board_init_f_r_trampoline:
call car_uninit call car_uninit
1: 1:
/* Re-enter U-Boot by calling board_init_f_r */ /* Re-enter U-Boot by calling board_init_f_r() */
call board_init_f_r call board_init_f_r
die: die:
@ -230,9 +235,10 @@ blank_idt_ptr:
.p2align 2 /* force 4-byte alignment */ .p2align 2 /* force 4-byte alignment */
/* Add a multiboot header so U-Boot can be loaded by GRUB2 */
multiboot_header: multiboot_header:
/* magic */ /* magic */
.long 0x1BADB002 .long 0x1badb002
/* flags */ /* flags */
.long (1 << 16) .long (1 << 16)
/* checksum */ /* checksum */