Creating a device tree for a custom board using an Orin Nx module

I am trying to bring up a custom board with an Orin Nx module on it. I am following your Adaptation and Bring Up Guide, and I’ve already generated filled the pinmux spreadsheet and generated the device tree files from it.

My question is regarding the handwritten kernel device tree files under Linux_for_Tegra/source/hardware/nvidia/t23x/nv-public. Assuming p3767 refers to the Jetson Module and p3768 refers to the official development board for it, these device tree files are poorly organized. Stuff that physically lives purely on the Jetson module (e.g. the TI power monitor) is being set up in p3768+p3767 device tree files for the development board.

Another example, the GPU is disabled by default and only enabled in one of the p3768+p3767 files, that is very perplexing to say the least, is the module supposed to run with the GPU disabled by default? Why do I have to set up so many things in my board’s device tree files that really actually belong to the Jetson module?

This lack of organization and documentation is making it very difficult to understand what exactly I need to do for my own custom board. Do I have to reverse engineer the device tree files to figure out what belongs to the Jetson module and what to the development board? If so, how do I do that when you haven’t released the schematic for the development board?

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

The question you’re asking is related to the Jetson Orin NX module and its adaptation and bring-up process on a custom board. You’re following the Adaptation and Bring-Up Guide, but you’re having trouble understanding the organization and documentation of the kernel device tree files.

To address your concerns, let’s break down the information provided in the context.

The Jetson Orin NX module is a part of the Jetson Orin NX series, which is designed to support various configurations. The module is compatible with the Jetson Orin NX Developer Kit (P3767-0000), which includes the module and a carrier board.

The kernel device tree files are used to configure the hardware components of the module and the carrier board. The files are organized in a way that separates the configuration of the module from the carrier board.

In your case, you’re trying to bring up a custom board with an Orin NX module, and you’ve generated the pinmux spreadsheet and device tree files from it. However, you’re finding it difficult to understand the organization and documentation of the kernel device tree files.

The device tree files are divided into two categories: those that belong to the Jetson module (p3767) and those that belong to the official development board (p3768). The files that belong to the module are responsible for configuring the hardware components that are physically present on the module, such as the TI power monitor.

On the other hand, the files that belong to the development board are responsible for configuring the hardware components that are specific to the development board, such as the GPU. The GPU is disabled by default in the module’s device tree files, and it’s only enabled in one of the development board’s device tree files.

To answer your question, you don’t necessarily need to reverse-engineer the device tree files to figure out what belongs to the Jetson module and what to the development board. However, you do need to understand the organization and documentation of the files.

Here’s a suggested approach:

  1. Start by identifying the hardware components that are present on your custom board. This will help you determine which device tree files are relevant to your board.
  2. Look at the device tree files that belong to the Jetson module (p3767). These files will give you an idea of how the module’s hardware components are configured.
  3. Look at the device tree files that belong to the development board (p3768). These files will give you an idea of how the development board’s hardware components are configured.
  4. Compare the device tree files for the module and the development board. This will help you identify which configurations are specific to the development board and which ones are relevant to your custom board.
  5. Use the information you’ve gathered to create your own device tree files for your custom board. Make sure to include only the configurations that are relevant to your board.

In terms of comparing the Jetson Orin NX module to other modules, such as the Jetson Xavier NX or the Jetson AGX Xavier, here are some key differences:

  • The Jetson Orin NX module is not pin-compatible with the Jetson Xavier NX module, but you can design a carrier board that supports both modules.
  • The Jetson Orin NX module has a different set of hardware components compared to the Jetson Xavier NX module. For example, the Orin NX module has a more powerful GPU and a different set of interfaces.
  • The Jetson AGX Xavier module is a more powerful module compared to the Jetson Orin NX module. It has a more powerful GPU and a different set of interfaces.

In terms of industrial environments, the Jetson AGX Orin Industrial module is designed to support industrial-grade applications. It has a more robust design and a wider operating temperature range compared to the standard Jetson AGX Orin module.

I hope this helps clarify things for you. If you have any further questions or concerns, feel free to ask.

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

Hi uahmad,

What’s the Jetpack version in use?

Sorry for the confusing on the device tree usage on Jetson. Please note that there’re too many kinds of SKU of modules/boards on Jetson so there would be many device tree files.
You can just check which DTB used for the flash(from the board config) and check what device trees are included inside.
If your custom board is referenced from the devkit, then you could find the naming of p3767(for module) and p3768(for carrier board). Or you can simply add the overlay dtb instead to update for the custom design.

I am using Jetpack r36.4.4 and yes my custom board is somewhat based on the development board but there are significant differences that I have taken care of in my own device tree.

The closest development board variant to ours seems to be p3768-0000, so I’m looking at the device tree files for that. I’ve already taken apart tegra234-p3768-0000+p3767-0000.dts and tegra234-p3768-0000.dtsi to extract bindings that really should belong inside tegra234-p3767.dtsi.

What I am struggling with are with the files inside the nv-platform directory. Here, there are three files that belong to p3768-0000:

  1. tegra234-p3768-0000+p3767-0001-nv.dts
  2. tegra234-p3768-0000+p3767-xxxx-nv-common.dtsi
  3. tegra234-p3768-0000.dtsi

Once again, they contain a lot of bindings that should have been inside tegra234-p3767-0000.dtsi so that custom boards can just include that, but as it stands, I need some help with understand what belongs to the development board and what to the actual Jetson module.

This is for P3767 SKU1(i.e. Orin NX 8GB).

This is for all Orin NX/Nano modules and use P3768 as the reference design.
I think you can put all your custom modification in this device tree.

This is specific to p3768 board which the devkit uses.
I would suggest you creating custom overlay or updating only tegra234-p3768-0000+p3767-xxxx-nv-common.dtsi for your customization.

Maybe I haven’t made my actual question clear, so let me rephrase it.

In tegra234-p3768-0000+p3767-xxxx-nv-common.dtsi, how do I differentiate between bindings that are only needed for the p3768 development board and the bindings that are needed for any board that uses the p3767 Jetson module?

For the board specific device tree configuration, they would be included in tegra234-p3768-0000.dtsi
For the module specific device tree configuration, they will be included in tegra234-p3767-0000.dtsi

I don’t think it is good to update them directly.
Could you elaborate on your use case and requirement?

That was my understanding too, but then what exactly is tegra234-p3768-0000+p3767-xxxx-nv-common.dtsi for? Is it for the board or the module?

It seems to me that the common file has bindings for both the p3767 module and the p3768 development board, so I cannot include it in my device tree. There are almost no comments in this file, how do I tell what’s needed just for the module?

It is the common device tree for both the board and the module.

For board or module-specific customizations, please modify their respective device trees or define a custom one.