[coreboot-gerrit] Change in coreboot[master]: mb/google/octopus: Add support to get OEM name from CBFS
Wisley Chen (Code Review)
gerrit at coreboot.org
Mon Nov 5 08:32:59 CET 2018
Wisley Chen has uploaded this change for review. ( https://review.coreboot.org/29466
Change subject: mb/google/octopus: Add support to get OEM name from CBFS
......................................................................
mb/google/octopus: Add support to get OEM name from CBFS
refer to https://review.coreboot.org/c/coreboot/+/26142
This change:
1. Allows mainboard to add OEM table to CBFS
2. Provides mainboard specific smbios_mainboard_manufacturer that reads
OEM ID from EC using CBI and compares it against the OEM ID in CBFS
table to identify the right OEM string.
BUG=b:118798180
TEST=emerge-ocotopus coreboot
Change-Id: Idd7385db9a6189d70b92d31a0aa00ed03b37404c
Signed-off-by: Wisley Chen <wisley.chen at quantatw.com>
---
M src/mainboard/google/octopus/Kconfig
M src/mainboard/google/octopus/Makefile.inc
M src/mainboard/google/octopus/mainboard.c
3 files changed, 87 insertions(+), 0 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/66/29466/1
diff --git a/src/mainboard/google/octopus/Kconfig b/src/mainboard/google/octopus/Kconfig
index f00803d..d4e8e58 100644
--- a/src/mainboard/google/octopus/Kconfig
+++ b/src/mainboard/google/octopus/Kconfig
@@ -136,4 +136,8 @@
default 1 if BOARD_GOOGLE_MEEP
default 255 if BOARD_GOOGLE_OCTOPUS
+config OEM_BIN_FILE
+ string "OEM ID table"
+ default ""
+
endif # BOARD_GOOGLE_OCTOPUS
diff --git a/src/mainboard/google/octopus/Makefile.inc b/src/mainboard/google/octopus/Makefile.inc
index 1a9adbc..9f28956 100644
--- a/src/mainboard/google/octopus/Makefile.inc
+++ b/src/mainboard/google/octopus/Makefile.inc
@@ -16,3 +16,8 @@
VARIANT_DIR:=$(call strip_quotes,$(CONFIG_VARIANT_DIR))
subdirs-y += variants/$(VARIANT_DIR)
CPPFLAGS_common += -I$(src)/mainboard/$(MAINBOARDDIR)/variants/$(VARIANT_DIR)/include
+
+# Add OEM ID table
+cbfs-files-y += oem.bin
+oem.bin-file := $(call strip_quotes,$(CONFIG_OEM_BIN_FILE))
+oem.bin-type := raw
diff --git a/src/mainboard/google/octopus/mainboard.c b/src/mainboard/google/octopus/mainboard.c
index fceb95d..6ca99f7 100644
--- a/src/mainboard/google/octopus/mainboard.c
+++ b/src/mainboard/google/octopus/mainboard.c
@@ -16,7 +16,9 @@
#include <arch/acpi.h>
#include <baseboard/variants.h>
#include <boardid.h>
+#include <cbfs.h>
#include <console/console.h>
+#include <commonlib/cbfs_serialized.h>
#include <device/device.h>
#include <device/pci_def.h>
#include <device/pci_ops.h>
@@ -180,3 +182,79 @@
/* Defer to variant for board-specific updates. */
variant_update_devtree(dev);
}
+
+#define OEM_UNKNOWN 0xff
+
+/*
+ * Read OEM ID from EC using cbi commands.
+ * Return value:
+ * Success = OEM ID read from EC
+ * Failure = OEM_UNKNOWN (0xff)
+ */
+static uint8_t read_oem_id(void)
+{
+ static uint8_t oem_id = OEM_UNKNOWN;
+ uint32_t id;
+
+ if (oem_id != OEM_UNKNOWN)
+ return oem_id;
+
+ if (google_chromeec_cbi_get_oem_id(&id))
+ return OEM_UNKNOWN;
+
+ if (id > OEM_UNKNOWN) {
+ printk(BIOS_ERR, "%s: OEM ID too big %u!\n", __func__, id);
+ return OEM_UNKNOWN;
+ }
+
+ oem_id = id;
+ printk(BIOS_DEBUG, "%s: OEM ID=%d\n", __func__, oem_id);
+
+ return oem_id;
+}
+
+/* "oem.bin" in cbfs contains array of records using the following structure. */
+struct oem_mapping {
+ uint8_t oem_id;
+ char oem_name[10];
+} __packed;
+
+/* Local buffer to read "oem.bin" */
+static char oem_bin_data[200];
+
+const char *smbios_mainboard_manufacturer(void)
+{
+ uint8_t oem_id = read_oem_id();
+ const struct oem_mapping *oem_entry = (void *)&oem_bin_data;
+ size_t oem_data_size;
+ size_t curr = 0;
+ static const char *manuf;
+
+ if (manuf)
+ return manuf;
+
+ /* If OEM ID cannot be determined, return default manuf string. */
+ if (oem_id == OEM_UNKNOWN)
+ return CONFIG_MAINBOARD_SMBIOS_MANUFACTURER;
+
+ oem_data_size = cbfs_boot_load_file("oem.bin", oem_bin_data,
+ sizeof(oem_bin_data),
+ CBFS_TYPE_RAW);
+
+ while ((curr < oem_data_size) &&
+ ((oem_data_size - curr) >= sizeof(*oem_entry))) {
+ if (oem_id == oem_entry->oem_id) {
+ manuf = oem_entry->oem_name;
+ break;
+ }
+ curr += sizeof(*oem_entry);
+ oem_entry++;
+ }
+
+ if (manuf == NULL)
+ manuf = CONFIG_MAINBOARD_SMBIOS_MANUFACTURER;
+
+ return manuf;
+}
+
+
--
To view, visit https://review.coreboot.org/29466
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings
Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: Idd7385db9a6189d70b92d31a0aa00ed03b37404c
Gerrit-Change-Number: 29466
Gerrit-PatchSet: 1
Gerrit-Owner: Wisley Chen <wisley.chen at quantatw.com>
Gerrit-Reviewer: Wisley Chen <wisley.chen at quanta.corp-partner.google.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.coreboot.org/pipermail/coreboot-gerrit/attachments/20181105/7d396bd1/attachment.html>
More information about the coreboot-gerrit
mailing list