Add support for the TPM2_Selftest command. Change the command file and the help accordingly.
Signed-off-by: Miquel Raynal <miquel.ray...@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 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot