summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/drivers/intel/fsp2_0/memory_init.c21
-rw-r--r--src/lib/tlcl.c10
-rw-r--r--src/lib/tpm2_tlcl.c14
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;
}