diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/drivers/intel/fsp2_0/memory_init.c | 21 | ||||
-rw-r--r-- | src/lib/tlcl.c | 10 | ||||
-rw-r--r-- | src/lib/tpm2_tlcl.c | 14 |
3 files changed, 22 insertions, 23 deletions
diff --git a/src/drivers/intel/fsp2_0/memory_init.c b/src/drivers/intel/fsp2_0/memory_init.c index 30da906819..b83356163e 100644 --- a/src/drivers/intel/fsp2_0/memory_init.c +++ b/src/drivers/intel/fsp2_0/memory_init.c @@ -12,7 +12,6 @@ */ #include <antirollback.h> -#include <arch/early_variables.h> #include <arch/io.h> #include <arch/cpu.h> #include <arch/symbols.h> @@ -34,22 +33,6 @@ #include <vboot/vboot_common.h> #include <vb2_api.h> -static uint8_t tpm_init_done CAR_GLOBAL; - -static int mrc_cache_tpm_init(void) -{ - uint8_t done = car_get_var(tpm_init_done); - - if (done) - return 0; - - if (tlcl_lib_init() != VB2_SUCCESS) - return -1; - - car_set_var(tpm_init_done, 1); - return 0; -} - static void mrc_cache_update_tpm_hash(const uint8_t *data, size_t size) { uint8_t data_hash[VB2_SHA256_DIGEST_SIZE]; @@ -74,7 +57,7 @@ static void mrc_cache_update_tpm_hash(const uint8_t *data, size_t size) return; /* Initialize TPM driver. */ - if (mrc_cache_tpm_init()) { + if (tlcl_lib_init() != VB2_SUCCESS) { printk(BIOS_ERR, "MRC: TPM driver initialization failed.\n"); return; } @@ -206,7 +189,7 @@ static int mrc_cache_verify_tpm_hash(const uint8_t *data, size_t size) } /* Initialize TPM driver. */ - if (mrc_cache_tpm_init()) { + if (tlcl_lib_init() != VB2_SUCCESS) { printk(BIOS_ERR, "MRC: TPM driver initialization failed.\n"); return 0; } diff --git a/src/lib/tlcl.c b/src/lib/tlcl.c index ccf4e8004b..0a4706b164 100644 --- a/src/lib/tlcl.c +++ b/src/lib/tlcl.c @@ -14,6 +14,7 @@ * time. */ +#include <arch/early_variables.h> #include <assert.h> #include <string.h> #include <tpm_lite/tlcl.h> @@ -139,11 +140,20 @@ static uint32_t send(const uint8_t* command) { /* Exported functions. */ +static uint8_t tlcl_init_done CAR_GLOBAL; + uint32_t tlcl_lib_init(void) { + uint8_t done = car_get_var(tlcl_init_done); + if (done) + return VB2_SUCCESS; + if (tis_init()) return VB2_ERROR_UNKNOWN; if (tis_open()) return VB2_ERROR_UNKNOWN; + + car_set_var(tlcl_init_done, 1); + return VB2_SUCCESS; } diff --git a/src/lib/tpm2_tlcl.c b/src/lib/tpm2_tlcl.c index ecf0db6058..adc4c2e990 100644 --- a/src/lib/tpm2_tlcl.c +++ b/src/lib/tpm2_tlcl.c @@ -157,16 +157,22 @@ uint32_t tlcl_get_flags(uint8_t *disable, uint8_t *deactivated, return TPM_SUCCESS; } +static uint8_t tlcl_init_done CAR_GLOBAL; + +/* This function is called directly by vboot, uses vboot return types. */ uint32_t tlcl_lib_init(void) { - /* - * This function is called directly by vboot, uses vboot return - * types. - */ + uint8_t done = car_get_var(tlcl_init_done); + if (done) + return VB2_SUCCESS; + if (tis_init()) return VB2_ERROR_UNKNOWN; if (tis_open()) return VB2_ERROR_UNKNOWN; + + car_set_var(tlcl_init_done, 1); + return VB2_SUCCESS; } |