How to port the dtsi files generated by production Nano module pinmux document?

Hi all,

I am not sure what the DTS/DTB file relative to the production Nano Module. When I use the SDK-manager download L4T targeting at P3448-0020, the following dtb file in L4T/kernel can be got.

garret:~/nano/l4t32.3.1/Linux_for_Tegra/kernel/dtb$ ls
tegra210-jetson-tx1-p2597-2180-a01-devkit-adafruit-sph0645lm4h.dtbo  tegra210-p3448-0000-p3449-0000-a01-hdr40.dtbo
tegra210-jetson-tx1-p2597-2180-a01-devkit.dtb                        tegra210-p3448-0000-p3449-0000-a02-adafruit-sph0645lm4h.dtbo
tegra210-jetson-tx1-p2597-2180-a01-devkit-fe-pi-audio-z-v2.dtbo      tegra210-p3448-0000-p3449-0000-a02.dtb
tegra210-jetson-tx1-p2597-2180-a01-devkit-hdr40.dtbo                 tegra210-p3448-0000-p3449-0000-a02-fe-pi-audio-z-v2.dtbo
tegra210-jetson-tx1-p2597-2180-a02-devkit-24x7.dtb                   tegra210-p3448-0000-p3449-0000-a02-hdr40.dtbo
tegra210-p3448-0000-p3449-0000-a00.dtb                               tegra210-p3448-0000-p3449-0000-b00.dtb
tegra210-p3448-0000-p3449-0000-a01-adafruit-sph0645lm4h.dtbo         tegra210-p3448-0002-p3449-0000-a02.dtb
tegra210-p3448-0000-p3449-0000-a01.dtb                               tegra210-p3448-0002-p3449-0000-b00.dtb
tegra210-p3448-0000-p3449-0000-a01-fe-pi-audio-z-v2.dtbo

Seem there is no different with those dtbs when targeting at P3448. And I know my Nano dev kit use tegra210-p3448-0000-p3449-0000-a02.dtb. (1) Then what is the above DTB file I should select to base on when porting the production Nano module to a customized carried board?

I also find a lot dts file in the kernel source directory as below.

garret:~/nano/l4t32.3.1/kernel_src/hardware$ find ./ -name "*.dts" | grep tegra
./nvidia/platform/tegra/common/kernel-dts/overlays/jetson-adafruit-sph0645lm4h.dts
./nvidia/platform/tegra/common/kernel-dts/overlays/jetson-fe-pi-audio-z-v2.dts
./nvidia/platform/t210/porg/kernel-dts/tegra210-p3448-0000-p3449-0000-a02-hdmi-dsi.dts
./nvidia/platform/t210/porg/kernel-dts/tegra210-p3448-0000-p3449-0000-a02-hdr40.dts
./nvidia/platform/t210/porg/kernel-dts/tegra210-p3448-0000-p3449-0000-a01-adafruit-sph0645lm4h.dts
./nvidia/platform/t210/porg/kernel-dts/tegra210-p3448-0000-p3449-0000-a01.dts
./nvidia/platform/t210/porg/kernel-dts/tegra210-p3448-0000-p3449-0000-a02.dts
./nvidia/platform/t210/porg/kernel-dts/tegra210-p3448-0000-p3449-0000-a02-adafruit-sph0645lm4h.dts
./nvidia/platform/t210/porg/kernel-dts/tegra210-p3448-0000-p3449-0000-a00.dts
./nvidia/platform/t210/porg/kernel-dts/tegra210-p3448-0000-p3449-0000-b00.dts
./nvidia/platform/t210/porg/kernel-dts/tegra210-p3448-0000-p3449-0000-a01-fe-pi-audio-z-v2.dts
./nvidia/platform/t210/porg/kernel-dts/tegra210-p3448-0000-p3449-0000-a02-fe-pi-audio-z-v2.dts
./nvidia/platform/t210/porg/kernel-dts/tegra210-p3448-0002-p3449-0000-b00.dts
./nvidia/platform/t210/porg/kernel-dts/tegra210-p3448-0000-p3449-0000-b00-hdmi-dsi.dts
./nvidia/platform/t210/porg/kernel-dts/tegra210-p3448-0002-p3449-0000-a02.dts
./nvidia/platform/t210/porg/kernel-dts/tegra210-p3448-0000-p3449-0000-a01-hdr40.dts
./nvidia/platform/t210/jetson/kernel-dts/tegra210-jetson-tx1-p2597-2180-a01-devkit.dts
./nvidia/platform/t210/jetson/kernel-dts/tegra210-jetson-tx1-p2597-2180-a01-devkit-hdr40.dts
./nvidia/platform/t210/jetson/kernel-dts/tegra210-jetson-cv-p2597-2180-a00-auo-1080p-edp.dts
./nvidia/platform/t210/jetson/kernel-dts/tegra210-jetson-tx1-imx274-dp-hdmi.dts
./nvidia/platform/t210/jetson/kernel-dts/tegra210-jetson-tx1-p2597-2180-a01-devkit-adafruit-sph0645lm4h.dts
./nvidia/platform/t210/jetson/kernel-dts/tegra210-jetson-tx1-p2597-2180-a02-devkit-24x7.dts
./nvidia/platform/t210/jetson/kernel-dts/tegra210-jetson-cv-p2597-2180-imx274-hdmi.dts
./nvidia/platform/t210/jetson/kernel-dts/tegra210-jetson-e-p2595-0000-a00-00.dts
./nvidia/platform/t210/jetson/kernel-dts/tegra210-jetson-e-base-p2595-0000-a00.dts
./nvidia/platform/t210/jetson/kernel-dts/tegra210-jetson-cv-p2597-2180-a00.dts
./nvidia/platform/t210/jetson/kernel-dts/tegra210-jetson-cv-base-p2597-2180-a00.dts
./nvidia/platform/t210/jetson/kernel-dts/tegra210-jetson-tx1-p2597-2180-a01-devkit_as_TM660M.dts
./nvidia/platform/t210/jetson/kernel-dts/tegra210-jetson-tx1-p2597-2180-a01-android-devkit.dts
./nvidia/platform/t210/jetson/kernel-dts/tegra210-jetson-tx1-p2597-2180-a01-devkit-fe-pi-audio-z-v2.dts

