JetPack4.4-32.4.3: DTB switching using FDT in extlinux.conf does not work

Hello All,

I have a TX2 devkit on which I follow the following steps.

  1. Got a fresh Tx2 32.4.3 download using SDKmanager
  2. Flashed the TX2 module using ./flash.sh jetson-tx2-devkit mmcblk0p1
  3. Done module setup.
  4. On the host machine generated sign files for the dtb using: sudo ./flash.sh --no-flash -k kernel-dtb jetson-tx2 mmcblk0p1
  5. Copied over the tegra186-quill-p3310-1000-c03-00-base_sigheader.dtb.encrypt and tegra186-quill-p3310-1000-c03-00-base.dtb.sb on TX2 module at /boot.
  6. Updated extlinux.conf. Added: FDT /boot/tegra186-quill-p3310-1000-c03-00-base.dtb
  7. On reboot the system gives errors regarding nvdisplay and DTB switch does not happen.

I have attached the logs.
putty_dtb_switching_on_tx2_devkit.txt (117.8 KB)
Thanks.

hello mbthakkar,

according to below messages,
your device tree still loading from kernel-dtb partition, i.e. mmcblk0p*

[0001.710] I> Loading kernel-dtb from partition
[0001.714] I> Loading partition kernel-dtb at 0x80000000 from device(0x1)

could you please share your modification of extlinux.conf for reference,
thanks

Hello JerryChang,

Follwoing is the content of extlinux.conf:

nvidia@nvidia-desktop:/boot$ cat extlinux/extlinux.conf
TIMEOUT 30
DEFAULT primary

MENU TITLE L4T boot options

LABEL primary
MENU LABEL primary kernel
LINUX /boot/Image
INITRD /boot/initrd
FDT /boot/tegra186-quill-p3310-1000-c03-00-base.dtb
APPEND {cbootargs} quiet root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 console=ttyS0,115200n8 console=tty0 fbcon=map:0 net.ifnames=0 isolcpus=1-2 nvidia@nvidia-desktop:/boot

I added FDT line to it. I alos added tegra186-quill-p3310-1000-c03-00-base_sigheader.dtb.encrypt and tegra186-quill-p3310-1000-c03-00-base.dtb.sb files generated from sudo ./flash.sh --no-flash -k kernel-dtb jetson-tx2 mmcblk0p1 to /boot folder on TX2 module.

I have attached the log file which shows the contents of /boot folder and dmesg log.
Thanks.putty-exlinux-mod-devkit.txt (110.8 KB)

hello mbthakkar,

to clarify, you don’t need to put sign and encrypt dtb file under /boot/ for FDT entries.
BUT, you’ll need sign and encrypt dtb file for kernel-dtb partition, (i.e. kernel-dtb -> …/…/mmcblk0p30)

we had also confirm that we can have DTB update on TX2 /JP-4.4 GA with FDT entry.
so, may I know what’s your steps for building your device tree?
thanks

Hello JerryChang,

Thank you for the response.

  1. At this point I am using Nvidia provided dtb for TX2 module + devkit.
  2. I created sign and encrypt dtb using sudo ./flash.sh --no-flash -k kernel-dtb jetson-tx2 mmcblk0p1 and copied into /boot partition on tx2 module.

Can you please let me know is there any specific way to copy encrypt and sign files to kernel-dtb partition or just dd command.

If I want to switch between multiple DTB’s then should I put the sign and encrypt for all of them in kernel-dtb partition, (i.e. kernel-dtb -> …/…/mmcblk0p30) ?

Thanks.

hello mbthakkar,

