From 23e73613348f08d7aab3832063c94d0d66cd0bd2 Mon Sep 17 00:00:00 2001 From: Karthikeyan Ramasubramanian Date: Thu, 23 Jan 2020 00:32:50 -0700 Subject: 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 Reviewed-on: https://review.coreboot.org/c/coreboot/+/38551 Reviewed-by: Furquan Shaikh Tested-by: build bot (Jenkins) --- src/mainboard/google/dedede/Kconfig | 1 + src/mainboard/google/dedede/Makefile.inc | 1 + src/mainboard/google/dedede/board_info.c | 80 ++++++++++++++++++++++ .../baseboard/include/baseboard/variants.h | 8 +++ 4 files changed, 90 insertions(+) create mode 100644 src/mainboard/google/dedede/board_info.c (limited to 'src') diff --git a/src/mainboard/google/dedede/Kconfig b/src/mainboard/google/dedede/Kconfig index da6dc81c77..5254d16b7c 100644 --- a/src/mainboard/google/dedede/Kconfig +++ b/src/mainboard/google/dedede/Kconfig @@ -1,6 +1,7 @@ config BOARD_GOOGLE_BASEBOARD_DEDEDE def_bool n select EC_GOOGLE_CHROMEEC + select EC_GOOGLE_CHROMEEC_BOARDID select EC_GOOGLE_CHROMEEC_ESPI select HAVE_ACPI_RESUME select HAVE_ACPI_TABLES diff --git a/src/mainboard/google/dedede/Makefile.inc b/src/mainboard/google/dedede/Makefile.inc index c240dede62..2be3feb679 100644 --- a/src/mainboard/google/dedede/Makefile.inc +++ b/src/mainboard/google/dedede/Makefile.inc @@ -8,6 +8,7 @@ romstage-$(CONFIG_CHROMEOS) += chromeos.c ramstage-$(CONFIG_CHROMEOS) += chromeos.c ramstage-y += mainboard.c ramstage-y += ec.c +ramstage-y += board_info.c smm-$(CONFIG_HAVE_SMI_HANDLER) += smihandler.c 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 +#include +#include +#include +#include + +#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); +} diff --git a/src/mainboard/google/dedede/variants/baseboard/include/baseboard/variants.h b/src/mainboard/google/dedede/variants/baseboard/include/baseboard/variants.h index d7c482c172..32b2c8b4e7 100644 --- a/src/mainboard/google/dedede/variants/baseboard/include/baseboard/variants.h +++ b/src/mainboard/google/dedede/variants/baseboard/include/baseboard/variants.h @@ -20,4 +20,12 @@ const struct pad_config *variant_early_gpio_table(size_t *num); const struct pad_config *variant_sleep_gpio_table(size_t *num); const struct cros_gpio *variant_cros_gpios(size_t *num); +/** + * Get board's Hardware features as defined in FW_CONFIG + * + * @param fw_config Address where the fw_config is stored. + * @return 0 on success or negative integer for errors. + */ +int board_info_get_fw_config(uint32_t *fw_config); + #endif /*__BASEBOARD_VARIANTS_H__ */ -- cgit v1.2.3