How to read board id from carrier board eeprom for jetson xavier nx

During booting , for reading boardid from SoM EEPROM we can read like ( ./chkbdinfo -i cvm.bin }
In the same way , can we read boardid from carrier board EEPROM ?

If yes then what is the file do we need to read instead of cvm.bin

No such function. The flash function does not need the info from carrier board eeprom.

Actually, I want the info from carrier, i am planning to attach a custom carrier board to nx SoM, so that by reading the board info from carrier board EEPROM, i want to use a specific dts( if the board info is 3509 i want to use NX dts or if 1111 some custom board id( then i want to load that dts file),.

So is there any way to create a cvm.bin type file for carrier board?

You can try the alternative.
Actually, we have a driver named plugin-manager. This driver can check both the carrier board eeprom and module eeprom during runtime and use it to select which dts property needs to be set.

That is why you will see keyword “plugin-manager” in our official dts file.

Can you please share the name of that plugin-manager driver file for jetson xavier nx

Please check the cboot public source with path:


In that driver files, i didn’t found option for selecting particular kernel dts, Can you please elaborate that how can i select a particular kernel dts from these drivers

Yes, actually reading the dts file will be easier to understand.

Take one example from jetson nano as below code. The fragment will override the current dts file property if certain condition matches. For example, when the board id matches >= 3448-0000-100, it will modify channel@0 property in ina3221 DT.

plugin-manager {
fragement@0 {
ids = “>=3448-0000-100”, “>=3448-0002-100”;
override@0 {
target = <&ina3221x>;
overlay {
channel@0 {
ti,rail-name = “POM_5V_IN”;
channel@1 {
ti,rail-name = “POM_5V_GPU”;

You can check DT from each platform. We use such method in every DT we release.

Is there any way to select a specific kernel dts through plugin-manager after reading carrier eeprom instead of overriding?

No such existing driver.

Okay, in your previous example what does ina3221 indicates?

It is just another device tree property inside the full dts. You can replace this to other items. For example, usb controller, pcie controller…etc.

With the plugin-manager if boardid is 3448-0000-100 , how would it effect the ina3221 node in dts file ?
Can you show with an example of dts

I already showed and told. Read my previous comment again.

There are several ina3221 nodes like ina3221x@40, ina3221x@41, ina3221x@42 etc…, with different register addresses, then how will it override, will it override for all register’s nodes?

This is just a nickname. The nickname table should be in the last of your full dts. It is defined as below.

host1x {
i2c@546c0000 {
ina3221x: ina3221x@40 {
compatible = “ti,ina3221x”;
reg = <0x40>;

Thus, the ina3221x is above case should be ina3221x@40.

Hai WayneWWW,

Thank you for the information regarding plugin manager.

For enabling specific device nodes in dts file for custom carrier board during runtime, i have followed the following steps:

1)For the custom carrier board, added a alphanumeric board-Id to EEPROM (example : AB12-0000-000)
2)Added my device nodes in dts file with default status value to ‘disabled’ and included it in “tegra194-p3668-all-p3509-0000.dts”
3)Created mydevice.dtsi file with the following content

/ {
plugin-manager {
fragement-my-device {
ids = “>=AB12-0000-000”;
override@0 {
target = <&{/path/to/my/device/node/in/dts}>;
overlay {
status = “okay”;

  1. Included above mentioned mydevice.dtsi file in tegra194-p3668-all-p3509-0000.dts.

Is it the ideal way of enabling the device nodes with respect to carrier boards in runtime?

Actually, the most important thing is make sure the bootloader (plugin-manager driver) is able to get your board ID first.

You may need to check the driver code.

Yes I have checked that and i found that bootloader (plugin-manager driver) is able to get my board ID

Then the plugin-manager code you are sharing should work.