mirror of
https://git.codelinaro.org/clo/qsdk/oss/boot/u-boot-2016.git
synced 2025-12-10 07:44:53 +01:00
x86: Add support for passing tables into U-Boot
The EFI stub provides information to U-Boot in a table. This includes the memory map which is needed to decide where to relocate U-Boot. Collect this information in the early init code and store it in global_data. Fix up the BIST code at the same time since we don't have it when booting from EFI and can assume it is 0. Signed-off-by: Simon Glass <sjg@chromium.org> Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
This commit is contained in:
parent
96a8d409a7
commit
42fde30500
3 changed files with 20 additions and 1 deletions
|
|
@ -42,6 +42,13 @@ _x86boot_start:
|
||||||
|
|
||||||
/* Tell 32-bit code it is being entered from an in-RAM copy */
|
/* Tell 32-bit code it is being entered from an in-RAM copy */
|
||||||
movl $GD_FLG_WARM_BOOT, %ebx
|
movl $GD_FLG_WARM_BOOT, %ebx
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Zero the BIST (Built-In Self Test) value since we don't have it.
|
||||||
|
* It must be 0 or the previous loader would have reported an error.
|
||||||
|
*/
|
||||||
|
movl $0, %ebp
|
||||||
|
|
||||||
jmp 1f
|
jmp 1f
|
||||||
|
|
||||||
/* Add a way for tools to discover the _start entry point */
|
/* Add a way for tools to discover the _start entry point */
|
||||||
|
|
@ -53,9 +60,13 @@ _start:
|
||||||
* Set %ebx to GD_FLG_COLD_BOOT to indicate this.
|
* Set %ebx to GD_FLG_COLD_BOOT to indicate this.
|
||||||
*/
|
*/
|
||||||
movl $GD_FLG_COLD_BOOT, %ebx
|
movl $GD_FLG_COLD_BOOT, %ebx
|
||||||
1:
|
|
||||||
/* Save BIST */
|
/* Save BIST */
|
||||||
movl %eax, %ebp
|
movl %eax, %ebp
|
||||||
|
1:
|
||||||
|
|
||||||
|
/* Save table pointer */
|
||||||
|
movl %ecx, %esi
|
||||||
|
|
||||||
/* Load the segement registers 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
|
||||||
|
|
@ -133,7 +144,13 @@ car_init_ret:
|
||||||
movl %esi, (%edx)
|
movl %esi, (%edx)
|
||||||
|
|
||||||
skip_hob:
|
skip_hob:
|
||||||
|
#else
|
||||||
|
/* Store table pointer */
|
||||||
|
movl %esp, %edx
|
||||||
|
addl $GD_TABLE, %edx
|
||||||
|
movl %esi, (%edx)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Setup first parameter to setup_gdt, pointer to global_data */
|
/* Setup first parameter to setup_gdt, pointer to global_data */
|
||||||
movl %esp, %eax
|
movl %esp, %eax
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -69,6 +69,7 @@ struct arch_global_data {
|
||||||
char *mrc_output;
|
char *mrc_output;
|
||||||
unsigned int mrc_output_len;
|
unsigned int mrc_output_len;
|
||||||
void *gdt; /* Global descriptor table */
|
void *gdt; /* Global descriptor table */
|
||||||
|
ulong table; /* Table pointer from previous loader */
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -21,5 +21,6 @@ int main(void)
|
||||||
#ifdef CONFIG_HAVE_FSP
|
#ifdef CONFIG_HAVE_FSP
|
||||||
DEFINE(GD_HOB_LIST, offsetof(gd_t, arch.hob_list));
|
DEFINE(GD_HOB_LIST, offsetof(gd_t, arch.hob_list));
|
||||||
#endif
|
#endif
|
||||||
|
DEFINE(GD_TABLE, offsetof(gd_t, arch.table));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue