summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/ec/google/chromeec/Kconfig5
-rw-r--r--src/ec/google/chromeec/Makefile.inc3
-rw-r--r--src/ec/google/chromeec/ec.h3
-rw-r--r--src/ec/google/chromeec/ec_skuid.c36
4 files changed, 47 insertions, 0 deletions
diff --git a/src/ec/google/chromeec/Kconfig b/src/ec/google/chromeec/Kconfig
index b33864f09e..554677c387 100644
--- a/src/ec/google/chromeec/Kconfig
+++ b/src/ec/google/chromeec/Kconfig
@@ -100,6 +100,11 @@ config EC_GOOGLE_CHROMEEC_SPI_CHIP
hex
default 0x0
+config EC_GOOGLE_CHROMEEC_SKUID
+ def_bool n
+ help
+ Provides common routine for reporting the skuid to ChromeOS.
+
config EC_GOOGLE_CHROMEEC_BOARDNAME
depends on EC_GOOGLE_CHROMEEC
string "Chrome EC board name for EC"
diff --git a/src/ec/google/chromeec/Makefile.inc b/src/ec/google/chromeec/Makefile.inc
index 4994480baa..b57333e202 100644
--- a/src/ec/google/chromeec/Makefile.inc
+++ b/src/ec/google/chromeec/Makefile.inc
@@ -6,6 +6,9 @@ romstage-$(CONFIG_EC_GOOGLE_CHROMEEC_BOARDID) += ec_boardid.c
ramstage-$(CONFIG_EC_GOOGLE_CHROMEEC_BOARDID) += ec_boardid.c
smm-$(CONFIG_EC_GOOGLE_CHROMEEC_BOARDID) += ec_boardid.c
+romstage-$(CONFIG_EC_GOOGLE_CHROMEEC_SKUID) += ec_skuid.c
+ramstage-$(CONFIG_EC_GOOGLE_CHROMEEC_SKUID) += ec_skuid.c
+
bootblock-y += ec.c
bootblock-$(CONFIG_EC_GOOGLE_CHROMEEC_LPC) += ec_lpc.c
ramstage-y += ec.c crosec_proto.c vstore.c
diff --git a/src/ec/google/chromeec/ec.h b/src/ec/google/chromeec/ec.h
index 7341636819..f13b5105c2 100644
--- a/src/ec/google/chromeec/ec.h
+++ b/src/ec/google/chromeec/ec.h
@@ -89,6 +89,9 @@ int google_chromeec_cbi_get_fw_config(uint32_t *fw_config);
int google_chromeec_cbi_get_dram_part_num(char *buf, size_t bufsize);
int google_chromeec_cbi_get_oem_name(char *buf, size_t bufsize);
+uint32_t google_chromeec_get_board_sku(void);
+const char *google_chromeec_smbios_system_sku(void);
+
/* MEC uses 0x800/0x804 as register/index pair, thus an 8-byte resource. */
#define MEC_EMI_BASE 0x800
#define MEC_EMI_SIZE 8
diff --git a/src/ec/google/chromeec/ec_skuid.c b/src/ec/google/chromeec/ec_skuid.c
new file mode 100644
index 0000000000..f8fc203c47
--- /dev/null
+++ b/src/ec/google/chromeec/ec_skuid.c
@@ -0,0 +1,36 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright 2020 The coreboot project Authors.
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+#include <stddef.h>
+#include <boardid.h>
+#include <ec/google/chromeec/ec.h>
+#include <console/console.h>
+#include <string.h>
+
+#define SKU_UNKNOWN 0xFFFFFFFF
+
+uint32_t google_chromeec_get_board_sku(void)
+{
+ MAYBE_STATIC_NONZERO uint32_t sku_id = SKU_UNKNOWN;
+
+ if (sku_id != SKU_UNKNOWN)
+ return sku_id;
+
+ if (google_chromeec_cbi_get_sku_id(&sku_id))
+ sku_id = SKU_UNKNOWN;
+
+ return sku_id;
+}
+
+const char *google_chromeec_smbios_system_sku(void)
+{
+ static char sku_str[14]; /* sku{0..2147483647} */
+ uint32_t sku_id = google_chromeec_get_board_sku();
+ snprintf(sku_str, sizeof(sku_str), "sku%u", sku_id);
+ return sku_str;
+}