[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <4ee1f7e8-d73f-21f7-eaab-4c8fdca34a31@linaro.org>
Date: Thu, 26 May 2022 14:31:50 +0200
From: Krzysztof Kozlowski <krzysztof.kozlowski@...aro.org>
To: Alexander Steffen <Alexander.Steffen@...ineon.com>,
jarkko@...nel.org, linux-kernel@...r.kernel.org,
linux-integrity@...r.kernel.org
Cc: peterhuewe@....de, jgg@...pe.ca, krzysztof.kozlowski+dt@...aro.org,
Johannes Holland <johannes.holland@...ineon.com>,
Amir Mizinski <amirmizi6@...il.com>
Subject: Re: [PATCH v4 3/3] tpm: Add tpm_tis_i2c backend for tpm_tis_core
On 25/05/2022 18:58, Alexander Steffen wrote:
> 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 4dbfb5f4401f). In
> case the sanity check fails, attempt a retry.
>
> Co-developed-by: Johannes Holland <johannes.holland@...ineon.com>
> Signed-off-by: Johannes Holland <johannes.holland@...ineon.com>
> Co-developed-by: Amir Mizinski <amirmizi6@...il.com>
> Signed-off-by: Amir Mizinski <amirmizi6@...il.com>
> Signed-off-by: Alexander Steffen <Alexander.Steffen@...ineon.com>
> ---
> drivers/char/tpm/Kconfig | 12 +
> drivers/char/tpm/Makefile | 1 +
> drivers/char/tpm/tpm_tis_i2c.c | 406 +++++++++++++++++++++++++++++++++
> 3 files changed, 419 insertions(+)
> create mode 100644 drivers/char/tpm/tpm_tis_i2c.c
>
> diff --git a/drivers/char/tpm/Kconfig b/drivers/char/tpm/Kconfig
> index 4a5516406c22..927088b2c3d3 100644
> --- a/drivers/char/tpm/Kconfig
> +++ b/drivers/char/tpm/Kconfig
> @@ -74,6 +74,18 @@ config TCG_TIS_SPI_CR50
> If you have a H1 secure module running Cr50 firmware on SPI bus,
> say Yes and it will be accessible from within Linux.
>
> +config TCG_TIS_I2C
> + tristate "TPM Interface Specification 1.3 Interface / TPM 2.0 FIFO Interface - (I2C - generic)"
> + depends on I2C
> + select CRC_CCITT
> + select TCG_TIS_CORE
> + help
> + If you have a TPM security chip, compliant with the TCG TPM PTP
> + (I2C interface) specification and connected to an I2C bus master,
> + say Yes and it will be accessible from within Linux.
> + To compile this driver as a module, choose M here;
> + the module will be called tpm_tis_i2c.
> +
> config TCG_TIS_SYNQUACER
> tristate "TPM Interface Specification 1.2 Interface / TPM 2.0 FIFO Interface (MMIO - SynQuacer)"
> depends on ARCH_SYNQUACER || COMPILE_TEST
> diff --git a/drivers/char/tpm/Makefile b/drivers/char/tpm/Makefile
> index 66d39ea6bd10..0222b1ddb310 100644
> --- a/drivers/char/tpm/Makefile
> +++ b/drivers/char/tpm/Makefile
> @@ -29,6 +29,7 @@ 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
> diff --git a/drivers/char/tpm/tpm_tis_i2c.c b/drivers/char/tpm/tpm_tis_i2c.c
> new file mode 100644
> index 000000000000..8b9218e5405f
> --- /dev/null
> +++ b/drivers/char/tpm/tpm_tis_i2c.c
> @@ -0,0 +1,406 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/*
> + * Copyright (c) 2014-2021 Nuvoton Technology corporation
> + * Copyright (C) 2019-2022 Infineon Technologies AG
> + *
> + * This device driver implements the TPM interface as defined in the TCG PC
> + * Client Platform TPM Profile (PTP) Specification for TPM 2.0 v1.04
> + * Revision 14.
> + *
> + * It is based on the tpm_tis_spi device driver.
> + */
> +
> +#include <linux/init.h>
> +#include <linux/module.h>
> +#include <linux/moduleparam.h>
> +#include <linux/slab.h>
> +#include <linux/interrupt.h>
Is it used?
> +#include <linux/wait.h>
> +#include <linux/acpi.h>
Is it used?
> +#include <linux/freezer.h>
Is it used?
> +
> +#include <linux/module.h>
> +#include <linux/i2c.h>
> +#include <linux/gpio.h>
> +#include <linux/of_irq.h>
> +#include <linux/of_gpio.h>
The same for these three.
Best regards,
Krzysztof
Powered by blists - more mailing lists