
Hi Simon,
On Thu, Apr 9, 2020 at 2:58 AM Simon Glass sjg@chromium.org wrote:
If U-Boot is running from coreboot we need to skip low-level init. Add an way to detect this and to set the gd flag.
Signed-off-by: Simon Glass sjg@chromium.org
Changes in v3:
- Add new patch to detect running from coreboot
Changes in v2: None
arch/x86/cpu/i386/cpu.c | 15 +++++++++++++++ arch/x86/include/asm/u-boot-x86.h | 7 +++++++ 2 files changed, 22 insertions(+)
diff --git a/arch/x86/cpu/i386/cpu.c b/arch/x86/cpu/i386/cpu.c index c8da7f10e9b..e43444c090b 100644 --- a/arch/x86/cpu/i386/cpu.c +++ b/arch/x86/cpu/i386/cpu.c @@ -447,10 +447,25 @@ int x86_cpu_init_f(void) return 0; }
+bool x86_detect_coreboot(void) +{
u32 *ptr, *end;
/* We look for LBIO in the first 4K of RAM */
for (ptr = NULL, end = ptr + 0x400; ptr < end; ptr += 4) {
The logic here is not exactly the same as cb_parse_header(). I believe we should be consistent.
if (*ptr == 0x4f49424c) /* "LBIO" */
return true;
}
return false;
+}
int x86_cpu_reinit_f(void) { setup_identity(); setup_pci_ram_top();
if (x86_detect_coreboot())
gd->flags |= GD_FLG_NO_LL_INIT; return 0;
} diff --git a/arch/x86/include/asm/u-boot-x86.h b/arch/x86/include/asm/u-boot-x86.h index 3e5d56d0757..654880f91cb 100644 --- a/arch/x86/include/asm/u-boot-x86.h +++ b/arch/x86/include/asm/u-boot-x86.h @@ -43,6 +43,13 @@ int x86_cpu_reinit_f(void); */ int x86_cpu_init_tpl(void);
+/**
- x86_detect_coreboot() - See if U-Boot is being started from coreboot
- @return true if coreboot is running, false if U-Boot is running 'bare-metal'
- */
+bool x86_detect_coreboot(void);
int cpu_init_f(void); void setup_gdt(struct global_data *id, u64 *gdt_addr); /* --
Regards, Bin