mirror of
				https://source.denx.de/u-boot/u-boot.git
				synced 2025-10-31 16:31:25 +01:00 
			
		
		
		
	I2C protocol is not standardize for TPM 1.2. TIS prococol is define by the Trusted Computing Group and potentially available on several TPMs. tpm_tis_infineon.h header is not generic enough. Rename tpm_tis_infineon.h to tpm_tis.h and move infineon specific defines/variables to tpm_tis_infineon.c Reviewed-by: Simon Glass <sjg@chromium.org> Signed-off-by: Christophe Ricard <christophe-h.ricard@st.com>
		
			
				
	
	
		
			132 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			132 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * Copyright (C) 2011 Infineon Technologies
 | |
|  *
 | |
|  * Authors:
 | |
|  * Peter Huewe <huewe.external@infineon.com>
 | |
|  *
 | |
|  * Version: 2.1.1
 | |
|  *
 | |
|  * Description:
 | |
|  * Device driver for TCG/TCPA TPM (trusted platform module).
 | |
|  * Specifications at www.trustedcomputinggroup.org
 | |
|  *
 | |
|  * It is based on the Linux kernel driver tpm.c from Leendert van
 | |
|  * Dorn, Dave Safford, Reiner Sailer, and Kyleen Hall.
 | |
|  *
 | |
|  * SPDX-License-Identifier:	GPL-2.0
 | |
|  */
 | |
| 
 | |
| #ifndef _TPM_TIS_I2C_H
 | |
| #define _TPM_TIS_I2C_H
 | |
| 
 | |
| #include <linux/compiler.h>
 | |
| #include <linux/types.h>
 | |
| 
 | |
| enum tpm_timeout {
 | |
| 	TPM_TIMEOUT_MS			= 5,
 | |
| 	TIS_SHORT_TIMEOUT_MS		= 750,
 | |
| 	TIS_LONG_TIMEOUT_MS		= 2000,
 | |
| 	SLEEP_DURATION_US		= 60,
 | |
| 	SLEEP_DURATION_LONG_US		= 210,
 | |
| };
 | |
| 
 | |
| /* Size of external transmit buffer (used in tpm_transmit)*/
 | |
| #define TPM_BUFSIZE 4096
 | |
| 
 | |
| /* Index of Count field in TPM response buffer */
 | |
| #define TPM_RSP_SIZE_BYTE	2
 | |
| #define TPM_RSP_RC_BYTE		6
 | |
| 
 | |
| struct tpm_chip {
 | |
| 	int is_open;
 | |
| 	int locality;
 | |
| 	u32 vend_dev;
 | |
| 	unsigned long timeout_a, timeout_b, timeout_c, timeout_d;  /* msec */
 | |
| 	ulong chip_type;
 | |
| };
 | |
| 
 | |
| struct tpm_input_header {
 | |
| 	__be16 tag;
 | |
| 	__be32 length;
 | |
| 	__be32 ordinal;
 | |
| } __packed;
 | |
| 
 | |
| struct tpm_output_header {
 | |
| 	__be16 tag;
 | |
| 	__be32 length;
 | |
| 	__be32 return_code;
 | |
| } __packed;
 | |
| 
 | |
| struct timeout_t {
 | |
| 	__be32 a;
 | |
| 	__be32 b;
 | |
| 	__be32 c;
 | |
| 	__be32 d;
 | |
| } __packed;
 | |
| 
 | |
| struct duration_t {
 | |
| 	__be32 tpm_short;
 | |
| 	__be32 tpm_medium;
 | |
| 	__be32 tpm_long;
 | |
| } __packed;
 | |
| 
 | |
| union cap_t {
 | |
| 	struct timeout_t timeout;
 | |
| 	struct duration_t duration;
 | |
| };
 | |
| 
 | |
| struct tpm_getcap_params_in {
 | |
| 	__be32 cap;
 | |
| 	__be32 subcap_size;
 | |
| 	__be32 subcap;
 | |
| } __packed;
 | |
| 
 | |
| struct tpm_getcap_params_out {
 | |
| 	__be32 cap_size;
 | |
| 	union cap_t cap;
 | |
| } __packed;
 | |
| 
 | |
| union tpm_cmd_header {
 | |
| 	struct tpm_input_header in;
 | |
| 	struct tpm_output_header out;
 | |
| };
 | |
| 
 | |
| union tpm_cmd_params {
 | |
| 	struct tpm_getcap_params_out getcap_out;
 | |
| 	struct tpm_getcap_params_in getcap_in;
 | |
| };
 | |
| 
 | |
| struct tpm_cmd_t {
 | |
| 	union tpm_cmd_header header;
 | |
| 	union tpm_cmd_params params;
 | |
| } __packed;
 | |
| 
 | |
| /* Max number of iterations after i2c NAK */
 | |
| #define MAX_COUNT		3
 | |
| 
 | |
| /*
 | |
|  * Max number of iterations after i2c NAK for 'long' commands
 | |
|  *
 | |
|  * We need this especially for sending TPM_READY, since the cleanup after the
 | |
|  * transtion to the ready state may take some time, but it is unpredictable
 | |
|  * how long it will take.
 | |
|  */
 | |
| #define MAX_COUNT_LONG		50
 | |
| 
 | |
| enum tis_access {
 | |
| 	TPM_ACCESS_VALID		= 0x80,
 | |
| 	TPM_ACCESS_ACTIVE_LOCALITY	= 0x20,
 | |
| 	TPM_ACCESS_REQUEST_PENDING	= 0x04,
 | |
| 	TPM_ACCESS_REQUEST_USE		= 0x02,
 | |
| };
 | |
| 
 | |
| enum tis_status {
 | |
| 	TPM_STS_VALID			= 0x80,
 | |
| 	TPM_STS_COMMAND_READY		= 0x40,
 | |
| 	TPM_STS_GO			= 0x20,
 | |
| 	TPM_STS_DATA_AVAIL		= 0x10,
 | |
| 	TPM_STS_DATA_EXPECT		= 0x08,
 | |
| };
 | |
| 
 | |
| #endif
 |