AnsweredAssumed Answered

TPM (SLB9670) initialization failed on i.MX8 ECSPI2

Question asked by Rohit Dubey on Feb 10, 2020
Latest reply on Jul 10, 2020 by Nick Bourdon

Hi,

 

I'm working on getting the Infineon SLB9670 to work on the ECSPI2 bus of an IMX8MQ processor on the 4.19.35 kernel built using Yocto. The device seems to get detected on the bus ( there's a "spi1.0" node in the  /sys/bus/spi/devices directory), but for some reason, it is never associated with the TPM module and hence fails to come up as a TPM in the /dev directory.

After some printk debugging, I noticed that it fails to detect the valid bit being set on the TPM ( in wait_startup (tpm_tis_core)) and therefore doesn't initialize the device any further.

Probing the signals, I do see TPM replying with 00 01, but module fails to detect this. All the other pins seem to be behaving as expected, so this seems like a device tree or kernel problem.

I'm at a loss of what else to try and would appreciate any suggestions on how to get it to work.

 

Here's the device tree section, (originally taken from another post and modified) :

 

 

 
pinctrl_ecspi2: ecspi2grp {
fsl,pins = <
    MX8MM_IOMUXC_ECSPI2_MISO_ECSPI2_MISO 0x00000116
    MX8MM_IOMUXC_ECSPI2_MOSI_ECSPI2_MOSI 0x00000116
    MX8MM_IOMUXC_ECSPI2_SCLK_ECSPI2_SCLK 0x00001916
    MX8MM_IOMUXC_ECSPI2_SS0_ECSPI2_SS0 0x00000116
    >;
};
//
//
&ecspi2 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_ecspi2>;
fsl,spi-num-chipselects = <1>;
status = "okay";
#address-cells = <1>;
#size-cells = <0>;
tpm0: slb9670@0 {
    compatible = "infineon,slb9670";
    reg = <0>;
    spi-max-frequency = <38000000>;
    };
};

 

The kernel modules we're using are tpm, tpm_tis_core and tpm_tis_spi and we're not using interrupts:

 

Schematics fragments to show TPM connection on ECSPI2 pins

 

I'd truly appreciate if anyone can help figure out what we've done wrong and how to fix it. I'll be happy to provide any further information.

 

Thanks & Regards,

Rohit

Outcomes