x86: Add various minor tidy-ups to the 32-bit startup code
authorSimon Glass <sjg@chromium.org>
Fri, 31 Jul 2015 15:31:25 +0000 (09:31 -0600)
committerSimon Glass <sjg@chromium.org>
Wed, 5 Aug 2015 14:42:40 +0000 (08:42 -0600)
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>
arch/x86/cpu/start.S

index 00e585e19bfccdd4e0465c9575b98d137fc811b4..7ef8b880ec600971207ad33caed4208b36c6cdc5 100644 (file)
 .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 */