summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/acpi/chromeos-gnvs.c11
-rw-r--r--src/arch/x86/smbios.c14
-rw-r--r--src/include/smbios.h3
3 files changed, 20 insertions, 8 deletions
diff --git a/src/acpi/chromeos-gnvs.c b/src/acpi/chromeos-gnvs.c
index 8d96769160..81c652ad3f 100644
--- a/src/acpi/chromeos-gnvs.c
+++ b/src/acpi/chromeos-gnvs.c
@@ -2,6 +2,7 @@
#include <acpi/acpi_gnvs.h>
#include <ec/google/chromeec/ec.h>
+#include <smbios.h>
#include <vendorcode/google/chromeos/gnvs.h>
void gnvs_assign_chromeos(void)
@@ -27,3 +28,13 @@ void gnvs_set_ecfw_rw(void)
gnvs_chromeos->vbt2 = ACTIVE_ECFW_RW;
}
+
+void smbios_type0_bios_version(uintptr_t address)
+{
+ chromeos_acpi_t *gnvs_chromeos = gnvs_chromeos_ptr(acpi_get_gnvs());
+ if (!gnvs_chromeos)
+ return;
+
+ /* Location of smbios_type0.bios_version() string filled with spaces. */
+ gnvs_chromeos->vbt10 = address;
+}
diff --git a/src/arch/x86/smbios.c b/src/arch/x86/smbios.c
index aaf989da19..3856acf0d2 100644
--- a/src/arch/x86/smbios.c
+++ b/src/arch/x86/smbios.c
@@ -16,9 +16,6 @@
#include <device/pci_ids.h>
#include <device/pci_def.h>
#include <device/pci.h>
-#if CONFIG(CHROMEOS)
-#include <vendorcode/google/chromeos/gnvs.h>
-#endif
#include <drivers/vpd/vpd.h>
#include <stdlib.h>
@@ -411,11 +408,12 @@ static int smbios_write_type0(unsigned long *current, int handle)
t->vendor = smbios_add_string(t->eos, "coreboot");
t->bios_release_date = smbios_add_string(t->eos, coreboot_dmi_date);
-#if CONFIG(CHROMEOS) && CONFIG(HAVE_ACPI_TABLES)
- u32 version_offset = (u32)smbios_string_table_len(t->eos);
- /* SMBIOS offsets start at 1 rather than 0 */
- chromeos_get_chromeos_acpi()->vbt10 = (uintptr_t)t->eos + (version_offset - 1);
-#endif
+ if (CONFIG(CHROMEOS)) {
+ uintptr_t version_address = (uintptr_t)t->eos;
+ /* SMBIOS offsets start at 1 rather than 0 */
+ version_address += (u32)smbios_string_table_len(t->eos) - 1;
+ smbios_type0_bios_version(version_address);
+ }
t->bios_version = smbios_add_string(t->eos, get_bios_version());
uint32_t rom_size = CONFIG_ROM_SIZE;
rom_size = MIN(CONFIG_ROM_SIZE, 16 * MiB);
diff --git a/src/include/smbios.h b/src/include/smbios.h
index e451d17ef8..d8ac4caff2 100644
--- a/src/include/smbios.h
+++ b/src/include/smbios.h
@@ -55,6 +55,9 @@ const char *smbios_chassis_version(void);
const char *smbios_chassis_serial_number(void);
const char *smbios_processor_serial_number(void);
+/* This string could be filled late in payload. */
+void smbios_type0_bios_version(uintptr_t address);
+
void smbios_ec_revision(uint8_t *ec_major_revision, uint8_t *ec_minor_revision);
unsigned int smbios_memory_error_correction_type(struct memory_info *meminfo);