FYI,
there’re two approaches for replacing device tree without flashing the board.

  1. you should copy your own compile dtb file to the target, you don’t need extra steps to sign and encrypt dtb with flash script files. just put it under /boot/ and specify the FDT path in extlinux.conf file;
    for example,
    FDT /boot/tegra186-quill-p3310-10000-c03-00-base.dtb
    after that, you may also perform a warm-reboot to make it works.

  2. if you’re performing flash script to have sign and encrypt dtb file. you may using dd commands to write the file into the partition.
    for example,
    sudo dd if=tegra186-quill-p3310-1000-c03-00-base_sigheader.dtb.encrypt of=/dev/mmcblk0p30 bs=1M
    please double confirm you did not include FDT entries in the extlinux.conf file, to make it loads from kernel-dtb partition, you should also perform a warm-reboot to make it works.

Hello JerryChang,

I would like to use the first approach. Now as per you instructions I removed the sign and encrypt dtbs and just added FDT /boot/tegra186-quill-p3310-10000-c03-00-base.dtb to extlinux.conf file.

Yet the issue remains the same, it does not look like it applied the changes. I have attached the output log taken from serial console.

Thanks.

no-sign-fdt-devkit.txt (113 KB)

hello mbthakkar,

may I know what’s the device tree changes you’d done, did you recompile the dtb file?

hello mbthakkar,

according to your uboot logs, it actually loading device tree from the FDT entry,
for example,

U-Boot 2016.07-ge6da093be3 (Jun 25 2020 - 21:14:32 -0700)

...

Found /boot/extlinux/extlinux.conf
...
Retrieving file: /boot/tegra186-quill-p3310-1000-c03-00-base.dtb

may I know your steps to have device tree modification?
thanks

Hello JerryChang,

I am using already compiled DTB as I am not doing any changes to the DTB. The whole goal here is to make FDT thing work to help with DTB switching. I am currently working with TX2 module + Devkit.

But the end goal is to make the DTB switching happen on my custom board which has 2 DTB profiles: Base and camera one.

If I do not sign DTB and add FDT /boot/dtb-name in extlinux.conf on warm-reboot it fails as per the logs already provided in previous comments.

Follwoing is the screenshot capture from 2 log files:
On left: Base log file, i.e. Flashed TX2 module for devkit and took log once the system was up.
On Right: FDT added log, i.e. Updated extlinux.conf with FDT /boot/tegra186-quill-p3310-1000-c03-00-base.dtb, did warm reboot and took the log.

From the image1 it can be seen that it gets the FDT change, i.e. U-Boot is able to identify the address change and DTB location change.

From image 2: It is seen that FDT memory address is same for both cases whether FDT change is added to extlinux.conf (right side) or not (left side). But we can see that where we have extlinux.conf modified, reg size is only 80 (right side).There are various errors generated for arm-smmu (ARM-shared memory management unit) and it throws error for unhandled interupts

Please let me know is there any change that I need to do in the cboot parameters or boot arguments to make it work.

Thanks.

Do you add anything to this dtb file? I mean any patch or your own modification.

No I do not make any changes or apply any patches to dtb file at all.

Hi,

What will happen if you point the FDT path to the original file under /boot/dtb? Will it pass the boot?

This also fails and give the same behaviour. I have also attached the log for your reference.

tx2-devkit-fdt-withboot-dtb-location.txt (113.7 KB)

Hi,

We have 2 dts that can be compared now

  1. When device boot from partition, which should have no problem.

  2. When device boot from FDT location.

Could you try to compare (1) and (2) for each device tree content at run time?

dtc -I fs /sys/firmware/devicetree/

Hello WayneWWW,

I was able to compare the device tree content at runtime, I have attached the logs and decompiled dtb for your reference:

  1. When device boot from partition, which should have no problem.
    boot-dtc-1.txt (508.5 KB) tx2-devkit-dtc-boot-1-18Sep.txt (685.7 KB)

  2. When device boot from FDT location. fdt-dtc-1.txt (492.4 KB) tx2-devkit-dtc-fdt-1-18Sep.txt (705.7 KB)

When you compare two decompiled device tree files it gives difference at 4 places as below:
Left side : decompiled dtb of device boot from partition (1)
Right side: decompiled dtb of device boot from FDT location. (2)

Please let me know if you need any more details.

Looks like we can repro this issue too.

Will update to you once we get some fix.

1 Like