[coreboot-gerrit] New patch to review for coreboot: Provide CAR decoration for tpm2 statics

Martin Roth (martinroth@google.com) gerrit at coreboot.org
Tue Aug 30 18:25:52 CEST 2016


Martin Roth (martinroth at google.com) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/16366

-gerrit

commit 487d435ec1a173ae5bdd7396d170a740c0442e47
Author: Victor Prupis <vprupis at google.com>
Date:   Fri Aug 19 10:45:04 2016 -0700

    Provide CAR decoration for tpm2 statics
    
    Decorated tpm2 statics with CAR_GLOBAL
    
    BUG=chrome-os-partner:55083
    BRANCH=none
    TEST=none
    
    Change-Id: I85620d5c6ffddab5514c01c2c652670bf33b4e7e
    Signed-off-by: Martin Roth <martinroth at chromium.org>
    Original-Commit-Id: ae43d3bb7fed5b891ed38cd268bfe4e1416b77e2
    Original-Change-Id: I871442ec096836a86870f8d53a3058c9c040cff8
    Original-Signed-off-by: Victor Prupis <vprupis at google.com>
    Original-Reviewed-on: https://chromium-review.googlesource.com/373243
    Original-Commit-Ready: Stefan Reinauer <reinauer at google.com>
    Original-Tested-by: Stefan Reinauer <reinauer at google.com>
    Original-Reviewed-by: Aaron Durbin <adurbin at chromium.org>
---
 src/lib/tpm2_marshaling.c | 11 +++++++----
 src/lib/tpm2_tlcl.c       | 13 ++++++++-----
 2 files changed, 15 insertions(+), 9 deletions(-)

diff --git a/src/lib/tpm2_marshaling.c b/src/lib/tpm2_marshaling.c
index ab9a928..f4fd3cb 100644
--- a/src/lib/tpm2_marshaling.c
+++ b/src/lib/tpm2_marshaling.c
@@ -4,6 +4,7 @@
  * found in the LICENSE file.
  */
 
+#include <arch/early_variables.h>
 #include <commonlib/endian.h>
 #include <console/console.h>
 #include <stdlib.h>
@@ -11,7 +12,7 @@
 
 #include "tpm2_marshaling.h"
 
-static uint16_t tpm_tag;  /* Depends on the command type. */
+static uint16_t tpm_tag CAR_GLOBAL;  /* Depends on the command type. */
 
 /*
  * Each unmarshaling function receives a pointer to the buffer pointer and a
@@ -268,7 +269,7 @@ static void marshal_common_session_header(void **buffer,
 	int i;
 	struct tpm2_session_header session_header;
 
-	tpm_tag = TPM_ST_SESSIONS;
+	car_set_var(tpm_tag, TPM_ST_SESSIONS);
 
 	for (i = 0; i < handle_count; i++)
 		marshal_TPM_HANDLE(buffer, handles[i], buffer_space);
@@ -380,7 +381,7 @@ int tpm_marshal_command(TPM_CC command, void *tpm_command_body,
 	size_t body_size = max_body_size;
 
 	/* Will be modified when marshaling some commands. */
-	tpm_tag = TPM_ST_NO_SESSIONS;
+	car_set_var(tpm_tag, TPM_ST_NO_SESSIONS);
 
 	switch (command) {
 	case TPM2_Startup:
@@ -437,7 +438,9 @@ int tpm_marshal_command(TPM_CC command, void *tpm_command_body,
 		/* Total size includes the header size. */
 		marshaled_size += sizeof(struct tpm_header);
 
-		marshal_u16(&buffer, tpm_tag, &header_room);
+		uint16_t tpm_tag_value = car_get_var(tpm_tag);
+
+		marshal_u16(&buffer, tpm_tag_value, &header_room);
 		marshal_u32(&buffer, marshaled_size, &header_room);
 		marshal_u32(&buffer, command, &header_room);
 		return marshaled_size;
diff --git a/src/lib/tpm2_tlcl.c b/src/lib/tpm2_tlcl.c
index c8e7e90..7bfd40d 100644
--- a/src/lib/tpm2_tlcl.c
+++ b/src/lib/tpm2_tlcl.c
@@ -4,6 +4,7 @@
  * found in the LICENSE file.
  */
 
+#include <arch/early_variables.h>
 #include <console/console.h>
 #include <endian.h>
 #include <lib/tpm2_tlcl_structures.h>
@@ -24,10 +25,12 @@ static void *tpm_process_command(TPM_CC command, void *command_body)
 	ssize_t out_size;
 	size_t in_size;
 	/* Command/response buffer. */
-	static uint8_t cr_buffer[TPM_BUFFER_SIZE];
+	static uint8_t cr_buffer[TPM_BUFFER_SIZE] CAR_GLOBAL;
+
+	uint8_t *cr_buffer_ptr = car_get_var_ptr(cr_buffer);
 
 	out_size = tpm_marshal_command(command, command_body,
-				       cr_buffer, sizeof(cr_buffer));
+				       cr_buffer_ptr, sizeof(cr_buffer));
 	if (out_size < 0) {
 		printk(BIOS_ERR, "command %#x, cr size %zd\n",
 		       command, out_size);
@@ -35,13 +38,13 @@ static void *tpm_process_command(TPM_CC command, void *command_body)
 	}
 
 	in_size = sizeof(cr_buffer);
-	if (tis_sendrecv(cr_buffer, out_size,
-			 cr_buffer, &in_size)) {
+	if (tis_sendrecv(cr_buffer_ptr, out_size,
+			 cr_buffer_ptr, &in_size)) {
 		printk(BIOS_ERR, "tpm transaction failed\n");
 		return NULL;
 	}
 
-	return tpm_unmarshal_response(command, cr_buffer, in_size);
+	return tpm_unmarshal_response(command, cr_buffer_ptr, in_size);
 }
 
 



More information about the coreboot-gerrit mailing list