TPM module integration with Colibri iMX6ULL

Hello @fxtsupport ,
Do you have any updates on this topic?

Best regards,

I’m tryng.
My current setup is Iris + Infineon-Iridium_1-0_9670 but I have difficult on SPI to active correctly.

Hello @fxtsupport

Could you give us more details on that issue? (error messages, logs, etc…)

Best regards,

I reset all.

I need the correct sequence to apply for link tpm module SLI9670.

Can you help me?

I connect the module (see attached the PDF) like this:

SIGNAL SLI 9670 iM6xULL Colibrì IRIS X16
PWR 1 - 33
GND 6 - 36
CS 26 86 9
MOSI 19 92 11
MISO 21 90 10
SCLK 23 88 8

But I have problem to modify dtb.

Infineon-Iridium_1-0_9670_HD-AdditionalTechnicalInformation-v01_01-EN.pdf (763.3 KB)

Hi @fxtsupport !

Could you please share what and how you tried?

We can try to help you from your starting point.

Best regards,

I have activated on kernel the INFINEON and SPI module; see attached devconfig.

But when started the dmesg write:

5.788643] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null)
[ 6.038975] systemd-journald[113]: Received client request to flush runtime journal.
[ 8.546683] caam-snvs 20cc000.caam-snvs: violation handlers armed - init state
[ 8.849837] spi_imx 2008000.spi: probed
[ 8.891945] imx-sdma 20ec000.sdma: loaded firmware 3.5
[ 10.817597] crng init done
[ 10.822038] random: 3 urandom warning(s) missed due to ratelimiting
[ 12.613366] CAN device driver interface
[ 13.667597] mcp251x spi0.0: MCP251x didn’t enter in conf mode after reset
[ 13.676304] mcp251x spi0.0: Probe failed, err=16
[ 13.769242] mcp251x: probe of spi0.0 failed with error -16
[ 13.964807] Bluetooth: Core ver 2.22
[ 13.990458] NET: Registered protocol family 31

Under /sys/bus/spi/drivers i found:
at25 mcp251x spidev st33zp24-spi tpm_tis_spi

How I must change the device tree?

defconfig (133.0 KB)

Hi @fxtsupport!

Could you please share the output of tdx-info?

Best regards,

I modify my dtb using the patch attached.

Can you help me to investigate what’s happens?
0001-configurazione-device-tpm.patch (1.7 KB)
imx6ull-colibri-eval-v3.dtsi (3.3 KB)

see on attached

tdx_info.txt (2.7 KB)

Hello @fxtsupport ,
Maybe these topics from the NXP community might help you. They are not for iMX6ULL specifically but can give some ideas where the problem could be.
TPM SLB9670 with IMX6-UL - NXP Community

this is also the overlay for Raspberry linux/tpm-slb9670-overlay.dts at rpi-6.1.y · raspberrypi/linux · GitHub
The “official” board for this TPM supported by Infineon


* Device Tree overlay for the Infineon SLB9670 Trusted Platform Module add-on
* boards, which can be used as a secure key storage and hwrng.
* available as "Iridium SLB9670" by Infineon and "LetsTrust TPM" by pi3g.


/ {
compatible = "brcm,bcm2835";

fragment@0 {
target = [&spi0];
__overlay__ {
status = "okay";

fragment@1 {
target = [&spidev1];
__overlay__ {
status = "disabled";

fragment@2 {
target = [&spi0];
__overlay__ {
/* needed to avoid dtc warning */
#address-cells = [1];
#size-cells = [0];
slb9670: slb9670@1 {
compatible = "infineon,slb9670";
reg = [1]; /* CE1 */
#address-cells = [1];
#size-cells = [0];
spi-max-frequency = [32000000];
status = "okay";


I have used the oscilloscope and the CS is not asserted.

Do you have any ideas?

On attached my dtsi and dtb decompilated

imx6ull-colibri-eval-v3.dtsi (3.5 KB)
imx6ull-colibri-eval-v3.dtb.txt (64.1 KB)

hi @fxtsupport ,

since you use the TPM on &ecspi1 together with mcp2515, I think you should use the following snippet for the TPM instead:

tpm0: slb9670@1 {
    compatible = "infineon,slb9670";
	reg = <1>;
	spi-max-frequency = <10000000>;
	status = "okay";

You can see the example given in the SPI binding document here:
spi-controller.yaml - Documentation/devicetree/bindings/spi/spi-controller.yaml - Linux source code (v6.3.6) - Bootlin

Let’s know if it works.

The mcp2515 was disabled (status = “disabled”;).

Seem that driver slb9670 is not managing the chip-select.

you are right, it is disabled. Looking closer, I see that:

  1. you seem to use the imx6ull-colibri-eval-v3.dtsi for Colibri Eval Board as the base for your dts instead of imx6ull-colibri-emmc-iris-v2.dts. Any reason for that?
  2. looking at your tdx-info output, it seems that your device tree is not loaded at all. Can you check?
  1. I am using eval-v3 because the can0 node were configure correctly, so I started from a working base. In fact, with the can0 node enabled on the oscilloscope, I see the CS managed. After this test I have added the tpm0 node and disable can0 but seem the driver not managing the CS.

  2. Monday in the control laboratory.

P.S. my git of kernel is 5.4.193+gitAUTOINC!!!

@henrique.tx I attached the files requested
imx6ull-colibri-emmc-iris-v2.dtd.txt (63.4 KB)
imx6ull-colibri-iris-v2.dtsi (2.9 KB)
Infineon-Iridium_1-0_9670_HD-AdditionalTechnicalInformation-v01_01-EN.pdf (763.3 KB)

I am using the same Colibri IMx6ull emmc and slb9670 I am facing same issue my TPM driver is not getting loaded, Can you please help me with changes you have done to run it.

Hi @fxtsupport, Hi @ashutosh.lahoti ,

I just took this over here. I will investigate what is happening here and let you guys know as soon as I have some new information.

Best Regards

Hi @fxtsupport,

sorry for the delay. I think you are pretty close to making it work.

Can you send us a dmesg log after you activated the driver?

Then are these the device tree files that you have activated ?

Last but not least can you send the results of these two commands?

find /sys -name "*slb9670*"
find /sys -name "*tpm_tis_spi*"

Have a great day!

Best Regards

Hello, I will resume the project and I will send you new report