[U-Boot] [PATCH 08/48] x86: Add various minor tidy-ups to the 32-bit startup code
Bin Meng
bmeng.cn at gmail.com
Thu Jul 23 05:59:40 CEST 2015
On Wed, Jul 22, 2015 at 11:49 PM, Simon Glass <sjg at chromium.org> wrote:
> Fix a typo, improve some comments and add a little more detail in some
> cases.
>
> Signed-off-by: Simon Glass <sjg at chromium.org>
> ---
>
> arch/x86/cpu/start.S | 46 ++++++++++++++++++++++++++--------------------
> 1 file changed, 26 insertions(+), 20 deletions(-)
>
> diff --git a/arch/x86/cpu/start.S b/arch/x86/cpu/start.S
> index 00e585e..7ef8b88 100644
> --- a/arch/x86/cpu/start.S
> +++ b/arch/x86/cpu/start.S
> @@ -25,11 +25,11 @@
> .globl _x86boot_start
> _x86boot_start:
> /*
> - * This is the fail safe 32-bit bootstrap entry point. The
> - * following code is not executed from a cold-reset (actually, a
> - * lot of it is, but from real-mode after cold reset. It is
> - * repeated here to put the board into a state as close to cold
> - * reset as necessary)
> + * This is the fail-safe 32-bit bootstrap entry point.
> + *
> + * This code is used when booting from another boot loader like
> + * coreboot or EFI. So we repeat some of the same init found in
> + * start16.
> */
> cli
> cld
> @@ -45,15 +45,15 @@ _x86boot_start:
> jmp 1f
> _start:
> /*
> - * This is the 32-bit cold-reset entry point. Initialize %bx to 0
> - * in case we're preceeded by some sort of boot stub.
> + * This is the 32-bit cold-reset entry point, coming from start16.
> + * Set %bx to 0 to indicate this.
> */
> movw $GD_FLG_COLD_BOOT, %bx
> 1:
> /* Save BIST */
> 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
> movw %ax, %fs
> movw %ax, %ds
> @@ -64,7 +64,11 @@ _start:
> /* Clear the interrupt vectors */
> 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
> .globl 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,
> * 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. 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:
> *
> @@ -97,7 +101,7 @@ car_init_ret:
> #endif
> #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.
> */
> #endif
> @@ -137,17 +141,18 @@ skip_hob:
> movl %esp, %ecx
>
> #if defined(CONFIG_SYS_MALLOC_F_LEN)
> + /* Set up the pre-relocation malloc pool */
> subl $CONFIG_SYS_MALLOC_F_LEN, %esp
> movl %eax, %edx
> addl $GD_MALLOC_BASE, %edx
> movl %esp, (%edx)
> #endif
> - /* Store BIST */
> + /* Store BIST into global_data */
> movl %eax, %edx
> addl $GD_BIST, %edx
> movl %ebp, (%edx)
>
> - /* Set second parameter to setup_gdt */
> + /* Set second parameter to setup_gdt() */
> movl %ecx, %edx
>
> /* Setup global descriptor table so gd->xyz works */
> @@ -157,7 +162,7 @@ skip_hob:
> post_code(POST_START_DONE)
> xorl %eax, %eax
>
> - /* Enter, U-boot! */
> + /* Enter, U-Boot! */
> call board_init_f
>
> /* indicate (lack of) progress */
> @@ -184,13 +189,13 @@ board_init_f_r_trampoline:
> /* Align global data to 16-byte boundary */
> andl $0xfffffff0, %esp
>
> - /* Setup first parameter to memcpy (and setup_gdt) */
> + /* Setup first parameter to memcpy() and setup_gdt() */
> movl %esp, %eax
>
> - /* Setup second parameter to memcpy */
> + /* Setup second parameter to memcpy() */
> fs movl 0, %edx
>
> - /* Set third parameter to memcpy */
> + /* Set third parameter to memcpy() */
> movl $GENERATED_GBL_DATA_SIZE, %ecx
>
> /* 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 */
> andl $0xfffffff0, %esp
>
> - /* Set second parameter to setup_gdt */
> + /* Set second parameter to setup_gdt() */
> movl %esp, %edx
>
> /* Setup global descriptor table so gd->xyz works */
> @@ -216,7 +221,7 @@ board_init_f_r_trampoline:
>
> call car_uninit
> 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
>
> die:
> @@ -230,9 +235,10 @@ blank_idt_ptr:
>
> .p2align 2 /* force 4-byte alignment */
>
> + /* Add a multiboot header so U-Boot can be loaded by GRUB2 */
> multiboot_header:
> /* magic */
> - .long 0x1BADB002
> + .long 0x1badb002
> /* flags */
> .long (1 << 16)
> /* checksum */
> --
Reviewed-by: Bin Meng <bmeng.cn at gmail.com>
More information about the U-Boot
mailing list