* [PATCH 0/2] tpm: Add support for TPMv2.x I2C chips
@ 2022-05-13 18:29 Eddie James
2022-05-13 18:29 ` [PATCH 1/2] tpm: core: Set timeouts before requesting locality Eddie James
2022-05-13 18:30 ` [PATCH 2/2] tpm: add support for TPMv2.x I2C chips Eddie James
0 siblings, 2 replies; 11+ messages in thread
From: Eddie James @ 2022-05-13 18:29 UTC (permalink / raw)
To: u-boot; +Cc: ilias.apalodimas, Eddie James
Add a tpm driver that should support any TPMv2 compliant I2C chips,
such as the NPCT75X chip. In my testing I also noticed that the timeouts
weren't set before requesting the locality so I have included a fix.
Eddie James (2):
tpm: core: Set timeouts before requesting locality
tpm: add support for TPMv2.x I2C chips
drivers/tpm/Kconfig | 9 ++
drivers/tpm/Makefile | 1 +
drivers/tpm/tpm2_tis_core.c | 7 +-
drivers/tpm/tpm2_tis_i2c.c | 171 ++++++++++++++++++++++++++++++++++++
4 files changed, 185 insertions(+), 3 deletions(-)
create mode 100644 drivers/tpm/tpm2_tis_i2c.c
--
2.27.0
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 1/2] tpm: core: Set timeouts before requesting locality
2022-05-13 18:29 [PATCH 0/2] tpm: Add support for TPMv2.x I2C chips Eddie James
@ 2022-05-13 18:29 ` Eddie James
2022-05-17 9:24 ` Ilias Apalodimas
2022-05-19 0:27 ` Joel Stanley
2022-05-13 18:30 ` [PATCH 2/2] tpm: add support for TPMv2.x I2C chips Eddie James
1 sibling, 2 replies; 11+ messages in thread
From: Eddie James @ 2022-05-13 18:29 UTC (permalink / raw)
To: u-boot; +Cc: ilias.apalodimas, Eddie James
Requesting the locality uses the timeout values, so they need
to be set beforehand.
Signed-off-by: Eddie James <eajames@linux.ibm.com>
---
drivers/tpm/tpm2_tis_core.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/drivers/tpm/tpm2_tis_core.c b/drivers/tpm/tpm2_tis_core.c
index 51392c4584..985a816219 100644
--- a/drivers/tpm/tpm2_tis_core.c
+++ b/drivers/tpm/tpm2_tis_core.c
@@ -433,15 +433,16 @@ int tpm_tis_init(struct udevice *dev)
log_err("Driver bug. No bus ops defined\n");
return -1;
}
- ret = tpm_tis_request_locality(dev, 0);
- if (ret)
- return ret;
chip->timeout_a = TIS_SHORT_TIMEOUT_MS;
chip->timeout_b = TIS_LONG_TIMEOUT_MS;
chip->timeout_c = TIS_SHORT_TIMEOUT_MS;
chip->timeout_d = TIS_SHORT_TIMEOUT_MS;
+ ret = tpm_tis_request_locality(dev, 0);
+ if (ret)
+ return ret;
+
/* Disable interrupts */
phy_ops->read32(dev, TPM_INT_ENABLE(chip->locality), &tmp);
tmp |= TPM_INTF_CMD_READY_INT | TPM_INTF_LOCALITY_CHANGE_INT |
--
2.27.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 2/2] tpm: add support for TPMv2.x I2C chips
2022-05-13 18:29 [PATCH 0/2] tpm: Add support for TPMv2.x I2C chips Eddie James
2022-05-13 18:29 ` [PATCH 1/2] tpm: core: Set timeouts before requesting locality Eddie James
@ 2022-05-13 18:30 ` Eddie James
2022-05-19 0:26 ` Joel Stanley
2022-05-23 6:12 ` Ilias Apalodimas
1 sibling, 2 replies; 11+ messages in thread
From: Eddie James @ 2022-05-13 18:30 UTC (permalink / raw)
To: u-boot; +Cc: ilias.apalodimas, Eddie James
Add the tpm2_tis_i2c driver that should support any TPMv2 compliant
I2C chips, such as the NPCT75X chip.
Signed-off-by: Eddie James <eajames@linux.ibm.com>
---
drivers/tpm/Kconfig | 9 ++
drivers/tpm/Makefile | 1 +
drivers/tpm/tpm2_tis_i2c.c | 171 +++++++++++++++++++++++++++++++++++++
3 files changed, 181 insertions(+)
create mode 100644 drivers/tpm/tpm2_tis_i2c.c
diff --git a/drivers/tpm/Kconfig b/drivers/tpm/Kconfig
index eceff27d5f..d59102d9a6 100644
--- a/drivers/tpm/Kconfig
+++ b/drivers/tpm/Kconfig
@@ -185,6 +185,15 @@ config TPM2_TIS_SPI
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
diff --git a/drivers/tpm/Makefile b/drivers/tpm/Makefile
index 51725230c7..9540fd7fe7 100644
--- a/drivers/tpm/Makefile
+++ b/drivers/tpm/Makefile
@@ -13,5 +13,6 @@ obj-$(CONFIG_TPM_ST33ZP24_SPI) += tpm_tis_st33zp24_spi.o
obj-$(CONFIG_$(SPL_TPL_)TPM2_CR50_I2C) += cr50_i2c.o
obj-$(CONFIG_TPM2_TIS_SANDBOX) += tpm2_tis_sandbox.o sandbox_common.o
obj-$(CONFIG_TPM2_TIS_SPI) += tpm2_tis_core.o tpm2_tis_spi.o
+obj-$(CONFIG_TPM2_TIS_I2C) += tpm2_tis_core.o tpm2_tis_i2c.o
obj-$(CONFIG_TPM2_FTPM_TEE) += tpm2_ftpm_tee.o
obj-$(CONFIG_TPM2_MMIO) += tpm2_tis_core.o tpm2_tis_mmio.o
diff --git a/drivers/tpm/tpm2_tis_i2c.c b/drivers/tpm/tpm2_tis_i2c.c
new file mode 100644
index 0000000000..33cd5bb84b
--- /dev/null
+++ b/drivers/tpm/tpm2_tis_i2c.c
@@ -0,0 +1,171 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2022 IBM Corp.
+ */
+
+#include <common.h>
+#include <dm.h>
+#include <fdtdec.h>
+#include <i2c.h>
+#include <log.h>
+#include <tpm-v2.h>
+#include <linux/bitops.h>
+#include <linux/delay.h>
+#include <linux/errno.h>
+#include <linux/compiler.h>
+#include <linux/types.h>
+#include <linux/unaligned/be_byteshift.h>
+#include <asm-generic/gpio.h>
+
+#include "tpm_tis.h"
+#include "tpm_internal.h"
+
+struct tpm_tis_chip_data {
+ unsigned int pcr_count;
+ unsigned int pcr_select_min;
+};
+
+static uint tpm_tis_i2c_address_to_register(u32 addr)
+{
+ addr &= 0xFFF;
+
+ /*
+ * Adapt register addresses that have changed compared to older TIS
+ * version.
+ */
+ switch (addr) {
+ case TPM_ACCESS(0):
+ return 0x04;
+ case TPM_DID_VID(0):
+ return 0x48;
+ case TPM_RID(0):
+ return 0x4C;
+ default:
+ return addr;
+ }
+}
+
+static int tpm_tis_i2c_read(struct udevice *dev, u32 addr, u16 len, u8 *in)
+{
+ int rc;
+ int count = 0;
+ uint reg = tpm_tis_i2c_address_to_register(addr);
+
+ do {
+ rc = dm_i2c_read(dev, reg, in, len);
+ udelay(SLEEP_DURATION_US);
+ } while (rc && count++ < MAX_COUNT);
+
+ return rc;
+}
+
+static int tpm_tis_i2c_write(struct udevice *dev, u32 addr, u16 len,
+ const u8 *out)
+{
+ int rc;
+ int count = 0;
+ uint reg = tpm_tis_i2c_address_to_register(addr);
+
+ do {
+ rc = dm_i2c_write(dev, reg, out, len);
+ udelay(SLEEP_DURATION_US);
+ } while (rc && count++ < MAX_COUNT);
+
+ return rc;
+}
+
+static int tpm_tis_i2c_read32(struct udevice *dev, u32 addr, u32 *result)
+{
+ __le32 result_le;
+ int rc;
+
+ rc = tpm_tis_i2c_read(dev, addr, sizeof(u32), (u8 *)&result_le);
+ if (!rc)
+ *result = le32_to_cpu(result_le);
+
+ return rc;
+}
+
+static int tpm_tis_i2c_write32(struct udevice *dev, u32 addr, u32 value)
+{
+ __le32 value_le = cpu_to_le32(value);
+
+ return tpm_tis_i2c_write(dev, addr, sizeof(value), (u8 *)&value_le);
+}
+
+static struct tpm_tis_phy_ops phy_ops = {
+ .read_bytes = tpm_tis_i2c_read,
+ .write_bytes = tpm_tis_i2c_write,
+ .read32 = tpm_tis_i2c_read32,
+ .write32 = tpm_tis_i2c_write32,
+};
+
+static int tpm_tis_i2c_probe(struct udevice *udev)
+{
+ struct tpm_tis_chip_data *drv_data = (void *)dev_get_driver_data(udev);
+ struct tpm_chip_priv *priv = dev_get_uclass_priv(udev);
+ int rc;
+ u8 loc = 0;
+
+ tpm_tis_ops_register(udev, &phy_ops);
+
+ /*
+ * Force locality 0. The core driver doesn't actually write the
+ * locality register and instead just reads/writes various access
+ * bits of the selected locality.
+ */
+ rc = dm_i2c_write(udev, 0, &loc, 1);
+ if (rc)
+ return rc;
+
+ rc = tpm_tis_init(udev);
+ if (rc)
+ return rc;
+
+ priv->pcr_count = drv_data->pcr_count;
+ priv->pcr_select_min = drv_data->pcr_select_min;
+ priv->version = TPM_V2;
+
+ return 0;
+}
+
+static int tpm_tis_i2c_remove(struct udevice *udev)
+{
+ return tpm_tis_cleanup(udev);
+}
+
+static const struct tpm_ops tpm_tis_i2c_ops = {
+ .open = tpm_tis_open,
+ .close = tpm_tis_close,
+ .get_desc = tpm_tis_get_desc,
+ .send = tpm_tis_send,
+ .recv = tpm_tis_recv,
+ .cleanup = tpm_tis_cleanup,
+};
+
+static const struct tpm_tis_chip_data tpm_tis_std_chip_data = {
+ .pcr_count = 24,
+ .pcr_select_min = 3,
+};
+
+static const struct udevice_id tpm_tis_i2c_ids[] = {
+ {
+ .compatible = "nuvoton,npct75x",
+ .data = (ulong)&tpm_tis_std_chip_data,
+ },
+ {
+ .compatible = "tcg,tpm-tis-i2c",
+ .data = (ulong)&tpm_tis_std_chip_data,
+ },
+ { }
+};
+
+U_BOOT_DRIVER(tpm_tis_i2c) = {
+ .name = "tpm_tis_i2c",
+ .id = UCLASS_TPM,
+ .of_match = tpm_tis_i2c_ids,
+ .ops = &tpm_tis_i2c_ops,
+ .probe = tpm_tis_i2c_probe,
+ .remove = tpm_tis_i2c_remove,
+ .priv_auto_alloc_size = sizeof(struct tpm_chip),
+};
--
2.27.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH 1/2] tpm: core: Set timeouts before requesting locality
2022-05-13 18:29 ` [PATCH 1/2] tpm: core: Set timeouts before requesting locality Eddie James
@ 2022-05-17 9:24 ` Ilias Apalodimas
2022-05-19 0:27 ` Joel Stanley
1 sibling, 0 replies; 11+ messages in thread
From: Ilias Apalodimas @ 2022-05-17 9:24 UTC (permalink / raw)
To: Eddie James; +Cc: u-boot
Hi Eddie,
Thanks for the patches. I am currently traveling so apologies for
the slow replies. This one looks good, I'll have a look at the rest
once I get back
On Fri, 13 May 2022 at 19:30, Eddie James <eajames@linux.ibm.com> wrote:
>
> Requesting the locality uses the timeout values, so they need
> to be set beforehand.
>
> Signed-off-by: Eddie James <eajames@linux.ibm.com>
> ---
> drivers/tpm/tpm2_tis_core.c | 7 ++++---
> 1 file changed, 4 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/tpm/tpm2_tis_core.c b/drivers/tpm/tpm2_tis_core.c
> index 51392c4584..985a816219 100644
> --- a/drivers/tpm/tpm2_tis_core.c
> +++ b/drivers/tpm/tpm2_tis_core.c
> @@ -433,15 +433,16 @@ int tpm_tis_init(struct udevice *dev)
> log_err("Driver bug. No bus ops defined\n");
> return -1;
> }
> - ret = tpm_tis_request_locality(dev, 0);
> - if (ret)
> - return ret;
>
> chip->timeout_a = TIS_SHORT_TIMEOUT_MS;
> chip->timeout_b = TIS_LONG_TIMEOUT_MS;
> chip->timeout_c = TIS_SHORT_TIMEOUT_MS;
> chip->timeout_d = TIS_SHORT_TIMEOUT_MS;
>
> + ret = tpm_tis_request_locality(dev, 0);
> + if (ret)
> + return ret;
> +
> /* Disable interrupts */
> phy_ops->read32(dev, TPM_INT_ENABLE(chip->locality), &tmp);
> tmp |= TPM_INTF_CMD_READY_INT | TPM_INTF_LOCALITY_CHANGE_INT |
> --
> 2.27.0
>
Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 2/2] tpm: add support for TPMv2.x I2C chips
2022-05-13 18:30 ` [PATCH 2/2] tpm: add support for TPMv2.x I2C chips Eddie James
@ 2022-05-19 0:26 ` Joel Stanley
2022-05-23 6:12 ` Ilias Apalodimas
1 sibling, 0 replies; 11+ messages in thread
From: Joel Stanley @ 2022-05-19 0:26 UTC (permalink / raw)
To: Eddie James; +Cc: U-Boot Mailing List, Ilias Apalodimas
On Fri, 13 May 2022 at 18:30, Eddie James <eajames@linux.ibm.com> wrote:
>
> Add the tpm2_tis_i2c driver that should support any TPMv2 compliant
> I2C chips, such as the NPCT75X chip.
>
> Signed-off-by: Eddie James <eajames@linux.ibm.com>
> ---
> drivers/tpm/Kconfig | 9 ++
> drivers/tpm/Makefile | 1 +
> drivers/tpm/tpm2_tis_i2c.c | 171 +++++++++++++++++++++++++++++++++++++
> 3 files changed, 181 insertions(+)
> create mode 100644 drivers/tpm/tpm2_tis_i2c.c
>
> diff --git a/drivers/tpm/Kconfig b/drivers/tpm/Kconfig
> index eceff27d5f..d59102d9a6 100644
> --- a/drivers/tpm/Kconfig
> +++ b/drivers/tpm/Kconfig
> @@ -185,6 +185,15 @@ config TPM2_TIS_SPI
> 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
> diff --git a/drivers/tpm/Makefile b/drivers/tpm/Makefile
> index 51725230c7..9540fd7fe7 100644
> --- a/drivers/tpm/Makefile
> +++ b/drivers/tpm/Makefile
> @@ -13,5 +13,6 @@ obj-$(CONFIG_TPM_ST33ZP24_SPI) += tpm_tis_st33zp24_spi.o
> obj-$(CONFIG_$(SPL_TPL_)TPM2_CR50_I2C) += cr50_i2c.o
> obj-$(CONFIG_TPM2_TIS_SANDBOX) += tpm2_tis_sandbox.o sandbox_common.o
> obj-$(CONFIG_TPM2_TIS_SPI) += tpm2_tis_core.o tpm2_tis_spi.o
> +obj-$(CONFIG_TPM2_TIS_I2C) += tpm2_tis_core.o tpm2_tis_i2c.o
> obj-$(CONFIG_TPM2_FTPM_TEE) += tpm2_ftpm_tee.o
> obj-$(CONFIG_TPM2_MMIO) += tpm2_tis_core.o tpm2_tis_mmio.o
> diff --git a/drivers/tpm/tpm2_tis_i2c.c b/drivers/tpm/tpm2_tis_i2c.c
> new file mode 100644
> index 0000000000..33cd5bb84b
> --- /dev/null
> +++ b/drivers/tpm/tpm2_tis_i2c.c
> @@ -0,0 +1,171 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/*
> + * Copyright 2022 IBM Corp.
> + */
> +
> +#include <common.h>
> +#include <dm.h>
> +#include <fdtdec.h>
> +#include <i2c.h>
> +#include <log.h>
> +#include <tpm-v2.h>
> +#include <linux/bitops.h>
> +#include <linux/delay.h>
> +#include <linux/errno.h>
> +#include <linux/compiler.h>
> +#include <linux/types.h>
> +#include <linux/unaligned/be_byteshift.h>
> +#include <asm-generic/gpio.h>
> +
> +#include "tpm_tis.h"
> +#include "tpm_internal.h"
> +
> +struct tpm_tis_chip_data {
> + unsigned int pcr_count;
> + unsigned int pcr_select_min;
> +};
> +
> +static uint tpm_tis_i2c_address_to_register(u32 addr)
> +{
> + addr &= 0xFFF;
> +
> + /*
> + * Adapt register addresses that have changed compared to older TIS
> + * version.
> + */
> + switch (addr) {
> + case TPM_ACCESS(0):
> + return 0x04;
> + case TPM_DID_VID(0):
> + return 0x48;
> + case TPM_RID(0):
> + return 0x4C;
> + default:
> + return addr;
> + }
> +}
> +
> +static int tpm_tis_i2c_read(struct udevice *dev, u32 addr, u16 len, u8 *in)
> +{
> + int rc;
> + int count = 0;
> + uint reg = tpm_tis_i2c_address_to_register(addr);
> +
> + do {
> + rc = dm_i2c_read(dev, reg, in, len);
> + udelay(SLEEP_DURATION_US);
> + } while (rc && count++ < MAX_COUNT);
> +
> + return rc;
> +}
> +
> +static int tpm_tis_i2c_write(struct udevice *dev, u32 addr, u16 len,
> + const u8 *out)
> +{
> + int rc;
> + int count = 0;
> + uint reg = tpm_tis_i2c_address_to_register(addr);
> +
> + do {
> + rc = dm_i2c_write(dev, reg, out, len);
> + udelay(SLEEP_DURATION_US);
> + } while (rc && count++ < MAX_COUNT);
> +
> + return rc;
> +}
> +
> +static int tpm_tis_i2c_read32(struct udevice *dev, u32 addr, u32 *result)
> +{
> + __le32 result_le;
> + int rc;
> +
> + rc = tpm_tis_i2c_read(dev, addr, sizeof(u32), (u8 *)&result_le);
> + if (!rc)
> + *result = le32_to_cpu(result_le);
> +
> + return rc;
> +}
> +
> +static int tpm_tis_i2c_write32(struct udevice *dev, u32 addr, u32 value)
> +{
> + __le32 value_le = cpu_to_le32(value);
> +
> + return tpm_tis_i2c_write(dev, addr, sizeof(value), (u8 *)&value_le);
> +}
> +
> +static struct tpm_tis_phy_ops phy_ops = {
> + .read_bytes = tpm_tis_i2c_read,
> + .write_bytes = tpm_tis_i2c_write,
> + .read32 = tpm_tis_i2c_read32,
> + .write32 = tpm_tis_i2c_write32,
> +};
> +
> +static int tpm_tis_i2c_probe(struct udevice *udev)
> +{
> + struct tpm_tis_chip_data *drv_data = (void *)dev_get_driver_data(udev);
> + struct tpm_chip_priv *priv = dev_get_uclass_priv(udev);
> + int rc;
> + u8 loc = 0;
> +
> + tpm_tis_ops_register(udev, &phy_ops);
> +
> + /*
> + * Force locality 0. The core driver doesn't actually write the
> + * locality register and instead just reads/writes various access
> + * bits of the selected locality.
> + */
> + rc = dm_i2c_write(udev, 0, &loc, 1);
> + if (rc)
> + return rc;
> +
> + rc = tpm_tis_init(udev);
> + if (rc)
> + return rc;
> +
> + priv->pcr_count = drv_data->pcr_count;
> + priv->pcr_select_min = drv_data->pcr_select_min;
> + priv->version = TPM_V2;
> +
> + return 0;
> +}
> +
> +static int tpm_tis_i2c_remove(struct udevice *udev)
> +{
> + return tpm_tis_cleanup(udev);
> +}
> +
> +static const struct tpm_ops tpm_tis_i2c_ops = {
> + .open = tpm_tis_open,
> + .close = tpm_tis_close,
> + .get_desc = tpm_tis_get_desc,
> + .send = tpm_tis_send,
> + .recv = tpm_tis_recv,
> + .cleanup = tpm_tis_cleanup,
> +};
> +
> +static const struct tpm_tis_chip_data tpm_tis_std_chip_data = {
> + .pcr_count = 24,
> + .pcr_select_min = 3,
> +};
> +
> +static const struct udevice_id tpm_tis_i2c_ids[] = {
> + {
> + .compatible = "nuvoton,npct75x",
> + .data = (ulong)&tpm_tis_std_chip_data,
> + },
> + {
> + .compatible = "tcg,tpm-tis-i2c",
> + .data = (ulong)&tpm_tis_std_chip_data,
The .data pointers are the same, so could we do away with it all
together and just have
#define TPM_TIS_I2C_PCR_COUNT 24
#define TPM_TIS_I2C_PCR_SELECT_MIN 3
Aside from that small cleanup:
Reviewed-by: Joel Stanley <joel@jms.id.au>
> + },
> + { }
> +};
> +
> +U_BOOT_DRIVER(tpm_tis_i2c) = {
> + .name = "tpm_tis_i2c",
> + .id = UCLASS_TPM,
> + .of_match = tpm_tis_i2c_ids,
> + .ops = &tpm_tis_i2c_ops,
> + .probe = tpm_tis_i2c_probe,
> + .remove = tpm_tis_i2c_remove,
> + .priv_auto_alloc_size = sizeof(struct tpm_chip),
> +};
> --
> 2.27.0
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 1/2] tpm: core: Set timeouts before requesting locality
2022-05-13 18:29 ` [PATCH 1/2] tpm: core: Set timeouts before requesting locality Eddie James
2022-05-17 9:24 ` Ilias Apalodimas
@ 2022-05-19 0:27 ` Joel Stanley
1 sibling, 0 replies; 11+ messages in thread
From: Joel Stanley @ 2022-05-19 0:27 UTC (permalink / raw)
To: Eddie James; +Cc: U-Boot Mailing List, Ilias Apalodimas
On Fri, 13 May 2022 at 18:30, Eddie James <eajames@linux.ibm.com> wrote:
>
> Requesting the locality uses the timeout values, so they need
> to be set beforehand.
>
> Signed-off-by: Eddie James <eajames@linux.ibm.com>
Reviewed-by: Joel Stanley <joel@jms.id.au>
> ---
> drivers/tpm/tpm2_tis_core.c | 7 ++++---
> 1 file changed, 4 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/tpm/tpm2_tis_core.c b/drivers/tpm/tpm2_tis_core.c
> index 51392c4584..985a816219 100644
> --- a/drivers/tpm/tpm2_tis_core.c
> +++ b/drivers/tpm/tpm2_tis_core.c
> @@ -433,15 +433,16 @@ int tpm_tis_init(struct udevice *dev)
> log_err("Driver bug. No bus ops defined\n");
> return -1;
> }
> - ret = tpm_tis_request_locality(dev, 0);
> - if (ret)
> - return ret;
>
> chip->timeout_a = TIS_SHORT_TIMEOUT_MS;
> chip->timeout_b = TIS_LONG_TIMEOUT_MS;
> chip->timeout_c = TIS_SHORT_TIMEOUT_MS;
> chip->timeout_d = TIS_SHORT_TIMEOUT_MS;
>
> + ret = tpm_tis_request_locality(dev, 0);
> + if (ret)
> + return ret;
> +
> /* Disable interrupts */
> phy_ops->read32(dev, TPM_INT_ENABLE(chip->locality), &tmp);
> tmp |= TPM_INTF_CMD_READY_INT | TPM_INTF_LOCALITY_CHANGE_INT |
> --
> 2.27.0
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 2/2] tpm: add support for TPMv2.x I2C chips
2022-05-13 18:30 ` [PATCH 2/2] tpm: add support for TPMv2.x I2C chips Eddie James
2022-05-19 0:26 ` Joel Stanley
@ 2022-05-23 6:12 ` Ilias Apalodimas
2022-05-23 13:19 ` Eddie James
1 sibling, 1 reply; 11+ messages in thread
From: Ilias Apalodimas @ 2022-05-23 6:12 UTC (permalink / raw)
To: Eddie James; +Cc: u-boot
Hi Eddie,
Thanks for the patch.
[...]
> +static const struct tpm_tis_chip_data tpm_tis_std_chip_data = {
> + .pcr_count = 24,
> + .pcr_select_min = 3,
> +};
> +
> +static const struct udevice_id tpm_tis_i2c_ids[] = {
> + {
> + .compatible = "nuvoton,npct75x",
> + .data = (ulong)&tpm_tis_std_chip_data,
> + },
> + {
> + .compatible = "tcg,tpm-tis-i2c",
> + .data = (ulong)&tpm_tis_std_chip_data,
> + },
> + { }
> +};
> +
> +U_BOOT_DRIVER(tpm_tis_i2c) = {
> + .name = "tpm_tis_i2c",
> + .id = UCLASS_TPM,
> + .of_match = tpm_tis_i2c_ids,
> + .ops = &tpm_tis_i2c_ops,
> + .probe = tpm_tis_i2c_probe,
> + .remove = tpm_tis_i2c_remove,
> + .priv_auto_alloc_size = sizeof(struct tpm_chip),
Shouldn't this be .priv_auto only? IIRC we got rid of the
.priv_auto_alloc_size a while back? If so I can fix this while merging
Regards
/Ilias
> +};
> --
> 2.27.0
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 2/2] tpm: add support for TPMv2.x I2C chips
2022-05-23 6:12 ` Ilias Apalodimas
@ 2022-05-23 13:19 ` Eddie James
2022-05-23 13:24 ` Ilias Apalodimas
0 siblings, 1 reply; 11+ messages in thread
From: Eddie James @ 2022-05-23 13:19 UTC (permalink / raw)
To: Ilias Apalodimas; +Cc: u-boot
On 5/23/22 01:12, Ilias Apalodimas wrote:
> Hi Eddie,
>
> Thanks for the patch.
>
> [...]
>
>> +static const struct tpm_tis_chip_data tpm_tis_std_chip_data = {
>> + .pcr_count = 24,
>> + .pcr_select_min = 3,
>> +};
>> +
>> +static const struct udevice_id tpm_tis_i2c_ids[] = {
>> + {
>> + .compatible = "nuvoton,npct75x",
>> + .data = (ulong)&tpm_tis_std_chip_data,
>> + },
>> + {
>> + .compatible = "tcg,tpm-tis-i2c",
>> + .data = (ulong)&tpm_tis_std_chip_data,
>> + },
>> + { }
>> +};
>> +
>> +U_BOOT_DRIVER(tpm_tis_i2c) = {
>> + .name = "tpm_tis_i2c",
>> + .id = UCLASS_TPM,
>> + .of_match = tpm_tis_i2c_ids,
>> + .ops = &tpm_tis_i2c_ops,
>> + .probe = tpm_tis_i2c_probe,
>> + .remove = tpm_tis_i2c_remove,
>> + .priv_auto_alloc_size = sizeof(struct tpm_chip),
> Shouldn't this be .priv_auto only? IIRC we got rid of the
> .priv_auto_alloc_size a while back? If so I can fix this while merging
Yes, I think so. I tested with an older u-boot (openbmc uses a modified
v2019.04) with all the TPM core patches, and I think I missed this bit
in rebasing.
Thanks,
Eddie
>
> Regards
> /Ilias
>
>> +};
>> --
>> 2.27.0
>>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 2/2] tpm: add support for TPMv2.x I2C chips
2022-05-23 13:19 ` Eddie James
@ 2022-05-23 13:24 ` Ilias Apalodimas
2022-05-27 7:26 ` Joel Stanley
0 siblings, 1 reply; 11+ messages in thread
From: Ilias Apalodimas @ 2022-05-23 13:24 UTC (permalink / raw)
To: Eddie James; +Cc: u-boot
On Mon, May 23, 2022 at 08:19:51AM -0500, Eddie James wrote:
>
> On 5/23/22 01:12, Ilias Apalodimas wrote:
> > Hi Eddie,
> >
> > Thanks for the patch.
> >
> > [...]
> >
> > > +static const struct tpm_tis_chip_data tpm_tis_std_chip_data = {
> > > + .pcr_count = 24,
> > > + .pcr_select_min = 3,
> > > +};
> > > +
> > > +static const struct udevice_id tpm_tis_i2c_ids[] = {
> > > + {
> > > + .compatible = "nuvoton,npct75x",
> > > + .data = (ulong)&tpm_tis_std_chip_data,
> > > + },
> > > + {
> > > + .compatible = "tcg,tpm-tis-i2c",
> > > + .data = (ulong)&tpm_tis_std_chip_data,
> > > + },
> > > + { }
> > > +};
> > > +
> > > +U_BOOT_DRIVER(tpm_tis_i2c) = {
> > > + .name = "tpm_tis_i2c",
> > > + .id = UCLASS_TPM,
> > > + .of_match = tpm_tis_i2c_ids,
> > > + .ops = &tpm_tis_i2c_ops,
> > > + .probe = tpm_tis_i2c_probe,
> > > + .remove = tpm_tis_i2c_remove,
> > > + .priv_auto_alloc_size = sizeof(struct tpm_chip),
> > Shouldn't this be .priv_auto only? IIRC we got rid of the
> > .priv_auto_alloc_size a while back? If so I can fix this while merging
>
>
> Yes, I think so. I tested with an older u-boot (openbmc uses a modified
> v2019.04) with all the TPM core patches, and I think I missed this bit in
> rebasing.
No worries, I can fix this while merging, there's no need for a v2. I
don't see anything obviously wrong with the patchset, unfortunately I
don't have an i2c tpm to test. Anyway
Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
P.S: Was the new TIS API useful?
Thanks
/Ilias
>
> Thanks,
>
> Eddie
>
>
> >
> > Regards
> > /Ilias
> >
> > > +};
> > > --
> > > 2.27.0
> > >
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 2/2] tpm: add support for TPMv2.x I2C chips
2022-05-23 13:24 ` Ilias Apalodimas
@ 2022-05-27 7:26 ` Joel Stanley
2022-05-27 7:41 ` Ilias Apalodimas
0 siblings, 1 reply; 11+ messages in thread
From: Joel Stanley @ 2022-05-27 7:26 UTC (permalink / raw)
To: Ilias Apalodimas; +Cc: Eddie James, U-Boot Mailing List
On Mon, 23 May 2022 at 13:25, Ilias Apalodimas
<ilias.apalodimas@linaro.org> wrote:
>
> On Mon, May 23, 2022 at 08:19:51AM -0500, Eddie James wrote:
> > Yes, I think so. I tested with an older u-boot (openbmc uses a modified
> > v2019.04) with all the TPM core patches, and I think I missed this bit in
> > rebasing.
>
> No worries, I can fix this while merging, there's no need for a v2. I
> don't see anything obviously wrong with the patchset, unfortunately I
> don't have an i2c tpm to test. Anyway
>
> Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
>
> P.S: Was the new TIS API useful?
I'll reply on behalf of Eddie; he said it made it much easier to
implement! Thanks!
We've backported the patches to our v2019.04 branch and are using them there.
Cheers,
Joel
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 2/2] tpm: add support for TPMv2.x I2C chips
2022-05-27 7:26 ` Joel Stanley
@ 2022-05-27 7:41 ` Ilias Apalodimas
0 siblings, 0 replies; 11+ messages in thread
From: Ilias Apalodimas @ 2022-05-27 7:41 UTC (permalink / raw)
To: Joel Stanley; +Cc: Eddie James, U-Boot Mailing List
On Fri, 27 May 2022 at 10:26, Joel Stanley <joel@jms.id.au> wrote:
>
> On Mon, 23 May 2022 at 13:25, Ilias Apalodimas
> <ilias.apalodimas@linaro.org> wrote:
> >
> > On Mon, May 23, 2022 at 08:19:51AM -0500, Eddie James wrote:
> > > Yes, I think so. I tested with an older u-boot (openbmc uses a modified
> > > v2019.04) with all the TPM core patches, and I think I missed this bit in
> > > rebasing.
> >
> > No worries, I can fix this while merging, there's no need for a v2. I
> > don't see anything obviously wrong with the patchset, unfortunately I
> > don't have an i2c tpm to test. Anyway
> >
> > Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
> >
> > P.S: Was the new TIS API useful?
>
> I'll reply on behalf of Eddie; he said it made it much easier to
> implement! Thanks!
>
> We've backported the patches to our v2019.04 branch and are using them there.
>
> Cheers,
Great thanks! Patches are in -master now
Cheers
/Ilias
>
> Joel
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2022-05-27 7:42 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-05-13 18:29 [PATCH 0/2] tpm: Add support for TPMv2.x I2C chips Eddie James
2022-05-13 18:29 ` [PATCH 1/2] tpm: core: Set timeouts before requesting locality Eddie James
2022-05-17 9:24 ` Ilias Apalodimas
2022-05-19 0:27 ` Joel Stanley
2022-05-13 18:30 ` [PATCH 2/2] tpm: add support for TPMv2.x I2C chips Eddie James
2022-05-19 0:26 ` Joel Stanley
2022-05-23 6:12 ` Ilias Apalodimas
2022-05-23 13:19 ` Eddie James
2022-05-23 13:24 ` Ilias Apalodimas
2022-05-27 7:26 ` Joel Stanley
2022-05-27 7:41 ` Ilias Apalodimas
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.