The Tegra_Linux_Driver_Package_Nano_Adaptation_Guide just say
The device tree files are saved in the same location as the Excel spreadsheet. After the file is generated, make sure that the file name matches the one you use in your kernel code. Correct the file name if there is a mismatch. Later, you will copy the device tree files into the Linux kernel source tree…

Still I don’t know how to use the pinmux document generating dtsi files below.
a. tegra210-jetson_nano_module-gpio-default.dtsi
b. tegra210-jetson_nano_module-pinmux.dtsi
If the “tegra210-p3448-0002-p3449-0000-a02.dts” I should select, then I know just include the two dtsi files in this dts file.
(2) Please tell me is the tegra210-p3448-0002-p3449-0000-a02.dts file under sources/nvidia/platform directory I should chose for the production Nano Module?

(3) The Exporting Pinmux for U-Boot section of Tegra_Linux_Driver_Package_Nano_Adaptation_Guide says the Pinmux document generated dtsi files need to be ported to u-boot. As for production Nano module, must we do this step on L4T 32.3.1 release?

Thanks.

Sadly the r32.3.1 documentation is not up to where we need it to be yet. Especially if you’re doing your own custom carrier board. There seems to be too much focus on the devkit rather than us trying to make our own products with production modules.

The entire section regarding PinMux,GPIO, and uboot should be deleted from the documentation as this is no longer the way it’s done and also no longer works. Cboot and uboot have been changed for the worse. The new Jetson-io tool is great for tinkerers using the devkit but useless for us making real products. Instead this is a step backwards. It seems we are no longer able to do PinMux changes via dts files on the host.
From what I understand is that cboot now blocks the dts PinMux Changes.

I would really love for someone from Nvidia to prove me wrong and also address the documentation.

Hi peterxr95h,

Thanks.

Hi All,

When I flash the customized board with production Nano module, I use sudo BOARDID=3448 FAB=B01 ./flash.sh --no-flash jetson-nano-emmc mmcblk0p1 script, and get below log.

garret:~/nano/sdk_l4t32.3..1/Linux_for_Tegra$ sudo BOARDID=3448 FAB=B01 ./flash.sh --no-flash jetson-nano-emmc mmcblk0p1 2>&1 | tee flash_3448_B01.log
###############################################################################
# L4T BSP Information:
# R32 , REVISION: 3.1
###############################################################################
Board ID(3448) version(B01)
copying bctfile(/home/garret/nvidia/nvidia_sdk/JetPack_4.3_Linux_P3448-0020/Linux_for_Tegra/bootloader/t210ref/BCT/P3448_A00_4GB_Micron_4GB_lpddr4_204Mhz_P987.cfg)... done.
copying bootloader(/home/garret/nvidia/nvidia_sdk/JetPack_4.3_Linux_P3448-0020/Linux_for_Tegra/bootloader/t210ref/cboot.bin)... done.
copying initrd(/home/garret/nvidia/nvidia_sdk/JetPack_4.3_Linux_P3448-0020/Linux_for_Tegra/bootloader/l4t_initrd.img)... done.
        populating kernel to rootfs... done.
        populating initrd to rootfs... done.
        populating /home/garret/nvidia/nvidia_sdk/JetPack_4.3_Linux_P3448-0020/Linux_for_Tegra/kernel/dtb/tegra210-p3448-0000-p3449-0000-b00.dtb to rootfs... done.
