diff mbox

[U-Boot,08/48] x86: Add various minor tidy-ups to the 32-bit startup code

Message ID 1437580180-6405-9-git-send-email-sjg@chromium.org
State Superseded
Delegated to: Simon Glass
Headers show

Commit Message

Simon Glass July 22, 2015, 3:49 p.m. UTC
Fix a typo, improve some comments and add a little more detail in some
cases.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 arch/x86/cpu/start.S | 46 ++++++++++++++++++++++++++--------------------
 1 file changed, 26 insertions(+), 20 deletions(-)

Comments

Bin Meng July 23, 2015, 3:59 a.m. UTC | #1
On Wed, Jul 22, 2015 at 11:49 PM, Simon Glass <sjg@chromium.org> wrote:
> Fix a typo, improve some comments and add a little more detail in some
> cases.
>
> Signed-off-by: Simon Glass <sjg@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@gmail.com>
diff mbox

Patch

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 */