summaryrefslogtreecommitdiff
path: root/firmware/lib/tpm2_lite/tlcl.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/lib/tpm2_lite/tlcl.c')
-rw-r--r--firmware/lib/tpm2_lite/tlcl.c39
1 files changed, 31 insertions, 8 deletions
diff --git a/firmware/lib/tpm2_lite/tlcl.c b/firmware/lib/tpm2_lite/tlcl.c
index 9d7e1dfb..a03125d3 100644
--- a/firmware/lib/tpm2_lite/tlcl.c
+++ b/firmware/lib/tpm2_lite/tlcl.c
@@ -10,6 +10,7 @@
#include "rollback_index.h"
#include "tpm2_marshaling.h"
#include "utility.h"
+#include "tlcl.h"
static struct tpm2_response *tpm_process_command(TPM_CC command,
void *command_body)
@@ -42,19 +43,40 @@ static struct tpm2_response *tpm_process_command(TPM_CC command,
return response;
}
-uint32_t TlclLibInit(void)
+static uint32_t tlcl_read_ph_disabled(void)
{
- return VbExTpmInit();
+ uint32_t rv;
+ TPM_STCLEAR_FLAGS flags;
+
+ rv = TlclGetSTClearFlags(&flags);
+ if (rv != TPM_SUCCESS)
+ return rv;
+
+ tpm_set_ph_disabled(!flags.phEnable);
+
+ return TPM_SUCCESS;
}
-uint32_t TlclLibClose(void)
+uint32_t TlclLibInit(void)
{
- return VbExTpmClose();
+ uint32_t rv;
+
+ rv = VbExTpmInit();
+ if (rv != TPM_SUCCESS)
+ return rv;
+
+ rv = tlcl_read_ph_disabled();
+ if (rv != TPM_SUCCESS) {
+ TlclLibClose();
+ return rv;
+ }
+
+ return TPM_SUCCESS;
}
-void TlclLibAccessAsUser(void)
+uint32_t TlclLibClose(void)
{
- tpm_set_ph_disabled(1);
+ return VbExTpmClose();
}
uint32_t TlclSendReceive(const uint8_t *request, uint8_t *response,
@@ -100,7 +122,7 @@ uint32_t TlclContinueSelfTest(void)
return TPM_SUCCESS;
}
-int32_t TlclDefineSpace(uint32_t index, uint32_t perm, uint32_t size)
+uint32_t TlclDefineSpace(uint32_t index, uint32_t perm, uint32_t size)
{
VBDEBUG(("%s called, NOT YET IMPLEMENTED\n", __func__));
return TPM_SUCCESS;
@@ -250,6 +272,7 @@ static uint32_t tlcl_disable_platform_hierarchy(void)
if (!response || response->hdr.tpm_code)
return TPM_E_INTERNAL_INCONSISTENCY;
+ tpm_set_ph_disabled(1);
return TPM_SUCCESS;
}
@@ -334,7 +357,7 @@ uint32_t TlclWrite(uint32_t index, const void *data, uint32_t length)
return TPM_SUCCESS;
}
-int32_t TlclPCRRead(uint32_t index, void *data, uint32_t length)
+uint32_t TlclPCRRead(uint32_t index, void *data, uint32_t length)
{
VBDEBUG(("%s called, NOT YET IMPLEMENTED\n", __func__));
return TPM_SUCCESS;