#
# TPM subsystem configuration
#

menu "TPM support"

config TPM_V1
	bool "TPMv1.x support"
	depends on TPM
	default y
	help
	  Major TPM versions are not compatible at all, choose either
	  one or the other. This option enables TPMv1.x drivers/commands.

if TPM_V1

config TPM_TIS_SANDBOX
	bool "Enable sandbox TPM driver"
	depends on TPM_V1 && SANDBOX
	default y
	help
	  This driver emulates a TPMv1.x, providing access to base functions
	  such as reading and writing TPM private data. This is enough to
	  support Chrome OS verified boot. Extend functionality is not
	  implemented.

config TPM_ATMEL_TWI
	bool "Enable Atmel TWI TPM device driver"
	depends on TPM_V1
	help
	  This driver supports an Atmel TPM device connected on the I2C bus.
	  The usual tpm operations and the 'tpm' command can be used to talk
	  to the device using the standard TPM Interface Specification (TIS)
	  protocol

config TPM_TIS_INFINEON
	bool "Enable support for Infineon SLB9635/45 TPMs on I2C"
	depends on TPM_V1 && DM_I2C
	help
	  This driver supports Infineon TPM devices connected on the I2C bus.
	  The usual tpm operations and the 'tpm' command can be used to talk
	  to the device using the standard TPM Interface Specification (TIS)
	  protocol

config TPM_TIS_I2C_BURST_LIMITATION
	bool "Enable I2C burst length limitation"
	depends on TPM_TIS_INFINEON
	help
	  Some broken TPMs have a limitation on the number of bytes they can
	  receive in one message. Enable this option to allow you to set this
	  option. The can allow a broken TPM to be used by splitting messages
	  into separate pieces.

config TPM_TIS_I2C_BURST_LIMITATION_LEN
	int "Length"
	depends on TPM_TIS_I2C_BURST_LIMITATION
	help
	  Use this to set the burst limitation length

config TPM_TIS_LPC
	bool "Enable support for Infineon SLB9635/45 TPMs on LPC"
	depends on TPM_V1 && X86
	help
	  This driver supports Infineon TPM devices connected on the LPC bus.
	  The usual tpm operations and the 'tpm' command can be used to talk
	  to the device using the standard TPM Interface Specification (TIS)
	  protocol

config TPM_AUTH_SESSIONS
	bool "Enable TPM authentication session support"
	depends on TPM_V1
	help
	  Enable support for authorised (AUTH1) commands as specified in the
	  TCG Main Specification 1.2. OIAP-authorised versions of the commands
	  TPM_LoadKey2 and TPM_GetPubKey are provided. Both features are
	  available using the 'tpm' command, too.

config TPM_ST33ZP24_I2C
	bool "STMicroelectronics ST33ZP24 I2C TPM"
	depends on TPM_V1 && DM_I2C
	---help---
	  This driver supports STMicroelectronics TPM devices connected on the I2C bus.
	  The usual tpm operations and the 'tpm' command can be used to talk
	  to the device using the standard TPM Interface Specification (TIS)
	  protocol

config TPM_ST33ZP24_SPI
	bool "STMicroelectronics ST33ZP24 SPI TPM"
	depends on TPM_V1 && DM_SPI
	---help---
	  This driver supports STMicroelectronics TPM devices connected on the SPI bus.
	  The usual tpm operations and the 'tpm' command can be used to talk
	  to the device using the standard TPM Interface Specification (TIS)
	  protocol

config TPM_FLUSH_RESOURCES
	bool "Enable TPM resource flushing support"
	depends on TPM_V1
	help
	  Enable support to flush specific resources (e.g. keys) from the TPM.
	  The functionality is available via the 'tpm' command as well.

config TPM_LOAD_KEY_BY_SHA1
	bool "Enable TPM key loading by SHA1 support"
	depends on TPM_V1
	help
	  Enable support to load keys into the TPM by identifying
	  their parent via the public key's SHA1 hash.
	  The functionality is available via the 'tpm' command as well.