Making Boot image... done.
...
100 CHUNK 15032385536(  14336 blks) ==>  4081059020(3892 blks)

done.
system.img built successfully.
Existing tbcfile(/home/garret/nvidia/nvidia_sdk/JetPack_4.3_Linux_P3448-0020/Linux_for_Tegra/bootloader/nvtboot_cpu.bin) reused.
copying tbcdtbfile(/home/garret/nvidia/nvidia_sdk/JetPack_4.3_Linux_P3448-0020/Linux_for_Tegra/kernel/dtb/tegra210-p3448-0000-p3449-0000-b00.dtb)... done.
copying cfgfile(/home/garret/nvidia/nvidia_sdk/JetPack_4.3_Linux_P3448-0020/Linux_for_Tegra/bootloader/t210ref/cfg/flash_l4t_t210_emmc_p3448.xml) to flash.xml... done.
copying flasher(/home/garret/nvidia/nvidia_sdk/JetPack_4.3_Linux_P3448-0020/Linux_for_Tegra/bootloader/t210ref/cboot.bin)... done.
Existing flashapp(/home/garret/nvidia/nvidia_sdk/JetPack_4.3_Linux_P3448-0020/Linux_for_Tegra/bootloader/tegraflash.py) reused.
./tegraflash.py --bl cboot.bin --bct  P3448_A00_4GB_Micron_4GB_lpddr4_204Mhz_P987.cfg --odmdata 0x94000 --bldtb tegra210-p3448-0000-p3449-0000-b00.dtb --applet nvtboot_recovery.bin --cmd "flash; reboot"  --cfg flash.xml --chip 0x21    --bins "EBT cboot.bin; DTB tegra210-p3448-0000-p3449-0000-b00.dtb"
saving flash command in /home/garret/nvidia/nvidia_sdk/JetPack_4.3_Linux_P3448-0020/Linux_for_Tegra/bootloader/flashcmd.txt
saving Windows flash command to /home/garret/nvidia/nvidia_sdk/JetPack_4.3_Linux_P3448-0020/Linux_for_Tegra/bootloader/flash_win.bat
*** no-flash flag enabled. Exiting now... ***

.

But not sure about the BOARDID and FAB, please tell me what they should be in my case?

If you are using the devkit then you will probably have the A02 FAB.

Either way the FAB is printed on the underside of the 3448 module underneath the Nvidia logo.

Thanks,

Not devkit. We are use a production module for a industrial product. But at this moment no module in in handy. But we have to made a FW to test a faraway customized board.

Then you will probably have a B01. I received a new batch of production modules last week and they are B01.

Hi garretzou,

What is the problem you have?

As for Jetpack 4.3, do we need rebuild uboot with dtsi files generated by pinmux document for our industrial product consisted of the Nano production Module and a customized carrier board?

No, for jetpack4.3, no need to rebuild uboot for pinmux. The dtb would be handled by cboot and set the pinmux config.

Hi, this is something I’m trying to figure out myself properly.

The uboot code for PinMux settings has been deleted. So the documentation is definitely wrong and needs to be updated. If you want it back you can git checkout tag r32.2.2 from uboot source.

Anyway it’s interesting looking at the uboot git history and changes, you will see exactly what they have done.

It may be as simple as including your dtb file in the extlinux.conf with the FDT parameter.

Hopefully someone from Nvidia can describe the best method to do this now. And I mean not for the dev kit but for us making our own carrier boards for P3448-0020.

Good luck and I would appreciate you sharing anything you learn on this topic.

Hi peterxr95h,

Can’t thank you enough.

Nvidia should pay you for updating their documents and something else.

Thanks again.

Document updating is on-going. Sorry that we missed to delete this section.

Hi peterxr95h,

What DTB file in do you use for the Nano production module(B01) by default, is it the “Linux_for_Tegra/kernel/dtb/tegra210-p3448-0000-p3449-0000-b00.dtb”?

Thanks

Hi peterxr95h,

Could you tell me what a default dtb file are used when flash your production module?

I am using a one that I generated myself that suits my custom hardware, but it is based on “tegra210-p3448-0002-p3449-0000-b00.dtb”.

Yes you should start with"tegra210-p3448-0002-p3449-0000-b00.dtb"

Cheers.

Hi peterxr95h,

Very appreciated it.

To check which dts is used by p3448-0020, maybe you can dmesg | less and search keyword “DTS”.