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>
This commit is contained in:
Karthikeyan Ramasubramanian 2020-01-23 00:32:50 -07:00 committed by Patrick Georgi
parent 4b1bfe6d85
commit 23e7361334
4 changed files with 90 additions and 0 deletions

View File

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

View File

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

View File

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

View File

@ -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__ */