mirror of
https://github.com/torvalds/linux.git
synced 2024-12-29 14:21:47 +00:00
bbc23a07b0
Implement the TCG I2C Interface driver, as specified in the TCG PC
Client Platform TPM Profile (PTP) specification for TPM 2.0 v1.04
revision 14, section 8, I2C Interface Definition.
This driver supports Guard Times. That is, if required by the TPM, the
driver has to wait by a vendor-specific time after each I2C read/write.
The specific time is read from the TPM_I2C_INTERFACE_CAPABILITY register.
Unfortunately, the TCG specified almost but not quite compatible
register addresses. Therefore, the TIS register addresses need to be
mapped to I2C ones. The locality is stripped because for now, only
locality 0 is supported.
Add a sanity check to I2C reads of e.g. TPM_ACCESS and TPM_STS. This is
to detect communication errors and issues due to non-standard behaviour
(E.g. the clock stretching quirk in the BCM2835, see 4dbfb5f440
). In
case the sanity check fails, attempt a retry.
Co-developed-by: Johannes Holland <johannes.holland@infineon.com>
Signed-off-by: Johannes Holland <johannes.holland@infineon.com>
Co-developed-by: Amir Mizinski <amirmizi6@gmail.com>
Signed-off-by: Amir Mizinski <amirmizi6@gmail.com>
Signed-off-by: Alexander Steffen <Alexander.Steffen@infineon.com>
Reviewed-by: Jarkko Sakkinen <jarkko@kernel.org>
Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org>
45 lines
1.4 KiB
Makefile
45 lines
1.4 KiB
Makefile
# SPDX-License-Identifier: GPL-2.0
|
|
#
|
|
# Makefile for the kernel tpm device drivers.
|
|
#
|
|
obj-$(CONFIG_TCG_TPM) += tpm.o
|
|
tpm-y := tpm-chip.o
|
|
tpm-y += tpm-dev-common.o
|
|
tpm-y += tpm-dev.o
|
|
tpm-y += tpm-interface.o
|
|
tpm-y += tpm1-cmd.o
|
|
tpm-y += tpm2-cmd.o
|
|
tpm-y += tpmrm-dev.o
|
|
tpm-y += tpm2-space.o
|
|
tpm-y += tpm-sysfs.o
|
|
tpm-y += eventlog/common.o
|
|
tpm-y += eventlog/tpm1.o
|
|
tpm-y += eventlog/tpm2.o
|
|
|
|
tpm-$(CONFIG_ACPI) += tpm_ppi.o eventlog/acpi.o
|
|
tpm-$(CONFIG_EFI) += eventlog/efi.o
|
|
tpm-$(CONFIG_OF) += eventlog/of.o
|
|
obj-$(CONFIG_TCG_TIS_CORE) += tpm_tis_core.o
|
|
obj-$(CONFIG_TCG_TIS) += tpm_tis.o
|
|
obj-$(CONFIG_TCG_TIS_SYNQUACER) += tpm_tis_synquacer.o
|
|
|
|
obj-$(CONFIG_TCG_TIS_SPI) += tpm_tis_spi.o
|
|
tpm_tis_spi-y := tpm_tis_spi_main.o
|
|
tpm_tis_spi-$(CONFIG_TCG_TIS_SPI_CR50) += tpm_tis_spi_cr50.o
|
|
|
|
obj-$(CONFIG_TCG_TIS_I2C_CR50) += tpm_tis_i2c_cr50.o
|
|
|
|
obj-$(CONFIG_TCG_TIS_I2C) += tpm_tis_i2c.o
|
|
obj-$(CONFIG_TCG_TIS_I2C_ATMEL) += tpm_i2c_atmel.o
|
|
obj-$(CONFIG_TCG_TIS_I2C_INFINEON) += tpm_i2c_infineon.o
|
|
obj-$(CONFIG_TCG_TIS_I2C_NUVOTON) += tpm_i2c_nuvoton.o
|
|
obj-$(CONFIG_TCG_NSC) += tpm_nsc.o
|
|
obj-$(CONFIG_TCG_ATMEL) += tpm_atmel.o
|
|
obj-$(CONFIG_TCG_INFINEON) += tpm_infineon.o
|
|
obj-$(CONFIG_TCG_IBMVTPM) += tpm_ibmvtpm.o
|
|
obj-$(CONFIG_TCG_TIS_ST33ZP24) += st33zp24/
|
|
obj-$(CONFIG_TCG_XEN) += xen-tpmfront.o
|
|
obj-$(CONFIG_TCG_CRB) += tpm_crb.o
|
|
obj-$(CONFIG_TCG_VTPM_PROXY) += tpm_vtpm_proxy.o
|
|
obj-$(CONFIG_TCG_FTPM_TEE) += tpm_ftpm_tee.o
|