config TPM_LIST_RESOURCES
	bool "Enable TPM resource listing support"
	depends on TPM_V1
	help
	  Enable support to list specific resources (e.g. keys) within the TPM.
	  The functionality is available via the 'tpm' command as well.

endif # TPM_V1

config TPM_V2
	bool "TPMv2.x support"
	depends on TPM
	default y
	help
	  Major TPM versions are not compatible at all, choose either
	  one or the other. This option enables TPMv2.x drivers/commands.

if TPM_V2

config TPM2_CR50_I2C
	bool "Enable support for Google cr50 TPM"
	depends on DM_I2C
	help
	  Cr50 is an implementation of a TPM on Google's H1 security chip.
	  This uses the same open-source firmware as the Chromium OS EC.
	  While Cr50 has other features, its primary role is as the root of
	  trust for a device, It operates like a TPM and can be used with
	  verified boot. Cr50 is used on recent Chromebooks (since 2017).

config SPL_TPM2_CR50_I2C
	bool "Enable support for Google cr50 TPM"
	depends on DM_I2C && SPL_TPM
	help
	  Cr50 is an implementation of a TPM on Google's H1 security chip.
	  This uses the same open-source firmware as the Chromium OS EC.
	  While Cr50 has other features, its primary role is as the root of
	  trust for a device, It operates like a TPM and can be used with
	  verified boot. Cr50 is used on recent Chromebooks (since 2017).

config TPL_TPM2_CR50_I2C
	bool "Enable support for Google cr50 TPM"
	depends on DM_I2C && TPL_TPM
	help
	  Cr50 is an implementation of a TPM on Google's H1 security chip.
	  This uses the same open-source firmware as the Chromium OS EC.
	  While Cr50 has other features, its primary role is as the root of
	  trust for a device, It operates like a TPM and can be used with
	  verified boot. Cr50 is used on recent Chromebooks (since 2017).

config VPL_TPM2_CR50_I2C
	bool "Enable support for Google cr50 TPM"
	depends on DM_I2C && VPL_TPM
	help
	  Cr50 is an implementation of a TPM on Google's H1 security chip.
	  This uses the same open-source firmware as the Chromium OS EC.
	  While Cr50 has other features, its primary role is as the root of
	  trust for a device, It operates like a TPM and can be used with
	  verified boot. Cr50 is used on recent Chromebooks (since 2017).

config TPM2_TIS_SANDBOX
	bool "Enable sandbox TPMv2.x driver"
	depends on TPM_V2 && SANDBOX
	default y
	help
	  This driver emulates a TPMv2.x, providing access to base functions
	  such as basic configuration, PCR extension and PCR read. Extended
	  functionalities are not implemented.

config TPM2_TIS_SPI
	bool "Enable support for TPMv2.x SPI chips"
	depends on TPM_V2 && DM_SPI
	help
	  This driver supports TPMv2.x devices connected on the SPI bus.
	  The usual TPM operations and the 'tpm' command can be used to talk
	  to the device using the standard TPM Interface Specification (TIS)
	  protocol.

config TPM2_TIS_I2C
	bool "Enable support for TPMv2.x I2C chips"
	depends on TPM_V2 && DM_I2C
	help
	  This driver supports TPMv2.x devices connected on the I2C bus.
	  The usual TPM operations and the 'tpm' command can be used to talk
	  to the device using the standard TPM Interface Specification (TIS)
	  protocol.

config TPM2_FTPM_TEE
	bool "TEE based fTPM Interface"
	depends on TEE && OPTEE && TPM_V2
	help
	  This driver supports firmware TPM running in TEE.

config TPM2_MMIO
	bool "MMIO based TPM2 Interface"
	depends on TPM_V2
	help
	  This driver supports firmware TPM2.0 MMIO interface.
	  The usual TPM operations and the 'tpm' command can be used to talk
	  to the device using the standard TPM Interface Specification (TIS)
	  protocol.

endif # TPM_V2

endmenu
