@@ -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) {
+ 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;
}
@@ -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);
/*
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 at 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(+)