OPTIGA™ TPM SLB 9673 TPM 2.0 chip not detected

I am currently using Nvidia Jetson Orin Nano Developer Kit (8GB).

I flashed the boot firmware using the L4T Drvier Package and Sample Root file system using the below links:

https://developer.nvidia.com/downloads/embedded/l4t/r36_release_v4.4/release/Jetson_Linux_r36.4.4_aarch64.tbz2

https://developer.nvidia.com/downloads/embedded/l4t/r36_release_v4.4/release/Tegra_Linux_Sample-Root-Filesystem_r36.4.4_aarch64.tbz2

After flashing the boot firmware, flashed the official Ubuntu Server 22.04 using L4T backup_restore. The preinstalled server image used is from the following link

https://cdimage.ubuntu.com/releases/jammy/release/nvidia-tegra/ubuntu-22.04-preinstalled-server-arm64+tegra-jetson.img.xz

Our project objective is to use the OPTIGA™ TPM SLB 9673 TPM 2.0 chip in the custom board. Before finalizing the desing want to test the chip so using the OPTIGA™ TPM SLB 9673 RaspberryPi® Evaluation Board - I2C TPM HAT FW 26.xx.

I Connected the evaluation KIT’s I2C pins to the Jetson 40 pin header pins 3 and 5.

Now while using the i2cdetect -r 7 command it shows the address 0x2e. It means the device is detected at the I2C bus 7.

But the dmesg is not showing the chip. I am getting the message that chip not detected.

To make the chip working

I modified the device tree like below using the file from the L4T folder Linux_for_Tegra/kernel/dtb/tegra234-p3768-0000+p3767-0000-nv.dtb

i2c@c250000 {

        compatible = "nvidia,tegra194-i2c";

        reg = <0x00 0xc250000 0x00 0x100>;

        interrupts = <0x00 0x20 0x04>;

        #address-cells = <0x01>;

        #size-cells = <0x00>;

        status = "okay";

        nvidia,disable-multi-pkt-mode; // Modified for clock streaching

        clock-frequency = <0x61a80>;

        clocks = <0x03 0x36 0x03 0x66>;

        clock-names = "div-clk\\0parent";

        assigned-clocks = <0x03 0x36>;

        assigned-clock-parents = <0x03 0x66>;

        resets = <0x03 0x22>;

        reset-names = "i2c";

        dmas = <0xed 0x00 0xed 0x00>;

        dma-names = "rx\\0tx";

        nvidia,hw-instance-id = <0x07>;

        iommus = <0x04 0x04>;

        dma-coherent;

        phandle = <0x241>;



        // For SLB 9673 chip 

        slb9673@2e {

            compatible = "infineon,slb9673\\0tpm_i2c_infineon,tpm_tis_i2c";

            reg = <0x2e>; // The detected I2C address

            status = "okay";

        };



        prod-settings {

            #prod-cells = <0x04>;



            prod {

                prod = <0x00 0x9c 0xffff 0x308 0x00 0xd4 0xff 0x00 0x00 0xd8 0xff 0x00 0x00 0xdc 0xffff 0x01 0x00 0xe0 0xffff 0x02>;

            };



            prod_c_fm {

                prod = <0x00 0x6c 0xffff0000 0x3c0000 0x00 0x94 0xffff 0x202 0x00 0x98 0xffffffff 0x2020202>;

            };



            prod_c_fmplus {

                prod = <0x00 0x6c 0xffff0000 0x160000 0x00 0x94 0xffff 0x202 0x00 0x98 0xffffffff 0x2020202>;

            };



            prod_c_hs {

                prod = <0x00 0x6c 0xffffffff 0x160002 0x00 0x94 0xffff 0x202 0x00 0x98 0xffffffff 0x2020202 0x00 0xa0 0xffffff 0x90909>;

            };



            prod_c_sm {

                prod = <0x00 0x6c 0xffff0000 0x4f0000 0x00 0x94 0xffff 0x708 0x00 0x98 0xffffffff 0x8080808>;

            };

        };

    };

I am quite not sure doing the device tree correctly.

Can some one suggest the right approach please.

*** Please note that this reply is generated by LLM automatically ***

Based on the provided information, it appears that you are trying to integrate the OPTIGA TPM SLB 9673 TPM 2.0 chip with the Nvidia Jetson Orin Nano Developer Kit. You have connected the I2C pins of the evaluation board to the Jetson’s 40-pin header pins 3 and 5, and you are able to detect the device at address 0x2e on the I2C bus 7.

However, you are not seeing the chip detected in the dmesg output, and you are getting a message indicating that the chip is not detected. You have attempted to modify the device tree to enable the chip, but you are unsure if you are doing it correctly.

To help you with this issue, I will provide a step-by-step guide on how to modify the device tree to enable the OPTIGA TPM SLB 9673 TPM 2.0 chip on the Nvidia Jetson Orin Nano Developer Kit.

Step 1: Identify the correct device tree file

The device tree file for the Nvidia Jetson Orin Nano Developer Kit is located in the Linux_for_Tegra/kernel/dtb directory. The file name is tegra234-p3767-0000-p3509-a02.dtb.

