Re: [RESEND PATCH v3 6/7] x86: Add a way to detect running from coreboot

2020-04-23 Thread Bin Meng
Hi Simon,

On Thu, Apr 9, 2020 at 2:58 AM Simon Glass  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 
> ---
>
> 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


[RESEND PATCH v3 6/7] x86: Add a way to detect running from coreboot

2020-04-08 Thread Simon Glass
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 
---

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) {
+   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);
 /*
-- 
2.26.0.292.g33ef6b2f38-goog