
Hi Christophe,
On 13 August 2015 at 14:59, Christophe Ricard christophe.ricard@gmail.com wrote:
Hi Simon,
On 13/08/2015 17:55, Simon Glass wrote:
Hi Christophe,
On 9 August 2015 at 07:19, Christophe Ricard christophe.ricard@gmail.com wrote:
Add TPM st33zp24 tpm with i2c and spi phy. This is a port from Linux. This driver relies on tpm uclass.
Signed-off-by: Christophe Ricard christophe-h.ricard@st.com
README | 11 + drivers/tpm/Makefile | 1 + drivers/tpm/st33zp24/Makefile | 7 + drivers/tpm/st33zp24/i2c.c | 226 ++++++++++++++++ drivers/tpm/st33zp24/spi.c | 286 ++++++++++++++++++++ drivers/tpm/st33zp24/st33zp24.c | 454 ++++++++++++++++++++++++++++++++ drivers/tpm/st33zp24/st33zp24.h | 29 ++ include/dm/platform_data/st33zp24_i2c.h | 28 ++ include/dm/platform_data/st33zp24_spi.h | 30 +++ include/fdtdec.h | 5 +- lib/fdtdec.c | 2 + 11 files changed, 1078 insertions(+), 1 deletion(-) create mode 100644 drivers/tpm/st33zp24/Makefile create mode 100644 drivers/tpm/st33zp24/i2c.c create mode 100644 drivers/tpm/st33zp24/spi.c create mode 100644 drivers/tpm/st33zp24/st33zp24.c create mode 100644 drivers/tpm/st33zp24/st33zp24.h create mode 100644 include/dm/platform_data/st33zp24_i2c.h create mode 100644 include/dm/platform_data/st33zp24_spi.h
diff --git a/README b/README index 506ff6c..d3f9590 100644 --- a/README +++ b/README @@ -1499,6 +1499,17 @@ The following options need to be configured: CONFIG_TPM_TIS_I2C_BURST_LIMITATION Define the burst count bytes upper limit
CONFIG_TPM_ST33ZP24
Support for STMicroelectronics TPM devices. Requires
DM_TPM support.
CONFIG_TPM_ST33ZP24_I2C
Support for STMicroelectronics ST33ZP24 I2C
devices.
Requires TPM_ST33ZP24 and I2C.
CONFIG_TPM_ST33ZP24_SPI
Support for STMicroelectronics ST33ZP24 SPI
devices.
Requires TPM_ST33ZP24 and SPI.
These can go in Kconfig
Ok, your are correct, i will update this in a future v2.
CONFIG_TPM_ATMEL_TWI Support for Atmel TWI TPM device. Requires I2C support.
diff --git a/drivers/tpm/Makefile b/drivers/tpm/Makefile index bd2cd6d..48bc5f3 100644 --- a/drivers/tpm/Makefile +++ b/drivers/tpm/Makefile @@ -9,3 +9,4 @@ obj-$(CONFIG_DM_TPM) += tpm.o obj-$(CONFIG_TPM_INFINEON_I2C) += tpm_i2c_infineon.o obj-$(CONFIG_TPM_TIS_LPC) += tpm_tis_lpc.o obj-$(CONFIG_TPM_TIS_SANDBOX) += tpm_tis_sandbox.o +obj-$(CONFIG_TPM_ST33ZP24) += st33zp24/ diff --git a/drivers/tpm/st33zp24/Makefile b/drivers/tpm/st33zp24/Makefile new file mode 100644 index 0000000..ed28e8c --- /dev/null +++ b/drivers/tpm/st33zp24/Makefile @@ -0,0 +1,7 @@ +# +# Makefile for ST33ZP24 TPM 1.2 driver +#
+obj-$(CONFIG_TPM_ST33ZP24) += st33zp24.o +obj-$(CONFIG_TPM_ST33ZP24_I2C) += i2c.o +obj-$(CONFIG_TPM_ST33ZP24_SPI) += spi.o diff --git a/drivers/tpm/st33zp24/i2c.c b/drivers/tpm/st33zp24/i2c.c new file mode 100644 index 0000000..204021a --- /dev/null +++ b/drivers/tpm/st33zp24/i2c.c @@ -0,0 +1,226 @@ +/*
- STMicroelectronics TPM ST33ZP24 I2C phy for UBOOT
- Copyright (C) 2015 STMicroelectronics
- Description: Device driver for ST33ZP24 I2C TPM TCG.
- This device driver implements the TPM interface as defined in
- the TCG TPM Interface Spec version 1.21, revision 1.0 and the
- STMicroelectronics I2C Protocol Stack Specification version 1.2.0.
- SPDX-License-Identifier: GPL-2.0+
- */
+#include <common.h> +#include <i2c.h> +#include <dm.h> +#include <linux/types.h>
That may not be needed, but if so should go after the dm/platform_data...
+#include <malloc.h> +#include <tpm.h> +#include <errno.h>
Should go up under common.h
ok.
+#include <asm/unaligned.h> +#include <dm/platform_data/st33zp24_i2c.h>
+#include "../tpm_private.h" +#include "st33zp24.h"
+DECLARE_GLOBAL_DATA_PTR;
+#define TPM_DUMMY_BYTE 0xAA +#define TPM_ST33ZP24_I2C_SLAVE_ADDR 0x13
+struct st33zp24_i2c_phy {
uint8_t slave_addr;
int i2c_bus;
int old_bus;
u8 buf[TPM_BUFSIZE + 1];
+} __packed;
Should not need address and bus - just use a struct udevice. Also, why __packed?
What if my board (beagleboard xm) does not support DM_I2C ? Should i concider a new one ? (Any recommendation ?) How do you attach a I2C device using platform_data approach ? I was doing this in board/ti/beagle/beagle.c:
static const struct st33zp24_i2c_platdata beagle_tpm_i2c = { .i2c_bus = 1, .slave_addr = 0x13, };
U_BOOT_DEVICE(beagle_tpm_i2c) = { .name = TPM_ST33ZP24_I2C, .platdata = &beagle_tpm_i2c, };
We don't support I2C in driver model without device tree. We're trying to encourage people to drop platform data and use device tree.
See am335x_boneblack_vboot. It should be fairly straightfoward to convert over the omap_24xx driver if you have time.
[snip]
+#define TPM_ST33ZP24_SPI "st33zp24-spi"
+struct st33zp24_spi_platdata {
int bus_num;
int cs;
int max_speed;
int mode;
Hopefully not needed.
How to declare a SPI device using platform then ? On beagleboard i was doing this:
static const struct st33zp24_spi_platdata beagle_tpm_spi = { .bus_num = 3, .cs = 0, .max_speed = 10000000, .mode = 0, };
U_BOOT_DEVICE(beagle_tpm_spi) = { .name = TPM_ST33ZP24_SPI, .platdata = &beagle_tpm_spi, };
Again, you can't. There is a guide to porting SPI drivers in doc/driver-model.
+};
+#endif /* __ST33ZP24_SPI_H__ */ diff --git a/include/fdtdec.h b/include/fdtdec.h index eac679e..9eb2b3d 100644 --- a/include/fdtdec.h +++ b/include/fdtdec.h @@ -182,7 +182,10 @@ enum fdt_compat_id { COMPAT_INTEL_PCH, /* Intel PCH */ COMPAT_INTEL_IRQ_ROUTER, /* Intel Interrupt Router */ COMPAT_ALTERA_SOCFPGA_DWMAC, /* SoCFPGA Ethernet controller */
COMPAT_STMICROELECTRONICS_ST33ZP24_I2C,
/* STMicroelectronics ST33ZP24
I2C TPM */
COMPAT_STMICROELECTRONICS_ST33ZP24_SPI,
/* STMicroelectronics ST33ZP24
SPI TPM */
Shouldn't be needed.
According to your previous comments, i think i understand why. Did you update Infineon id as well ?
COMPAT_COUNT,
};
diff --git a/lib/fdtdec.c b/lib/fdtdec.c index b201787..55c64a0 100644 --- a/lib/fdtdec.c +++ b/lib/fdtdec.c @@ -76,6 +76,8 @@ static const char * const compat_names[COMPAT_COUNT] = { COMPAT(COMPAT_INTEL_PCH, "intel,bd82x6x"), COMPAT(COMPAT_INTEL_IRQ_ROUTER, "intel,irq-router"), COMPAT(ALTERA_SOCFPGA_DWMAC, "altr,socfpga-stmmac"),
COMPAT(STMICROELECTRONICS_ST33ZP24_I2C, "st,st33zp24-i2c"),
COMPAT(STMICROELECTRONICS_ST33ZP24_SPI, "st,st33zp24-spi"),
};
const char *fdtdec_get_compatible(enum fdt_compat_id id)
-- 2.1.4
Regards, Simon
Best Regards Christophe