Jetson/AGX Xavier DTBs

Jetson AGX Xavier has 6 dtb partitions: bootloader-dtb, bpmp-fw-dtb, kernel-dtb and their backup dtbs (bootloader-dtb_b, bpmp-fw_b and kernel-dtb_b). So there are 3 kinds of dtb.

In JetPack 4.1.1 DP, bootloader-dtb and kernel-dtb use the same dtb file, while bpmp-fw-dtb uses another dtb file, they are defined in $JETPACK_ROOT/Xavier/Linux_for_Tegra/jetson-xavier.conf file (TBCDTB_FILE for bootloader-dtb, BPFDTB_FILE for bpmp-fw-dtb, DTB_FILE for kernel-dtb). In JetPack 4.1.1 DP, bootloader-dtb and kernel-dtb are tegra194-p2888-0001-p2822-0000.dtb and bpmp-fw-dtb is tegra194-a02-bpmp-p2888-a04.dtb.

Just like the names, bootloader-dtb is used by bootloader(cboot), bpmp-fw-dtb is used by bpmp(boot and power management processor) firmware, kernel-dtb is used by Linux kernel.

DTB Partitions on eMMC
Below is DTB partitions of JetPack 4.1.1 DP for Jetson AGX Xavier.

DTB in System
Below is how DTBs play in Jetson AGX Xavier. The jetpack version is 4.1.1 DP.

Bootloader DTB
In JetPack 4.1.1 DP, bootloader-dtb is the same file with kernel-dtb and it is compiled with kernel source code. cboot reads bootloader-dtb to access EEPROM by I2C to get some board information such as board serial number and MAC address.

BPMP-FW DTB
In JetPack 4.1.1 DP, bpmp-fw-dtb is provided as binary at $JETPACK_ROOT/Xavier/Linux_for_Tegra/bootloader. BPMP (boot and power manager processor) brings up SOC at early stage and run power manager services at run time. At high level, the main services provided by the run time firmware are: So bpmp-fw-dtb contains information on clock, dvfs and thermal.
 * Clock, voltage and frequency programming
 * System low power state transitions (SC states)
 * Manage thermal hardware

Kernel DTB
Kernel DTB is compiled with kernel source code. But cboot loads and modifies it at run time. For example, platform needs to carve out some memory regions for special usage, and cboot calculates the remain memory regions and update this information into kernel dtb. Cboot also needs to apply plugin-manager override to update nodes in kernel-dtb when node in plunin-manager matches. The bootargs, board serial number and MAC address are also updated by cboot.