tpm: add TPM2_SelfTest command support
Add support for the TPM2_Selftest command. Change the command file and the help accordingly. Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com> Reviewed-by: Simon Glass <sjg@chromium.org> Reviewed-by: Tom Rini <trini@konsulko.com>
This commit is contained in:
		
							parent
							
								
									1922df2010
								
							
						
					
					
						commit
						2dc6d97e1e
					
				
							
								
								
									
										26
									
								
								cmd/tpm-v2.c
								
								
								
								
							
							
						
						
									
										26
									
								
								cmd/tpm-v2.c
								
								
								
								
							|  | @ -31,10 +31,31 @@ static int do_tpm2_startup(cmd_tbl_t *cmdtp, int flag, int argc, | ||||||
| 	return report_return_code(tpm2_startup(mode)); | 	return report_return_code(tpm2_startup(mode)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | static int do_tpm2_self_test(cmd_tbl_t *cmdtp, int flag, int argc, | ||||||
|  | 			     char * const argv[]) | ||||||
|  | { | ||||||
|  | 	enum tpm2_yes_no full_test; | ||||||
|  | 
 | ||||||
|  | 	if (argc != 2) | ||||||
|  | 		return CMD_RET_USAGE; | ||||||
|  | 
 | ||||||
|  | 	if (!strcasecmp("full", argv[1])) { | ||||||
|  | 		full_test = TPMI_YES; | ||||||
|  | 	} else if (!strcasecmp("continue", argv[1])) { | ||||||
|  | 		full_test = TPMI_NO; | ||||||
|  | 	} else { | ||||||
|  | 		printf("Couldn't recognize test mode: %s\n", argv[1]); | ||||||
|  | 		return CMD_RET_FAILURE; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return report_return_code(tpm2_self_test(full_test)); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| static cmd_tbl_t tpm2_commands[] = { | static cmd_tbl_t tpm2_commands[] = { | ||||||
| 	U_BOOT_CMD_MKENT(info, 0, 1, do_tpm_info, "", ""), | 	U_BOOT_CMD_MKENT(info, 0, 1, do_tpm_info, "", ""), | ||||||
| 	U_BOOT_CMD_MKENT(init, 0, 1, do_tpm_init, "", ""), | 	U_BOOT_CMD_MKENT(init, 0, 1, do_tpm_init, "", ""), | ||||||
| 	U_BOOT_CMD_MKENT(startup, 0, 1, do_tpm2_startup, "", ""), | 	U_BOOT_CMD_MKENT(startup, 0, 1, do_tpm2_startup, "", ""), | ||||||
|  | 	U_BOOT_CMD_MKENT(self_test, 0, 1, do_tpm2_self_test, "", ""), | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| cmd_tbl_t *get_tpm_commands(unsigned int *size) | cmd_tbl_t *get_tpm_commands(unsigned int *size) | ||||||
|  | @ -56,4 +77,9 @@ U_BOOT_CMD(tpm, CONFIG_SYS_MAXARGS, 1, do_tpm, "Issue a TPMv2.x command", | ||||||
| "    <mode> is one of:\n" | "    <mode> is one of:\n" | ||||||
| "        * TPM2_SU_CLEAR (reset state)\n" | "        * TPM2_SU_CLEAR (reset state)\n" | ||||||
| "        * TPM2_SU_STATE (preserved state)\n" | "        * TPM2_SU_STATE (preserved state)\n" | ||||||
|  | "self_test <type>\n" | ||||||
|  | "    Test the TPM capabilities.\n" | ||||||
|  | "    <type> is one of:\n" | ||||||
|  | "        * full (perform all tests)\n" | ||||||
|  | "        * continue (only check untested tests)\n" | ||||||
| ); | ); | ||||||
|  |  | ||||||
|  | @ -134,4 +134,13 @@ enum tpm2_algorithms { | ||||||
|  */ |  */ | ||||||
| u32 tpm2_startup(enum tpm2_startup_types mode); | u32 tpm2_startup(enum tpm2_startup_types mode); | ||||||
| 
 | 
 | ||||||
|  | /**
 | ||||||
|  |  * Issue a TPM2_SelfTest command. | ||||||
|  |  * | ||||||
|  |  * @full_test	Asking to perform all tests or only the untested ones | ||||||
|  |  * | ||||||
|  |  * @return code of the operation | ||||||
|  |  */ | ||||||
|  | u32 tpm2_self_test(enum tpm2_yes_no full_test); | ||||||
|  | 
 | ||||||
| #endif /* __TPM_V2_H */ | #endif /* __TPM_V2_H */ | ||||||
|  |  | ||||||
							
								
								
									
										12
									
								
								lib/tpm-v2.c
								
								
								
								
							
							
						
						
									
										12
									
								
								lib/tpm-v2.c
								
								
								
								
							|  | @ -30,3 +30,15 @@ u32 tpm2_startup(enum tpm2_startup_types mode) | ||||||
| 
 | 
 | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | u32 tpm2_self_test(enum tpm2_yes_no full_test) | ||||||
|  | { | ||||||
|  | 	const u8 command_v2[12] = { | ||||||
|  | 		tpm_u16(TPM2_ST_NO_SESSIONS), | ||||||
|  | 		tpm_u32(11), | ||||||
|  | 		tpm_u32(TPM2_CC_SELF_TEST), | ||||||
|  | 		full_test, | ||||||
|  | 	}; | ||||||
|  | 
 | ||||||
|  | 	return tpm_sendrecv_command(command_v2, NULL, NULL); | ||||||
|  | } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue