[U-Boot] [PATCH v4 0/4] Move tpm_tis_i2c to tpm_tis_infineon and convert last tpm driver to use DM_TPM

Hi Simon,
This patch serie move tpm_tis_i2c driver to tpm_tis_infineon. It also convert the latest tpm driver tpm_atmel_twi to DM_TPM.
In v4, i am fixing compilation errors you reported on patch 2 and 3. On patch 2 i chose to convert tpm_atmel_twi to DM_TPM without using DM_I2C as a first step to complete the core DM_TPM conversion. Hope this approach is acceptable.
Best Regards Christophe
Changes in v4: - Fix compilation issues reported by Simon Glass on - patch 2: dm: tpm: Add Driver Model support for tpm_atmel_twi driver - patch 3: dm: tpm: Remove every compilation switch for TPM driver model
Changes in v3: - Adding mention to Tom Rini review
Changes in v2: - Change existing users of config to use renamed Kconfig
Christophe Ricard (4): dm: tpm: Move tpm_tis_i2c to tpm_i2c_infineon dm: tpm: Add Driver Model support for tpm_atmel_twi driver dm: tpm: Remove every compilation switch for TPM driver model dm: tpm: Every TPM drivers should depends on DM_TPM
README | 4 +- common/cmd_tpm.c | 13 +---- .../controlcenterd_36BIT_SDCARD_DEVELOP_defconfig | 2 + configs/controlcenterd_36BIT_SDCARD_defconfig | 2 + .../controlcenterd_TRAILBLAZER_DEVELOP_defconfig | 2 + configs/controlcenterd_TRAILBLAZER_defconfig | 2 + configs/nyan-big_defconfig | 2 +- configs/peach-pi_defconfig | 2 +- configs/peach-pit_defconfig | 2 +- configs/snow_defconfig | 2 +- configs/spring_defconfig | 2 +- drivers/tpm/Kconfig | 10 ++-- drivers/tpm/Makefile | 2 +- drivers/tpm/tpm_atmel_twi.c | 68 ++++++++++++++++------ drivers/tpm/{tpm_tis_i2c.c => tpm_tis_infineon.c} | 5 +- drivers/tpm/{tpm_tis_i2c.h => tpm_tis_infineon.h} | 0 drivers/tpm/tpm_tis_lpc.c | 1 - include/tis.h | 60 ------------------- include/tpm.h | 6 -- lib/tpm.c | 20 +------ 20 files changed, 77 insertions(+), 130 deletions(-) rename drivers/tpm/{tpm_tis_i2c.c => tpm_tis_infineon.c} (99%) rename drivers/tpm/{tpm_tis_i2c.h => tpm_tis_infineon.h} (100%) delete mode 100644 include/tis.h

