vendorcode/google/chromeos: Add API to read factory config
This code leverages the TPM vendor-specific function tlcl_cr50_get_factory_config() to fetch the device's factory configuration. BUG=b:317880956 TEST=Able to retrieve the factory config from google/screebo. Change-Id: I34f47c9a94972534cda656ef624ef12ed5ddeb06 Signed-off-by: Subrata Banik <subratabanik@google.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/79737 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Kapil Porwal <kapilporwal@google.com>
This commit is contained in:
parent
0f90c5d5f9
commit
73505f1f9e
|
@ -9,6 +9,7 @@ ramstage-$(CONFIG_CHROMEOS_DISABLE_PLATFORM_HIERARCHY_ON_RESUME) += tpm2.c
|
|||
ramstage-$(CONFIG_HAVE_REGULATORY_DOMAIN) += wrdd.c
|
||||
ramstage-$(CONFIG_USE_SAR) += sar.c
|
||||
ramstage-$(CONFIG_TPM_GOOGLE) += cr50_enable_update.c
|
||||
ramstage-$(CONFIG_TPM_GOOGLE) += tpm_factory_config.c
|
||||
|
||||
romstage-$(CONFIG_CHROMEOS_CSE_BOARD_RESET_OVERRIDE) += cse_board_reset.c
|
||||
ramstage-$(CONFIG_CHROMEOS_CSE_BOARD_RESET_OVERRIDE) += cse_board_reset.c
|
||||
|
|
|
@ -26,6 +26,12 @@ void mainboard_prepare_cr50_reset(void);
|
|||
void cbmem_add_vpd_calibration_data(void);
|
||||
void chromeos_set_me_hash(u32*, int);
|
||||
void chromeos_set_ramoops(void *ram_oops, size_t size);
|
||||
/*
|
||||
* The factory config space is a one-time programmable info page.
|
||||
* For the unprovisioned one, the read will be 0x0.
|
||||
* Return `-1` in case of error.
|
||||
*/
|
||||
int64_t chromeos_get_factory_config(void);
|
||||
|
||||
/*
|
||||
* Declaration for mainboards to use to generate ACPI-specific ChromeOS needs.
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
|
||||
#include <console/console.h>
|
||||
#include <security/tpm/tss.h>
|
||||
#include <vendorcode/google/chromeos/chromeos.h>
|
||||
|
||||
int64_t chromeos_get_factory_config(void)
|
||||
{
|
||||
static int64_t factory_config = -1;
|
||||
|
||||
if (factory_config >= 0)
|
||||
return factory_config;
|
||||
|
||||
/* Initialize TPM driver. */
|
||||
tpm_result_t rc = tlcl_lib_init();
|
||||
if (rc != TPM_SUCCESS) {
|
||||
printk(BIOS_ERR, "%s:%d - tlcl_lib_init() failed: %#x\n",
|
||||
__func__, __LINE__, rc);
|
||||
return -1;
|
||||
}
|
||||
|
||||
rc = tlcl_cr50_get_factory_config((uint64_t *)&factory_config);
|
||||
|
||||
if (rc != TPM_SUCCESS) {
|
||||
printk(BIOS_ERR, "%s:%d - tlcl_cr50_get_factory_config() failed: %#x\n",
|
||||
__func__, __LINE__, rc);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return factory_config;
|
||||
}
|
Loading…
Reference in New Issue