Step 2: Create a device tree overlay

To enable the OPTIGA TPM SLB 9673 TPM 2.0 chip, you need to create a device tree overlay. A device tree overlay is a small device tree file that can be applied on top of the existing device tree to make changes.

Create a new file called optiga-tpm-overlay.dts with the following contents:

/dts-v1/;

/plugin/;

&i2c7 {
    tpm@2e {
        compatible = "infineon,slb9673";
        reg = <0x2e>;
    };
};

This overlay enables the OPTIGA TPM SLB 9673 TPM 2.0 chip on the I2C bus 7 at address 0x2e.

Step 3: Compile the device tree overlay

Compile the device tree overlay using the dtc command:

dtc -I dts -O dtb -o optiga-tpm-overlay.dtbo optiga-tpm-overlay.dts

This will create a optiga-tpm-overlay.dtbo file in the current directory.

Step 4: Apply the device tree overlay

Apply the device tree overlay to the existing device tree using the fw_setenv command:

fw_setenv dtb_overlay optiga-tpm-overlay.dtbo

This will apply the device tree overlay to the existing device tree.

Step 5: Reboot the system

Reboot the system to apply the changes:

sudo reboot

After rebooting, you should see the OPTIGA TPM SLB 9673 TPM 2.0 chip detected in the dmesg output.

Comparison with your approach

In your approach, you modified the device tree file tegra234-p3767-0000-p3767-0000-nvdtb directly. However, this is not the recommended approach, as it can lead to conflicts with future updates.

Instead, creating a device tree overlay is a more flexible and maintainable approach. It allows you to make changes to the device tree without modifying the original file.

I hope this helps you to enable the OPTIGA TPM SLB 9673 TPM 2.0 chip on the Nvidia Jetson Orin Nano Developer Kit. If you have any further questions or issues, feel free to ask.

*** Please give the thumbs up if you get answers you like. Or provide feedback to help us improve the answer. ***

hello amudhan.us

it’s prod-setting to enable the power to your external TPM.
you’re able to use device tree overlay for loading the driver. see-also release notes for additional details of section [4.2. Device Registration].

Thanks for your reply.
I am quite new to this embedded side.
Even the TPM address is detected in the bus still pin config is needed?

Can you give some details in this.

hello amudhan.us

it’s prod-setting to enable the power to your external TPM.
you’re able to use device tree overlay for loading the driver. see-also release notes for additional details of section [4.2. Device Registration].

I reached out to the Infineon developer community and got the following reply:

Linux kernel 5.15 does not natively support the OPTIGA™ TPM SLB 9673 (I2C) out-of-the-box; you must apply specific backport patches to enable proper driver support for this device.

You can find the backporting patches for TPM I2C from 6.x to 5.x here: https://community.infineon.com/t5/Knowledge-Base-Articles/SLB9673-driver-patch-for-back-porting-from…

Make sure to enable the TCG_TIS_I2C driver in the .config file.

CONFIG_TCG_TIS_I2C=y

Based on this I downloaded the kernel source from l4t/r36_release_v4.4/sources/public_sources.tbz2 and back ported the changes.

Compiled the kernel using the instrcutions Kernel Customization — NVIDIA Jetson Linux Developer Guide

After successful kernel compilation flashed using the following command

sudo ./flash.sh -r -k LNX -k kernel-dtb jetson-orin-nano-devkit internal

But the flash is stuck in this location and never moved further even waited for 30 mins
[ 4.4471 ] Sending bct_mem
[ 4.4768 ] Sending blob
[ 5.9433 ] completed
[ 6.9466 ] tegrarcm_v2 --chip 0x23 0 --ismb2applet

Can some one help resolve this please

attache full flash log

kernel_flash.log (78.3 KB)

hello amudhan.us,

that’s incorrect command for flashing kernel partition.
please see-also developer guide, Flashing a Specific Partition.

BTW, please see-also /boot/extlinux/extlinux.conf for the LINUX entry which load the kernel image.
you should also update the Image since it’s UEFI for loading kernel via root file system.
please copy the updated kernel image via ssh utility, and then update the binary file for verification.

Thanks for the reply,

As I mentioned earlier we use the pre-installed Ubuntu Server 22.04 image for tegra jetson (ubuntu-22.04-preinstalled-server-arm64+tegra-jetson.img.xz)

The kernel version is

uname -r

5.15.0-1038-nvidia-tegra-igx

This server uses grub loader, so there is no extlinux in the /boot/ path.

In this case how to just update the kernel here.

you may try to replace kernel image.. $OUT/Linux_for_Tegra/tools/kernel_flash/images/external/boot.img
and, using initrd flash script for partition update.
$ sudo ./tools/kernel_flash/l4t_initrd_flash.sh -k A_kernel --flash-only --showlogs

or.. please try below with flash script for loading QSPI partition layout to flash specific partition.
$ sudo ./flash.sh -c bootloader/generic/cfg/flash_t234_qspi.xml -k A_kernel --no-systemimg jetson-orin-nano-devkit-nvme nvme0n1p1

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.