AGX Orin Pinctrl Failure

I am having a hard time figuring out why my custom pinmux seems to be failing to load. I am developing for a custom carrier board, but I am currently testing on a devkit.

I am building the device tree using dtc and it appears to be successfully loading. The system boots fine, display is available, USB work, etc.

If I cat /sys/kernel/debug/gpio using my custom dtb, I end up with an empty return.

To load my dtb, I am updating the file to /boot/dtb and setting the FDT variable in extlinux.conf to point to this new file.
custom_devkit_dmesg.txt is dmesg when my custom dtb is loaded.
default_devkit_dmesg.txt is dmesg when the factory dtb is loaded.
check_file.dts is an output from my script that is used to build the dtb. It functionally just executes the build then deconstructs the compiled dtb back to a .dts file for verification.

custom_devkit_dmesg.txt (78.3 KB)
default_devkit_dmesg.txt (72.3 KB)
check_file.dts (570.5 KB)

Any help you can offer would be greatly appreciated.


Adding my *.dtsi files that are included in the build. These were generated with the pinmux spreadsheet v1.5
Orin-gms_20230818-gpio-default.dtsi (2.2 KB)
Orin-gms_20230818-pinmux.dtsi (64.7 KB)

Hi jph1121,

What’s your Jetpack version in use?

What do you mean about “failing to load”?

Do you use sudo for this command?

[    0.005120] DTS File Name: /dvs/git/dirty/git-master_linux/kernel/kernel-5.10/arch/arm64/boot/dts/../../../../../../hardware/nvidia/platform/t23x/concord/kernel-dts/tegra234-p3701-0000-p3737-0000.dts
[    0.005130] DTB Build time: Mar 19 2023 8:08:40

I don’t find the error message in custom_devkit_dmesg.txt.

Hi KevinFFF,
I think I might have had a fundamental misunderstanding of the pinmuxing of the system. I think the documentation could use a lot more clarity.

My take on the system was that the pinmuxing, stored in dtsi format, was expected to be a part of the Linux device tree. I’m now understanding that the outputs of the pinmux spreadsheet are not really used as part of the kernel device tree at all.

Can you verify that the correct method for incorporating pinmux changes is to load the files to the correct locations:
{pinmux}.dtsi to Linux_for_Tegra/bootloader/t186ref/BCT
{gpio}.dtsi to Linux_for_Tegra/bootloader

The dtb indicated by the FDT variable in /boot/extlinux/extlinux.conf is, on the host ubuntu system, stored in Linux_for_Tegra/kernel/dtb.

If pinmux changes are implemented, what is the quickest command to execute for testing the new pinmux? So far, the most reliable way I’ve found of flashing the new pinmux is to entirely reflash the system which is both prone to failure (due to random timeout issues which I’m not looking to debug, at present) and unnecessary.

To answer your questions regarding, “failure to load”, I am referring to the pinctrl errors that show up in the log. Continuing this particular aspect of the thread may be unnecessary if my new understanding of where the pinmux is implemented is accurate.

For cat /sys/kernel/debug/gpio, yes, it was executed with sudo.

For the DTS file name printed in the custom_devkit_dmesg.txt, the device tree was built out of the kernel source. I used:
dtc -I fs -O dts -o devtree_running.dtb /proc/device-tree
to create a base from which I could make modifications.


Yes, they are the correct places where the dtsi should be put.

Please also modify the PMIC_CONFIG and PMC_CONFIG in your board config. (For AGX Orin, they are in p3701.conf.common).

Sorry that you should re-flash the board to apply the changes due to the final dtb in use (/boot/dtb/xxx.dtb) is created during flash according to your generated dtsi, and the dtb is used for both bootloader and kernel.
Flash the whole board is to make sure it will be applied completely.

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