mirror of
https://github.com/brain-hackers/u-boot-brain
synced 2024-09-07 05:13:21 +09:00
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:
parent
5598facbd2
commit
da3a95d60b
@ -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 */
|
||||||
|
Loading…
Reference in New Issue
Block a user