As there is no TCG specification or recommendation for i2c TPM 1.2, move tpm_tis_i2c driver to tpm_i2c_infineon. Other tpm vendors like Atmel or STMicroelectronics may have a different transport protocol for i2c.
Signed-off-by: Christophe Ricard christophe-h.ricard@st.com Reviewed-by: Tom Rini trini@konsulko.com ---
Changes in v4: - Fix compilation issues reported by Simon Glass on - patch 2: dm: tpm: Add Driver Model support for tpm_atmel_twi driver - patch 3: dm: tpm: Remove every compilation switch for TPM driver model
Changes in v3: - Adding mention to Tom Rini review
Changes in v2: - Change existing users of config to use renamed Kconfig
README | 4 ++-- configs/nyan-big_defconfig | 2 +- configs/peach-pi_defconfig | 2 +- configs/peach-pit_defconfig | 2 +- configs/snow_defconfig | 2 +- configs/spring_defconfig | 2 +- drivers/tpm/Kconfig | 4 ++-- drivers/tpm/Makefile | 2 +- drivers/tpm/{tpm_tis_i2c.c => tpm_tis_infineon.c} | 4 ++-- drivers/tpm/{tpm_tis_i2c.h => tpm_tis_infineon.h} | 0 10 files changed, 12 insertions(+), 12 deletions(-) rename drivers/tpm/{tpm_tis_i2c.c => tpm_tis_infineon.c} (99%) rename drivers/tpm/{tpm_tis_i2c.h => tpm_tis_infineon.h} (100%)
diff --git a/README b/README index c22b60b..48ea80d 100644 --- a/README +++ b/README @@ -1478,8 +1478,8 @@ The following options need to be configured: CONFIG_TPM Support TPM devices.
- CONFIG_TPM_TIS_I2C - Support for i2c bus TPM devices. Only one device + CONFIG_TPM_TIS_INFINEON + Support for Infineon i2c bus TPM devices. Only one device per system is supported at this time.
CONFIG_TPM_TIS_I2C_BURST_LIMITATION diff --git a/configs/nyan-big_defconfig b/configs/nyan-big_defconfig index 2dd2930..4f31c1c 100644 --- a/configs/nyan-big_defconfig +++ b/configs/nyan-big_defconfig @@ -20,7 +20,7 @@ CONFIG_CROS_EC_SPI=y CONFIG_SPI_FLASH=y CONFIG_TEGRA114_SPI=y CONFIG_DM_TPM=y -CONFIG_TPM_TIS_I2C=y +CONFIG_TPM_TIS_INFINEON=y CONFIG_USB=y CONFIG_DM_USB=y CONFIG_DISPLAY_PORT=y diff --git a/configs/peach-pi_defconfig b/configs/peach-pi_defconfig index dfdf61b..6eff072 100644 --- a/configs/peach-pi_defconfig +++ b/configs/peach-pi_defconfig @@ -30,7 +30,7 @@ CONFIG_I2S_SAMSUNG=y CONFIG_SOUND_MAX98095=y CONFIG_SOUND_WM8994=y CONFIG_DM_TPM=y -CONFIG_TPM_TIS_I2C=y +CONFIG_TPM_TIS_INFINEON=y CONFIG_USB=y CONFIG_DM_USB=y CONFIG_VIDEO_BRIDGE=y diff --git a/configs/peach-pit_defconfig b/configs/peach-pit_defconfig index 01c4f37..24bc161 100644 --- a/configs/peach-pit_defconfig +++ b/configs/peach-pit_defconfig @@ -30,7 +30,7 @@ CONFIG_I2S_SAMSUNG=y CONFIG_SOUND_MAX98095=y CONFIG_SOUND_WM8994=y CONFIG_DM_TPM=y -CONFIG_TPM_TIS_I2C=y +CONFIG_TPM_TIS_INFINEON=y CONFIG_USB=y CONFIG_DM_USB=y CONFIG_VIDEO_BRIDGE=y diff --git a/configs/snow_defconfig b/configs/snow_defconfig index c4e2f61..0c9ca8b 100644 --- a/configs/snow_defconfig +++ b/configs/snow_defconfig @@ -39,7 +39,7 @@ CONFIG_I2S_SAMSUNG=y CONFIG_SOUND_MAX98095=y CONFIG_SOUND_WM8994=y CONFIG_DM_TPM=y -CONFIG_TPM_TIS_I2C=y +CONFIG_TPM_TIS_INFINEON=y CONFIG_USB=y CONFIG_DM_USB=y CONFIG_VIDEO_BRIDGE=y diff --git a/configs/spring_defconfig b/configs/spring_defconfig index 4acadf3..47bc643 100644 --- a/configs/spring_defconfig +++ b/configs/spring_defconfig @@ -39,7 +39,7 @@ CONFIG_I2S_SAMSUNG=y CONFIG_SOUND_MAX98095=y CONFIG_SOUND_WM8994=y CONFIG_DM_TPM=y -CONFIG_TPM_TIS_I2C=y +CONFIG_TPM_TIS_INFINEON=y CONFIG_USB=y CONFIG_DM_USB=y CONFIG_VIDEO_BRIDGE=y diff --git a/drivers/tpm/Kconfig b/drivers/tpm/Kconfig index 6bc8fdd..dacb847 100644 --- a/drivers/tpm/Kconfig +++ b/drivers/tpm/Kconfig @@ -31,7 +31,7 @@ config TPM_ATMEL_TWI to the device using the standard TPM Interface Specification (TIS) protocol
-config TPM_TIS_I2C +config TPM_TIS_INFINEON bool "Enable support for Infineon SLB9635/45 TPMs on I2C" depends on TPM && DM_I2C help @@ -42,7 +42,7 @@ config TPM_TIS_I2C
config TPM_TIS_I2C_BURST_LIMITATION bool "Enable I2C burst length limitation" - depends on TPM_TIS_I2C + 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 diff --git a/drivers/tpm/Makefile b/drivers/tpm/Makefile index 0d328f8..5748145 100644 --- a/drivers/tpm/Makefile +++ b/drivers/tpm/Makefile @@ -6,6 +6,6 @@ obj-$(CONFIG_DM_TPM) += tpm-uclass.o
obj-$(CONFIG_TPM_ATMEL_TWI) += tpm_atmel_twi.o -obj-$(CONFIG_TPM_TIS_I2C) += tpm_tis_i2c.o +obj-$(CONFIG_TPM_TIS_INFINEON) += tpm_tis_infineon.o obj-$(CONFIG_TPM_TIS_LPC) += tpm_tis_lpc.o obj-$(CONFIG_TPM_TIS_SANDBOX) += tpm_tis_sandbox.o diff --git a/drivers/tpm/tpm_tis_i2c.c b/drivers/tpm/tpm_tis_infineon.c similarity index 99% rename from drivers/tpm/tpm_tis_i2c.c rename to drivers/tpm/tpm_tis_infineon.c index 9afe46c..88eb786 100644 --- a/drivers/tpm/tpm_tis_i2c.c +++ b/drivers/tpm/tpm_tis_infineon.c @@ -31,7 +31,7 @@ #include <linux/types.h> #include <linux/unaligned/be_byteshift.h>
-#include "tpm_tis_i2c.h" +#include "tpm_tis_infineon.h" #include "tpm_internal.h"
DECLARE_GLOBAL_DATA_PTR; @@ -614,7 +614,7 @@ static const struct udevice_id tpm_tis_i2c_ids[] = { };
U_BOOT_DRIVER(tpm_tis_i2c) = { - .name = "tpm_tis_i2c", + .name = "tpm_tis_infineon", .id = UCLASS_TPM, .of_match = tpm_tis_i2c_ids, .ops = &tpm_tis_i2c_ops, diff --git a/drivers/tpm/tpm_tis_i2c.h b/drivers/tpm/tpm_tis_infineon.h similarity index 100% rename from drivers/tpm/tpm_tis_i2c.h rename to drivers/tpm/tpm_tis_infineon.h

On 6 October 2015 at 21:54, Christophe Ricard christophe.ricard@gmail.com wrote:
As there is no TCG specification or recommendation for i2c TPM 1.2, move tpm_tis_i2c driver to tpm_i2c_infineon. Other tpm vendors like Atmel or STMicroelectronics may have a different transport protocol for i2c.
Signed-off-by: Christophe Ricard christophe-h.ricard@st.com Reviewed-by: Tom Rini trini@konsulko.com
Changes in v4: - Fix compilation issues reported by Simon Glass on - patch 2: dm: tpm: Add Driver Model support for tpm_atmel_twi driver - patch 3: dm: tpm: Remove every compilation switch for TPM driver model
Changes in v3:
- Adding mention to Tom Rini review
Changes in v2:
- Change existing users of config to use renamed Kconfig
README | 4 ++-- configs/nyan-big_defconfig | 2 +- configs/peach-pi_defconfig | 2 +- configs/peach-pit_defconfig | 2 +- configs/snow_defconfig | 2 +- configs/spring_defconfig | 2 +- drivers/tpm/Kconfig | 4 ++-- drivers/tpm/Makefile | 2 +- drivers/tpm/{tpm_tis_i2c.c => tpm_tis_infineon.c} | 4 ++-- drivers/tpm/{tpm_tis_i2c.h => tpm_tis_infineon.h} | 0 10 files changed, 12 insertions(+), 12 deletions(-) rename drivers/tpm/{tpm_tis_i2c.c => tpm_tis_infineon.c} (99%) rename drivers/tpm/{tpm_tis_i2c.h => tpm_tis_infineon.h} (100%)
Acked-by: Simon Glass sjg@chromium.org

On 8 October 2015 at 15:45, Simon Glass sjg@chromium.org wrote:
On 6 October 2015 at 21:54, Christophe Ricard christophe.ricard@gmail.com wrote:
As there is no TCG specification or recommendation for i2c TPM 1.2, move tpm_tis_i2c driver to tpm_i2c_infineon. Other tpm vendors like Atmel or STMicroelectronics may have a different transport protocol for i2c.
Signed-off-by: Christophe Ricard christophe-h.ricard@st.com Reviewed-by: Tom Rini trini@konsulko.com
Changes in v4: - Fix compilation issues reported by Simon Glass on - patch 2: dm: tpm: Add Driver Model support for tpm_atmel_twi driver - patch 3: dm: tpm: Remove every compilation switch for TPM driver model
Changes in v3:
- Adding mention to Tom Rini review
Changes in v2:
- Change existing users of config to use renamed Kconfig
README | 4 ++-- configs/nyan-big_defconfig | 2 +- configs/peach-pi_defconfig | 2 +- configs/peach-pit_defconfig | 2 +- configs/snow_defconfig | 2 +- configs/spring_defconfig | 2 +- drivers/tpm/Kconfig | 4 ++-- drivers/tpm/Makefile | 2 +- drivers/tpm/{tpm_tis_i2c.c => tpm_tis_infineon.c} | 4 ++-- drivers/tpm/{tpm_tis_i2c.h => tpm_tis_infineon.h} | 0 10 files changed, 12 insertions(+), 12 deletions(-) rename drivers/tpm/{tpm_tis_i2c.c => tpm_tis_infineon.c} (99%) rename drivers/tpm/{tpm_tis_i2c.h => tpm_tis_infineon.h} (100%)
Acked-by: Simon Glass sjg@chromium.org
Applied to u-boot-dm, thanks!

tpm_atmel_twi can fit perfectly to the new UCLASS_TPM class.
Signed-off-by: Christophe Ricard christophe-h.ricard@st.com Reviewed-by: Tom Rini trini@konsulko.com ---
Changes in v4: None Changes in v3: None Changes in v2: None
.../controlcenterd_36BIT_SDCARD_DEVELOP_defconfig | 2 + configs/controlcenterd_36BIT_SDCARD_defconfig | 2 + .../controlcenterd_TRAILBLAZER_DEVELOP_defconfig | 2 + configs/controlcenterd_TRAILBLAZER_defconfig | 2 + drivers/tpm/Kconfig | 2 +- drivers/tpm/tpm_atmel_twi.c | 68 ++++++++++++++++------ 6 files changed, 59 insertions(+), 19 deletions(-)
diff --git a/configs/controlcenterd_36BIT_SDCARD_DEVELOP_defconfig b/configs/controlcenterd_36BIT_SDCARD_DEVELOP_defconfig index c8ab862..58566c1 100644 --- a/configs/controlcenterd_36BIT_SDCARD_DEVELOP_defconfig +++ b/configs/controlcenterd_36BIT_SDCARD_DEVELOP_defconfig @@ -6,6 +6,8 @@ CONFIG_SYS_EXTRA_OPTIONS="36BIT,SDCARD,DEVELOP" # CONFIG_CMD_FLASH is not set CONFIG_CMD_TPM=y CONFIG_SPI_FLASH=y +CONFIG_DM=y +CONFIG_DM_TPM=y CONFIG_TPM_ATMEL_TWI=y CONFIG_TPM_AUTH_SESSIONS=y CONFIG_TPM=y diff --git a/configs/controlcenterd_36BIT_SDCARD_defconfig b/configs/controlcenterd_36BIT_SDCARD_defconfig index 21c0eab..56a4910 100644 --- a/configs/controlcenterd_36BIT_SDCARD_defconfig +++ b/configs/controlcenterd_36BIT_SDCARD_defconfig @@ -6,6 +6,8 @@ CONFIG_SYS_EXTRA_OPTIONS="36BIT,SDCARD" # CONFIG_CMD_FLASH is not set CONFIG_CMD_TPM=y CONFIG_SPI_FLASH=y +CONFIG_DM=y +CONFIG_DM_TPM=y CONFIG_TPM_ATMEL_TWI=y CONFIG_TPM_AUTH_SESSIONS=y CONFIG_TPM=y diff --git a/configs/controlcenterd_TRAILBLAZER_DEVELOP_defconfig b/configs/controlcenterd_TRAILBLAZER_DEVELOP_defconfig index c3a0920..cbf43ef 100644 --- a/configs/controlcenterd_TRAILBLAZER_DEVELOP_defconfig +++ b/configs/controlcenterd_TRAILBLAZER_DEVELOP_defconfig @@ -7,6 +7,8 @@ CONFIG_SYS_EXTRA_OPTIONS="TRAILBLAZER,SPIFLASH,DEVELOP" # CONFIG_CMD_FLASH is not set # CONFIG_CMD_SETEXPR is not set CONFIG_CMD_TPM=y +CONFIG_DM=y +CONFIG_DM_TPM=y CONFIG_TPM_ATMEL_TWI=y CONFIG_TPM_AUTH_SESSIONS=y CONFIG_TPM=y diff --git a/configs/controlcenterd_TRAILBLAZER_defconfig b/configs/controlcenterd_TRAILBLAZER_defconfig index 08aae9a..e897422 100644 --- a/configs/controlcenterd_TRAILBLAZER_defconfig +++ b/configs/controlcenterd_TRAILBLAZER_defconfig @@ -7,6 +7,8 @@ CONFIG_SYS_EXTRA_OPTIONS="TRAILBLAZER,SPIFLASH" # CONFIG_CMD_FLASH is not set # CONFIG_CMD_SETEXPR is not set CONFIG_CMD_TPM=y +CONFIG_DM=y +CONFIG_DM_TPM=y CONFIG_TPM_ATMEL_TWI=y CONFIG_TPM_AUTH_SESSIONS=y CONFIG_TPM=y diff --git a/drivers/tpm/Kconfig b/drivers/tpm/Kconfig index dacb847..ff2cdbe 100644 --- a/drivers/tpm/Kconfig +++ b/drivers/tpm/Kconfig @@ -24,7 +24,7 @@ config TPM_TIS_SANDBOX
config TPM_ATMEL_TWI bool "Enable Atmel TWI TPM device driver" - depends on TPM + depends on TPM && DM_I2C 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 diff --git a/drivers/tpm/tpm_atmel_twi.c b/drivers/tpm/tpm_atmel_twi.c index 205d7a5..2aa9381 100644 --- a/drivers/tpm/tpm_atmel_twi.c +++ b/drivers/tpm/tpm_atmel_twi.c @@ -7,51 +7,56 @@ */
#include <common.h> +#include <dm.h> #include <tpm.h> #include <i2c.h> #include <asm/unaligned.h>
+#include "tpm_internal.h" + #define ATMEL_TPM_TIMEOUT_MS 5000 /* sufficient for anything but generating/exporting keys */
/* - * tis_init() - * - * Initialize the TPM device. Returns 0 on success or -1 on - * failure (in case device probing did not succeed). - */ -int tis_init(void) -{ - return 0; -} - -/* - * tis_open() + * tpm_atmel_twi_open() * * Requests access to locality 0 for the caller. After all commands have been * completed the caller is supposed to call tis_close(). * * Returns 0 on success, -1 on failure. */ -int tis_open(void) +static int tpm_atmel_twi_open(struct udevice *dev) { return 0; }
/* - * tis_close() + * tpm_atmel_twi_close() * * terminate the currect session with the TPM by releasing the locked * locality. Returns 0 on success of -1 on failure (in case lock * removal did not succeed). */ -int tis_close(void) +static int tpm_atmel_twi_close(struct udevice *dev) +{ + return 0; +} + +/* + * tpm_atmel_twi_get_desc() + * + * @dev: Device to check + * @buf: Buffer to put the string + * @size: Maximum size of buffer + * @return length of string, or -ENOSPC it no space + */ +static int tpm_atmel_twi_get_desc(struct udevice *dev, char *buf, int size) { return 0; }
/* - * tis_sendrecv() + * tpm_atmel_twi_xfer() * * Send the requested data to the TPM and then try to get its response * @@ -63,8 +68,9 @@ int tis_close(void) * Returns 0 on success (and places the number of response bytes at recv_len) * or -1 on failure. */ -int tis_sendrecv(const uint8_t *sendbuf, size_t send_size, uint8_t *recvbuf, - size_t *recv_len) +static int tpm_atmel_twi_xfer(struct udevice *dev, + const uint8_t *sendbuf, size_t send_size, + uint8_t *recvbuf, size_t *recv_len) { int res; unsigned long start; @@ -83,6 +89,7 @@ int tis_sendrecv(const uint8_t *sendbuf, size_t send_size, uint8_t *recvbuf,
start = get_timer(0); while ((res = i2c_read(0x29, 0, 0, recvbuf, 10))) { + /* TODO Use TIS_TIMEOUT from tpm_tis_infineon.h */ if (get_timer(start) > ATMEL_TPM_TIMEOUT_MS) { puts("tpm timed out\n"); return -1; @@ -110,3 +117,28 @@ int tis_sendrecv(const uint8_t *sendbuf, size_t send_size, uint8_t *recvbuf,
return res; } + +static int tpm_atmel_twi_probe(struct udevice *dev) +{ + return 0; +} + +static const struct udevice_id tpm_atmel_twi_ids[] = { + { .compatible = "atmel,at97sc3204t"}, + { } +}; + +static const struct tpm_ops tpm_atmel_twi_ops = { + .open = tpm_atmel_twi_open, + .close = tpm_atmel_twi_close, + .xfer = tpm_atmel_twi_xfer, + .get_desc = tpm_atmel_twi_get_desc, +}; + +U_BOOT_DRIVER(tpm_atmel_twi) = { + .name = "tpm_atmel_twi", + .id = UCLASS_TPM, + .of_match = tpm_atmel_twi_ids, + .ops = &tpm_atmel_twi_ops, + .probe = tpm_atmel_twi_probe, +};

On 6 October 2015 at 21:54, Christophe Ricard christophe.ricard@gmail.com wrote:
tpm_atmel_twi can fit perfectly to the new UCLASS_TPM class.
Signed-off-by: Christophe Ricard christophe-h.ricard@st.com Reviewed-by: Tom Rini trini@konsulko.com
Changes in v4: None Changes in v3: None Changes in v2: None
.../controlcenterd_36BIT_SDCARD_DEVELOP_defconfig | 2 + configs/controlcenterd_36BIT_SDCARD_defconfig | 2 + .../controlcenterd_TRAILBLAZER_DEVELOP_defconfig | 2 + configs/controlcenterd_TRAILBLAZER_defconfig | 2 + drivers/tpm/Kconfig | 2 +- drivers/tpm/tpm_atmel_twi.c | 68 ++++++++++++++++------ 6 files changed, 59 insertions(+), 19 deletions(-)
Acked-by: Simon Glass sjg@chromium.org

On 8 October 2015 at 15:45, Simon Glass sjg@chromium.org wrote:
On 6 October 2015 at 21:54, Christophe Ricard christophe.ricard@gmail.com wrote:
tpm_atmel_twi can fit perfectly to the new UCLASS_TPM class.
Signed-off-by: Christophe Ricard christophe-h.ricard@st.com Reviewed-by: Tom Rini trini@konsulko.com
Changes in v4: None Changes in v3: None Changes in v2: None
.../controlcenterd_36BIT_SDCARD_DEVELOP_defconfig | 2 + configs/controlcenterd_36BIT_SDCARD_defconfig | 2 + .../controlcenterd_TRAILBLAZER_DEVELOP_defconfig | 2 + configs/controlcenterd_TRAILBLAZER_defconfig | 2 + drivers/tpm/Kconfig | 2 +- drivers/tpm/tpm_atmel_twi.c | 68 ++++++++++++++++------ 6 files changed, 59 insertions(+), 19 deletions(-)
Acked-by: Simon Glass sjg@chromium.org
Applied to u-boot-dm, thanks!

As every TPM drivers support UCLASS_TPM, we can only rely on DM_TPM functions.
This simplify a bit the code.
Signed-off-by: Christophe Ricard christophe-h.ricard@st.com Reviewed-by: Tom Rini trini@konsulko.com ---
Changes in v4: None Changes in v3: None Changes in v2: None
common/cmd_tpm.c | 13 +-------- drivers/tpm/tpm_tis_infineon.c | 1 - drivers/tpm/tpm_tis_lpc.c | 1 - include/tis.h | 60 ------------------------------------------ include/tpm.h | 6 ----- lib/tpm.c | 20 +++----------- 6 files changed, 4 insertions(+), 97 deletions(-) delete mode 100644 include/tis.h
diff --git a/common/cmd_tpm.c b/common/cmd_tpm.c index 97501cc..add6bfb 100644 --- a/common/cmd_tpm.c +++ b/common/cmd_tpm.c @@ -443,7 +443,6 @@ TPM_COMMAND_NO_ARG(tpm_force_clear) TPM_COMMAND_NO_ARG(tpm_physical_enable) TPM_COMMAND_NO_ARG(tpm_physical_disable)
-#ifdef CONFIG_DM_TPM static int get_tpm(struct udevice **devp) { int rc; @@ -476,11 +475,11 @@ static int do_tpm_info(cmd_tbl_t *cmdtp, int flag, int argc,
return 0; } -#endif
static int do_tpm_raw_transfer(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { + struct udevice *dev; void *command; uint8_t response[1024]; size_t count, response_length = sizeof(response); @@ -492,17 +491,11 @@ static int do_tpm_raw_transfer(cmd_tbl_t *cmdtp, int flag, return CMD_RET_FAILURE; }
-#ifdef CONFIG_DM_TPM - struct udevice *dev; - rc = get_tpm(&dev); if (rc) return rc;
rc = tpm_xfer(dev, command, count, response, &response_length); -#else - rc = tis_sendrecv(command, count, response, &response_length); -#endif free(command); if (!rc) { puts("tpm response:\n"); @@ -657,9 +650,7 @@ TPM_COMMAND_NO_ARG(tpm_end_oiap) U_BOOT_CMD_MKENT(cmd, 0, 1, do_tpm_ ## cmd, "", "")
static cmd_tbl_t tpm_commands[] = { -#ifdef CONFIG_DM_TPM U_BOOT_CMD_MKENT(info, 0, 1, do_tpm_info, "", ""), -#endif U_BOOT_CMD_MKENT(init, 0, 1, do_tpm_init, "", ""), U_BOOT_CMD_MKENT(startup, 0, 1, @@ -730,9 +721,7 @@ U_BOOT_CMD(tpm, CONFIG_SYS_MAXARGS, 1, do_tpm, "cmd args...\n" " - Issue TPM command <cmd> with arguments <args...>.\n" "Admin Startup and State Commands:\n" -#ifdef CONFIG_DM_TPM " info - Show information about the TPM\n" -#endif " init\n" " - Put TPM into a state where it waits for 'startup' command.\n" " startup mode\n" diff --git a/drivers/tpm/tpm_tis_infineon.c b/drivers/tpm/tpm_tis_infineon.c index 88eb786..f57c328 100644 --- a/drivers/tpm/tpm_tis_infineon.c +++ b/drivers/tpm/tpm_tis_infineon.c @@ -24,7 +24,6 @@ #include <dm.h> #include <fdtdec.h> #include <i2c.h> -#include <tis.h> #include <tpm.h> #include <asm-generic/errno.h> #include <linux/compiler.h> diff --git a/drivers/tpm/tpm_tis_lpc.c b/drivers/tpm/tpm_tis_lpc.c index b41c3ce..257d035 100644 --- a/drivers/tpm/tpm_tis_lpc.c +++ b/drivers/tpm/tpm_tis_lpc.c @@ -16,7 +16,6 @@ #include <common.h> #include <dm.h> #include <mapmem.h> -#include <tis.h> #include <tpm.h> #include <asm/io.h>
diff --git a/include/tis.h b/include/tis.h deleted file mode 100644 index 1985d9e..0000000 --- a/include/tis.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (c) 2011 The Chromium OS Authors. - * - * SPDX-License-Identifier: GPL-2.0+ - */ - -#ifndef __TIS_H -#define __TIS_H - -#ifndef CONFIG_DM_TPM - -#include <common.h> - -/* Low-level interface to access TPM */ - -/* - * tis_init() - * - * Initialize the TPM device. Returns 0 on success or -1 on - * failure (in case device probing did not succeed). - */ -int tis_init(void); - -/* - * tis_open() - * - * Requests access to locality 0 for the caller. After all commands have been - * completed the caller is supposed to call tis_close(). - * - * Returns 0 on success, -1 on failure. - */ -int tis_open(void); - -/* - * tis_close() - * - * terminate the currect session with the TPM by releasing the locked - * locality. Returns 0 on success of -1 on failure (in case lock - * removal did not succeed). - */ -int tis_close(void); - -/* - * tis_sendrecv() - * - * Send the requested data to the TPM and then try to get its response - * - * @sendbuf - buffer of the data to send - * @send_size size of the data to send - * @recvbuf - memory to save the response to - * @recv_len - pointer to the size of the response buffer - * - * Returns 0 on success (and places the number of response bytes at recv_len) - * or -1 on failure. - */ -int tis_sendrecv(const uint8_t *sendbuf, size_t send_size, uint8_t *recvbuf, - size_t *recv_len); -#endif - -#endif /* __TIS_H */ diff --git a/include/tpm.h b/include/tpm.h index 086b672..9a6585d 100644 --- a/include/tpm.h +++ b/include/tpm.h @@ -8,8 +8,6 @@ #ifndef __TPM_H #define __TPM_H
-#include <tis.h> - /* * Here is a partial implementation of TPM commands. Please consult TCG Main * Specification for definitions of TPM commands. @@ -196,8 +194,6 @@ struct tpm_permanent_flags { u8 disable_full_da_logic_info; } __packed;
-#ifdef CONFIG_DM_TPM - /* Max buffer size supported by our tpm */ #define TPM_DEV_BUFSIZE 1260
@@ -375,8 +371,6 @@ int tpm_get_desc(struct udevice *dev, char *buf, int size); int tpm_xfer(struct udevice *dev, const uint8_t *sendbuf, size_t send_size, uint8_t *recvbuf, size_t *recv_size);
-#endif /* CONFIG_DM_TPM */ - /** * Initialize TPM device. It must be called before any TPM commands. * diff --git a/lib/tpm.c b/lib/tpm.c index 5d5f707..8a62216 100644 --- a/lib/tpm.c +++ b/lib/tpm.c @@ -7,7 +7,6 @@
#include <common.h> #include <dm.h> -#include <tis.h> #include <tpm.h> #include <asm/unaligned.h> #include <u-boot/sha1.h> @@ -230,6 +229,8 @@ static uint32_t tpm_return_code(const void *response) static uint32_t tpm_sendrecv_command(const void *command, void *response, size_t *size_ptr) { + struct udevice *dev; + int ret; uint8_t response_buffer[COMMAND_BUFFER_SIZE]; size_t response_length; uint32_t err; @@ -240,19 +241,13 @@ static uint32_t tpm_sendrecv_command(const void *command, response = response_buffer; response_length = sizeof(response_buffer); } -#ifdef CONFIG_DM_TPM - struct udevice *dev; - int ret;
ret = uclass_first_device(UCLASS_TPM, &dev); if (ret) return ret; err = tpm_xfer(dev, command, tpm_command_size(command), response, &response_length); -#else - err = tis_sendrecv(command, tpm_command_size(command), - response, &response_length); -#endif + if (err < 0) return TPM_LIB_ERROR; if (size_ptr) @@ -264,21 +259,12 @@ static uint32_t tpm_sendrecv_command(const void *command, int tpm_init(void) { int err; - -#ifdef CONFIG_DM_TPM struct udevice *dev;
err = uclass_first_device(UCLASS_TPM, &dev); if (err) return err; return tpm_open(dev); -#else - err = tis_init(); - if (err) - return err; - - return tis_open(); -#endif }
uint32_t tpm_startup(enum tpm_startup_type mode)

On 6 October 2015 at 21:54, Christophe Ricard christophe.ricard@gmail.com wrote:
As every TPM drivers support UCLASS_TPM, we can only rely on DM_TPM functions.
This simplify a bit the code.
Signed-off-by: Christophe Ricard christophe-h.ricard@st.com Reviewed-by: Tom Rini trini@konsulko.com
Changes in v4: None Changes in v3: None Changes in v2: None
common/cmd_tpm.c | 13 +-------- drivers/tpm/tpm_tis_infineon.c | 1 - drivers/tpm/tpm_tis_lpc.c | 1 - include/tis.h | 60 ------------------------------------------ include/tpm.h | 6 ----- lib/tpm.c | 20 +++----------- 6 files changed, 4 insertions(+), 97 deletions(-) delete mode 100644 include/tis.h
Acked-by: Simon Glass sjg@chromium.org

On 8 October 2015 at 15:45, Simon Glass sjg@chromium.org wrote:
On 6 October 2015 at 21:54, Christophe Ricard christophe.ricard@gmail.com wrote:
As every TPM drivers support UCLASS_TPM, we can only rely on DM_TPM functions.
This simplify a bit the code.
Signed-off-by: Christophe Ricard christophe-h.ricard@st.com Reviewed-by: Tom Rini trini@konsulko.com
Changes in v4: None Changes in v3: None Changes in v2: None
common/cmd_tpm.c | 13 +-------- drivers/tpm/tpm_tis_infineon.c | 1 - drivers/tpm/tpm_tis_lpc.c | 1 - include/tis.h | 60 ------------------------------------------ include/tpm.h | 6 ----- lib/tpm.c | 20 +++----------- 6 files changed, 4 insertions(+), 97 deletions(-) delete mode 100644 include/tis.h
Acked-by: Simon Glass sjg@chromium.org
Applied to u-boot-dm, thanks!

Every TPM drivers should now depends on DM_TPM and not only TPM.
Signed-off-by: Christophe Ricard christophe-h.ricard@st.com Reviewed-by: Tom Rini trini@konsulko.com ---
Changes in v4: None Changes in v3: None Changes in v2: None
drivers/tpm/Kconfig | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/tpm/Kconfig b/drivers/tpm/Kconfig index ff2cdbe..3ab652c 100644 --- a/drivers/tpm/Kconfig +++ b/drivers/tpm/Kconfig @@ -24,7 +24,7 @@ config TPM_TIS_SANDBOX
config TPM_ATMEL_TWI bool "Enable Atmel TWI TPM device driver" - depends on TPM && DM_I2C + depends on DM_TPM && DM_I2C 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 @@ -33,7 +33,7 @@ config TPM_ATMEL_TWI
config TPM_TIS_INFINEON bool "Enable support for Infineon SLB9635/45 TPMs on I2C" - depends on TPM && DM_I2C + depends on DM_TPM && 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 @@ -57,7 +57,7 @@ config TPM_TIS_I2C_BURST_LIMITATION_LEN
config TPM_TIS_LPC bool "Enable support for Infineon SLB9635/45 TPMs on LPC" - depends on TPM && X86 + depends on DM_TPM && X86 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

On 6 October 2015 at 21:54, Christophe Ricard christophe.ricard@gmail.com wrote:
Every TPM drivers should now depends on DM_TPM and not only TPM.
Signed-off-by: Christophe Ricard christophe-h.ricard@st.com Reviewed-by: Tom Rini trini@konsulko.com
Changes in v4: None Changes in v3: None Changes in v2: None
drivers/tpm/Kconfig | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
Acked-by: Simon Glass sjg@chromium.org

On 8 October 2015 at 15:45, Simon Glass sjg@chromium.org wrote:
On 6 October 2015 at 21:54, Christophe Ricard christophe.ricard@gmail.com wrote:
Every TPM drivers should now depends on DM_TPM and not only TPM.
Signed-off-by: Christophe Ricard christophe-h.ricard@st.com Reviewed-by: Tom Rini trini@konsulko.com
Changes in v4: None Changes in v3: None Changes in v2: None
drivers/tpm/Kconfig | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
Acked-by: Simon Glass sjg@chromium.org
Applied to u-boot-dm, thanks!
participants (2)
-
Christophe Ricard
-
Simon Glass