diff options
author | Karthikeyan Ramasubramanian <kramasub@google.com> | 2020-01-23 00:32:50 -0700 |
---|---|---|
committer | Patrick Georgi <pgeorgi@google.com> | 2020-01-28 18:34:53 +0000 |
commit | 23e73613348f08d7aab3832063c94d0d66cd0bd2 (patch) | |
tree | 42bdcd34d81f3457655018d4a7fc8018656910f3 /src/mainboard/google/dedede/board_info.c | |
parent | 4b1bfe6d854f27f5a68950be8782555ab09b2fa9 (diff) | |
download | coreboot-23e73613348f08d7aab3832063c94d0d66cd0bd2.tar.xz |
mb/google/dedede: Add helper functions to get board_info
Add helper functions to get board's sku_id and fw_config. Enable
EC_GOOGLE_CHROMEEC_BOARDID to get board_id. Add board's SKU ID and
OEM name into SMBIOS table.
BUG=b:144768001
TEST=Build Test.
Change-Id: Id1729e245accf5acc29307a22721362fb1ce0878
Signed-off-by: Karthikeyan Ramasubramanian <kramasub@google.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/38551
Reviewed-by: Furquan Shaikh <furquan@google.com>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Diffstat (limited to 'src/mainboard/google/dedede/board_info.c')
-rw-r--r-- | src/mainboard/google/dedede/board_info.c | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/src/mainboard/google/dedede/board_info.c b/src/mainboard/google/dedede/board_info.c new file mode 100644 index 0000000000..ee89beb56d --- /dev/null +++ b/src/mainboard/google/dedede/board_info.c @@ -0,0 +1,80 @@ +/* + * This file is part of the coreboot project. + * + * Copyright 2020 The coreboot project Authors. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include <baseboard/variants.h> +#include <console/console.h> +#include <ec/google/chromeec/ec.h> +#include <smbios.h> +#include <string.h> + +#define SKU_UNKNOWN 0xffffffff +#define SKU_MAX 0x7fffffff + +static uint32_t board_info_get_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_system_sku(void) +{ + /* sku{0..2147483647} */ + static char sku_str[14]; + uint32_t sku_id = board_info_get_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; +} + +const char *smbios_mainboard_manufacturer(void) +{ + static char oem_name[32]; + static const char *manuf; + + if (manuf) + return manuf; + + if (google_chromeec_cbi_get_oem_name(&oem_name[0], + ARRAY_SIZE(oem_name)) < 0) { + printk(BIOS_ERR, "Couldn't obtain OEM name from CBI\n"); + manuf = CONFIG_MAINBOARD_SMBIOS_MANUFACTURER; + } else { + manuf = &oem_name[0]; + } + + return manuf; +} + +int board_info_get_fw_config(uint32_t *fw_config) +{ + uint32_t sku_id = board_info_get_sku(); + + /* + * FW_CONFIG can potentially have all the bits set. So check the + * sku_id to ensure that the CBI is provisioned before reading the + * FW_CONFIG. + */ + if (sku_id == SKU_UNKNOWN || sku_id > SKU_MAX) + return -1; + + return google_chromeec_cbi_get_fw_config(fw_config); +} |