Readout currently used DTB of BPMP


I would like to readout the currently used Device-Tree-Blob for the BPMP on my Jetson Xavier AGX to ensure, that the Spread Spectrum Clocking for PCIe is disabled.
I tried to use dtc to decode the mmcblk0p16 partition but that gives me the error:

FATAL ERROR: Blob has incorrect magic number

I assume that is connected to encrypting and signing the DTB.

Is there a way to readout the currently used DTB for the BPMP?


If you examine “/proc/device-tree”, then you will find that this is an exact copy of all of the device tree values as the kernel sees it. The files are not real files, and are just the kernel making that information available in RAM looking like files.

Incidentally, if you want a device tree source file from this to examine, then something like this would work (you might have to “sudo apt-get install device-tree-compiler”):
dtc -I fs -O dts -o extracted.dts /proc/device-tree

Unfortunately I can not find a single entry of the BPMP (Boot and Power Management Processor) device tree in /proc/device-tree. It seems like the BPMP device tree is not propagated to the kernel, after the BPMP has initialized the chip.

This could mean that it isn’t using the tree you expect, but it might be one other possibility: The boot stages can edit the device tree content prior to passing it on to the Linux kernel. Usually there isn’t any noticeable editing, but perhaps it is. Can someone from NVIDIA suggest of BPMP device tree content is edited on AGX Xavier prior to passing on to the kernel?

Also, what is the content of your “/boot/extlinux/extlinux.conf”? Does the boot entry inherit “${cbootargs}”? What do you see from “cat /proc/cmdline”?

I am not seen a single entrance of the clock configuration, which is done with BPMP device tree under /proc/device-tree. Even not the configuration, which is part of the default device tree.

The command line seen from the kernel is:

console=ttyTCU0,115200 root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 console=ttyS1,115200n8 fbcon=map:0 net.ifnames=0 rootfstype=ext4  video=tegrafb earlycon=tegra_comb_uart,mmio32,0x0c168000 gpt rootfs.slot_suffix= usbcore.old_scheme_first=1 tegraid= maxcpus=8 boot.slot_suffix= boot.ratchetvalues=0.4.2 vpr_resize sdhci_tegra.en_boot_part_access=1  

The extlinux.conf includes ${cbootargs}, but it is L4T 32.7.2, so this configuration file is not read (Cboot in 32.7.2 fails to read extlinux.conf).

NVIDIA would need to comment, as I know there were times when parts of extlinux.conf were not read correctly, but I wasn’t aware of such a thing in R32.7.2. It could be correct that the device tree is not loading from where you expect because of that, but it could also still be because boot stages filter out part of the tree before passing it on as “${cbootargs}”. Don’t know.

I don’t know the exact command line flash spec, but it is possible to flash the device tree into the signed partition. Someone else would need to comment. BPMP is something which gets set up quite early in boot, before the bootloader itself starts, and so I don’t know how much of that gets updated (perhaps none of it gets updated, but if some fragment of the device tree is invalid, it might also get left out). Perhaps @WayneWWW could comment on what parts of the BPMP device tree should still exist as “${cbootargs}” in extlinux.conf.


/sys/kernel/debug/bpmp/debug shall have the content of the bpmp dtb.

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