[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