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>
This commit is contained in:
Furquan Shaikh 2018-07-20 13:50:16 -07:00
parent f63422aac0
commit 367956d58e
1 changed files with 35 additions and 0 deletions

View File

@ -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;
}