From 43e269239e43ad15b7324950e4b986a58abe766b Mon Sep 17 00:00:00 2001 From: Wonkyu Kim Date: Mon, 1 Nov 2021 20:55:25 -0700 Subject: src/lib: Add FW_CONFIG_SOURCE_VPD Read fw_config value from VPD. This new option can be used where chrome EC is not supported like pre-silicon platform and fw_config can be updated by VPD tool in OS. TEST= boot to OS and read fw_config from vpd 1. Boot to OS 2. Write "fw_config" in VPD ex) vpd -i "RW_VPD" -s "fw_config"="1" 3. reboot and check fw_config value from coreboot log Signed-off-by: Wonkyu Kim Change-Id: I4df7d5612e18957416a40ab854fa63c8b11b4216 Reviewed-on: https://review.coreboot.org/c/coreboot/+/58839 Tested-by: build bot (Jenkins) Reviewed-by: Tim Wawrzynczak --- src/lib/fw_config.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'src/lib/fw_config.c') diff --git a/src/lib/fw_config.c b/src/lib/fw_config.c index 3546736b7b..72cf225cae 100644 --- a/src/lib/fw_config.c +++ b/src/lib/fw_config.c @@ -11,6 +11,7 @@ #include #include #include +#include uint64_t fw_config_get(void) { @@ -44,6 +45,17 @@ uint64_t fw_config_get(void) fw_config_value); } + if (CONFIG(FW_CONFIG_SOURCE_VPD) && fw_config_value == UNDEFINED_FW_CONFIG) { + int vpd_value; + if (vpd_get_int("fw_config", VPD_RW_THEN_RO, &vpd_value)) { + fw_config_value = vpd_value; + printk(BIOS_INFO, "FW_CONFIG value from VPD is 0x%" PRIx64 "\n", + fw_config_value); + } else + printk(BIOS_WARNING, "%s: Could not get fw_config from vpd\n", + __func__); + } + return fw_config_value; } -- cgit v1.2.3