[coreboot-gerrit] New patch to review for coreboot: lib/tlcl: Ensure tlcl library is initialized only once

Furquan Shaikh (furquan@google.com) gerrit at coreboot.org
Thu Nov 10 18:51:49 CET 2016


Furquan Shaikh (furquan at google.com) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/17364

-gerrit

commit 991ea1ea6f39131aad80ab44347358def871e4dc
Author: Furquan Shaikh <furquan at chromium.org>
Date:   Thu Nov 10 09:49:05 2016 -0800

    lib/tlcl: Ensure tlcl library is initialized only once
    
    Since tlcl library is used other than just vboot driver, ensure that the
    library is initialized only once per stage.
    
    BUG=chrome-os-partner:59355
    BRANCH=None
    TEST=Verified in recovery mode on reef, tlcl library is initialized only
    once in romstage.
    
    Change-Id: I6245fe9ed34f5c174341b7eea8db456b45113287
    Signed-off-by: Furquan Shaikh <furquan at chromium.org>
---
 src/drivers/intel/fsp2_0/memory_init.c | 21 ++-------------------
 src/lib/tlcl.c                         | 10 ++++++++++
 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 30da906..b833561 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 ccf4e80..65ce6a7 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 tpm_init_done CAR_GLOBAL;
+
 uint32_t tlcl_lib_init(void) {
+	uint8_t done = car_get_var(tpm_init_done);
+	if (done)
+		return VB2_SUCCESS;
+
 	if (tis_init())
 		return VB2_ERROR_UNKNOWN;
 	if (tis_open())
 		return VB2_ERROR_UNKNOWN;
+
+	car_set_var(tpm_init_done, 1);
+
 	return VB2_SUCCESS;
 }
 
diff --git a/src/lib/tpm2_tlcl.c b/src/lib/tpm2_tlcl.c
index ecf0db6..e740648 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 tpm_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(tpm_init_done);
+	if (done)
+		return VB2_SUCCESS;
+
 	if (tis_init())
 		return VB2_ERROR_UNKNOWN;
 	if (tis_open())
 		return VB2_ERROR_UNKNOWN;
+
+	car_set_var(tpm_init_done, 1);
+
 	return VB2_SUCCESS;
 }
 



More information about the coreboot-gerrit mailing list