summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFurquan Shaikh <furquan@google.com>2018-07-20 13:50:16 -0700
committerFurquan Shaikh <furquan@google.com>2018-07-23 04:05:12 +0000
commit367956d58e1446ec63169d9bc08426d519da754e (patch)
tree3373c1412d49c4cf1cd1c70a537aa8bb90f3860b
parentf63422aac05434ab6e7e533e0c80411e4da44952 (diff)
mb/google/octopus: Add support for smbios_mainboard_sku
This change provides implementation of smbios_mainboard_sku that queries the EC for SKU ID using CBI. Currently, get_board_sku() is implemented as a common function for all variants since this is the only way used by all the octopus variants to query SKU ID. If this changes in the future, this function can be changed to a variant_* callback. BUG=b:111671163 TEST=Verified following on phaser: 1. "mosys platform sku" returns the SKU ID programmed in CBI 2. "dmidecode -t 1" shows SKU information as "skuXYZ" where XYZ is the SKU ID programmed in CBI. Change-Id: Ic0d344b3c13632f2ca582adc36aa337b99959712 Signed-off-by: Furquan Shaikh <furquan@google.com> Reviewed-on: https://review.coreboot.org/27560 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Jett Rink <jettrink@google.com> Reviewed-by: Justin TerAvest <teravest@chromium.org>
-rw-r--r--src/mainboard/google/octopus/mainboard.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/mainboard/google/octopus/mainboard.c b/src/mainboard/google/octopus/mainboard.c
index fc533af8a9..eda44bad11 100644
--- a/src/mainboard/google/octopus/mainboard.c
+++ b/src/mainboard/google/octopus/mainboard.c
@@ -18,10 +18,13 @@
#include <boardid.h>
#include <console/console.h>
#include <device/device.h>
+#include <ec/google/chromeec/ec.h>
#include <ec/ec.h>
#include <nhlt.h>
+#include <smbios.h>
#include <soc/gpio.h>
#include <soc/nhlt.h>
+#include <string.h>
#include <vendorcode/google/chromeos/chromeos.h>
#include <variant/ec.h>
#include <variant/gpio.h>
@@ -75,3 +78,35 @@ struct chip_operations mainboard_ops = {
.init = mainboard_init,
.enable_dev = mainboard_enable,
};
+
+#define SKU_UNKNOWN 0xFFFFFFFF
+#define SKU_MAX 255
+
+static uint32_t get_board_sku(void)
+{
+ static 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 *smbios_mainboard_sku(void)
+{
+ static char sku_str[7]; /* sku{0..255} */
+ uint32_t sku_id = get_board_sku();
+
+ if ((sku_id == SKU_UNKNOWN) || (sku_id > SKU_MAX)) {
+ printk(BIOS_ERR, "%s: Unexpected SKU ID %u\n",
+ __func__, sku_id);
+ return "";
+ }
+
+ snprintf(sku_str, sizeof(sku_str), "sku%u", sku_id);
+
+ return sku_str;
+}