summaryrefslogtreecommitdiff
path: root/src/mainboard/google/dedede
diff options
context:
space:
mode:
Diffstat (limited to 'src/mainboard/google/dedede')
-rw-r--r--src/mainboard/google/dedede/Kconfig1
-rw-r--r--src/mainboard/google/dedede/Makefile.inc1
-rw-r--r--src/mainboard/google/dedede/board_info.c80
-rw-r--r--src/mainboard/google/dedede/variants/baseboard/include/baseboard/variants.h8
4 files changed, 90 insertions, 0 deletions
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 <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);
+}
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__ */