Device Tree error when loading custom DT from /boot with extlinux.conf FDT arg

I’m trying to load a custom device tree using the FDT arg in extlinux.conf. Without FDT argument my kernel boots fine with the U-Boot loaded DT from /dev/mmcblk0p16 (I’ve reordered the l4t partitions) and I see the following in dmesg:

[    0.349000] Initializing plugin-manager
[    0.353108] Plugin module not found
[    0.357472] node /plugin-manager/soc-prod-a02-fragment match with chip-id A02P
[    0.365615] node /plugin-manager/fragement@0 match with odm-data enable-denver-wdt
[    0.374616] node /plugin-manager/fragement@4 match with odm-data enable-denver-wdt

So far, so good. But when I load a custom DT (which has been aligned) using the FDT arg I get the following:

[    0.354097] Initializing plugin-manager
[    0.358227] Plugin module not found
[    0.362265] chosen/plugin-manager does'nt have ids, nct and odm-data
[    0.368930] Error in parsing node /plugin-manager/soc-prod-a01-fragment: -22
[    0.376623] chosen/plugin-manager does'nt have ids, nct and odm-data
[    0.383279] Error in parsing node /plugin-manager/soc-prod-a02-fragment: -22

Here is what my /boot/extlinux.conf looks like:

MENU TITLE Boot Options
LABEL primary
      MENU LABEL primary Image
      LINUX /boot/Image
      APPEND ${cbootargs} root=${mender_kernel_root} ro rootwait
      MENU LABEL dev Image
      LINUX /boot/Image
      APPEND ${cbootargs} root=${mender_kernel_root} ro rootwait
      FDT /boot/tegra186-quill-p3310-1000-c03-00-base.dtb

Primary works, dev does not. Is it possible to load a DT like this on NVIDIA Jetson TX2? What adds the ids, nct and odm-data nodes? If it was U-Boot I’d have thought sysboot would add these too.

I tried copying the DT partition to a file but I got the same results as the FDT kernel above. Which means it isn’t the DT itself, but something to do with the FDT arg:

dd if=/dev/mmcblk0p16 of=/boot/test-nohead.dtb bs=400 skip=1

In more recent L4T releases FDT is not supported. The device tree (possibly signed) is in a partition. Early boot stages read this, possibly modify it, and then pass on to the next boot stage. All of this goes on before U-Boot ever runs (U-Boot is getting environment set up for it by these earlier stages…the FDT entry would occur too late).

Actual procedure to install the dtb differs depending on release, and I don’t know which release you are using (see “head -n 1 /etc/nv_tegra_release”).

In R28.1 you could directly dd to a partition. In R28.2 the binary needs to be signed first, and thus the tool is used. If you are using something recent, then these might be of interest (be sure to check “patch” notes in these posts since in one case flashing just DTB without also flashing rootfs requires the patch…always clone first if you do something risky and are concerned with the rootfs being lost):

That’s really useful, thanks again linuxdev.