[U-Boot] [PATCH 10/18] tpm: add TPM2_SelfTest command support
Miquel Raynal
miquel.raynal at bootlin.com
Thu Mar 8 15:40:13 UTC 2018
Add support for the TPM2_Selftest command.
Change the command file and the help accordingly.
Signed-off-by: Miquel Raynal <miquel.raynal at bootlin.com>
---
include/tpm.h | 9 +++++++--
lib/tpm.c | 36 ++++++++++++++++++++++++++++--------
2 files changed, 35 insertions(+), 10 deletions(-)
diff --git a/include/tpm.h b/include/tpm.h
index ba71bac885..38d7cb899d 100644
--- a/include/tpm.h
+++ b/include/tpm.h
@@ -31,6 +31,11 @@ enum tpm2_structures {
TPM2_ST_SESSIONS = 0x8002,
};
+enum tpm2_yes_no {
+ TPMI_YES = 1,
+ TPMI_NO = 0,
+};
+
enum tpm_startup_type {
TPM_ST_CLEAR = 0x0001,
TPM_ST_STATE = 0x0002,
@@ -476,14 +481,14 @@ int tpm_startup(enum tpm_startup_type mode);
*
* @return return code of the operation
*/
-uint32_t tpm_self_test_full(void);
+int tpm_self_test_full(void);
/**
* Issue a TPM_ContinueSelfTest command.
*
* @return return code of the operation
*/
-uint32_t tpm_continue_self_test(void);
+int tpm_continue_self_test(void);
/**
* Issue a TPM_NV_DefineSpace command. The implementation is limited
diff --git a/lib/tpm.c b/lib/tpm.c
index cd97ac7eb5..7b379b99aa 100644
--- a/lib/tpm.c
+++ b/lib/tpm.c
@@ -341,20 +341,40 @@ int tpm_startup(enum tpm_startup_type mode)
return 0;
}
-uint32_t tpm_self_test_full(void)
+int tpm_self_test_full(void)
{
- const uint8_t command[10] = {
- 0x0, 0xc1, 0x0, 0x0, 0x0, 0xa, 0x0, 0x0, 0x0, 0x50,
+ const u8 command_v1[10] = {
+ STRINGIFY16(0xc1),
+ STRINGIFY32(10),
+ STRINGIFY32(0x50),
};
- return tpm_sendrecv_command(command, NULL, NULL);
+ const u8 command_v2[12] = {
+ STRINGIFY16(TPM2_ST_NO_SESSIONS),
+ STRINGIFY32(11),
+ STRINGIFY32(TPM2_CC_SELF_TEST),
+ TPMI_YES,
+ };
+
+ return tpm_sendrecv_command(is_tpmv2 ? command_v2 : command_v1, NULL,
+ NULL);
}
-uint32_t tpm_continue_self_test(void)
+int tpm_continue_self_test(void)
{
- const uint8_t command[10] = {
- 0x0, 0xc1, 0x0, 0x0, 0x0, 0xa, 0x0, 0x0, 0x0, 0x53,
+ const u8 command_v1[10] = {
+ STRINGIFY16(0xc1),
+ STRINGIFY32(10),
+ STRINGIFY32(0x53),
};
- return tpm_sendrecv_command(command, NULL, NULL);
+ const u8 command_v2[12] = {
+ STRINGIFY16(TPM2_ST_NO_SESSIONS),
+ STRINGIFY32(11),
+ STRINGIFY32(TPM2_CC_SELF_TEST),
+ TPMI_NO,
+ };
+
+ return tpm_sendrecv_command(is_tpmv2 ? command_v2 : command_v1, NULL,
+ NULL);
}
uint32_t tpm_nv_define_space(uint32_t index, uint32_t perm, uint32_t size)
--
2.14.1
More information about the U-Boot
mailing list