Message ID | 20200708033246.2626378-19-sjg@chromium.org |
---|---|
State | Superseded |
Headers | show |
Series | x86: Programmatic generation of ACPI tables (Part C) | expand |
Hi Simon, -----"Simon Glass" <sjg at chromium.org> schrieb: ----- > Betreff: [PATCH v2 38/44] x86: Store the coreboot table address in global_data > > At present this information is used to locate and parse the tables but is > not stored. Store it so that we can display it to the user, e.g. with the > 'bdinfo' command. > > Signed-off-by: Simon Glass <sjg at chromium.org> > Reviewed-by: Bin Meng <bmeng.cn at gmail.com> > --- > > (no changes since v1) > > arch/x86/cpu/coreboot/tables.c | 8 +++++++- > arch/x86/cpu/i386/cpu.c | 7 ++++++- > arch/x86/include/asm/global_data.h | 1 + > 3 files changed, 14 insertions(+), 2 deletions(-) > > diff --git a/arch/x86/cpu/coreboot/tables.c b/arch/x86/cpu/coreboot/tables.c > index a5d31d1dea..1594b4a8b2 100644 > --- a/arch/x86/cpu/coreboot/tables.c > +++ b/arch/x86/cpu/coreboot/tables.c > @@ -10,6 +10,8 @@ > #include <net.h> > #include <asm/arch/sysinfo.h> > > +DECLARE_GLOBAL_DATA_PTR; > + > /* > * This needs to be in the .data section so that it's copied over during > * relocation. By default it's put in the .bss section which is simply filled > @@ -243,6 +245,10 @@ int get_coreboot_info(struct sysinfo_t *info) > if (addr < 0) > return addr; > ret = cb_parse_header((void *)addr, 0x1000, info); > + if (!ret) > + return -ENOENT; > + gd->arch.coreboot_table = addr; > + gd->flags |= GD_FLG_SKIP_LL_INIT; Nit: Could you add to the commit message that GD_FLG_SKIP_LL_INIT is handled differently after this commit? Currently it only describes storing the coreboot table address. > > - return ret == 1 ? 0 : -ENOENT; > + return 0; > } > diff --git a/arch/x86/cpu/i386/cpu.c b/arch/x86/cpu/i386/cpu.c > index fca3f79b69..8f342dd06e 100644 > --- a/arch/x86/cpu/i386/cpu.c > +++ b/arch/x86/cpu/i386/cpu.c > @@ -456,10 +456,15 @@ int x86_cpu_init_f(void) > > int x86_cpu_reinit_f(void) > { > + long addr; > + > setup_identity(); > setup_pci_ram_top(); > - if (locate_coreboot_table() >= 0) > + addr = locate_coreboot_table(); > + if (addr >= 0) { > + gd->arch.coreboot_table = addr; > gd->flags |= GD_FLG_SKIP_LL_INIT; > + } > > return 0; > } > diff --git a/arch/x86/include/asm/global_data.h b/arch/x86/include/asm/global_data.h > index 5bc251c0dd..3e4044593c 100644 > --- a/arch/x86/include/asm/global_data.h > +++ b/arch/x86/include/asm/global_data.h > @@ -123,6 +123,7 @@ struct arch_global_data { > #endif > void *itss_priv; /* Private ITSS data pointer */ > ulong acpi_start; /* Start address of ACPI tables */ > + ulong coreboot_table; /* Address of coreboot table */ > }; > > #endif > -- > 2.27.0.383.g050319c2ae-goog Reviewed-by: Wolfgang Wallner <wolfgang.wallner at br-automation.com>
diff --git a/arch/x86/cpu/coreboot/tables.c b/arch/x86/cpu/coreboot/tables.c index a5d31d1dea..1594b4a8b2 100644 --- a/arch/x86/cpu/coreboot/tables.c +++ b/arch/x86/cpu/coreboot/tables.c @@ -10,6 +10,8 @@ #include <net.h> #include <asm/arch/sysinfo.h> +DECLARE_GLOBAL_DATA_PTR; + /* * This needs to be in the .data section so that it's copied over during * relocation. By default it's put in the .bss section which is simply filled @@ -243,6 +245,10 @@ int get_coreboot_info(struct sysinfo_t *info) if (addr < 0) return addr; ret = cb_parse_header((void *)addr, 0x1000, info); + if (!ret) + return -ENOENT; + gd->arch.coreboot_table = addr; + gd->flags |= GD_FLG_SKIP_LL_INIT; - return ret == 1 ? 0 : -ENOENT; + return 0; } diff --git a/arch/x86/cpu/i386/cpu.c b/arch/x86/cpu/i386/cpu.c index fca3f79b69..8f342dd06e 100644 --- a/arch/x86/cpu/i386/cpu.c +++ b/arch/x86/cpu/i386/cpu.c @@ -456,10 +456,15 @@ int x86_cpu_init_f(void) int x86_cpu_reinit_f(void) { + long addr; + setup_identity(); setup_pci_ram_top(); - if (locate_coreboot_table() >= 0) + addr = locate_coreboot_table(); + if (addr >= 0) { + gd->arch.coreboot_table = addr; gd->flags |= GD_FLG_SKIP_LL_INIT; + } return 0; } diff --git a/arch/x86/include/asm/global_data.h b/arch/x86/include/asm/global_data.h index 5bc251c0dd..3e4044593c 100644 --- a/arch/x86/include/asm/global_data.h +++ b/arch/x86/include/asm/global_data.h @@ -123,6 +123,7 @@ struct arch_global_data { #endif void *itss_priv; /* Private ITSS data pointer */ ulong acpi_start; /* Start address of ACPI tables */ + ulong coreboot_table; /* Address of coreboot table */ }; #endif