Hi! I thought that I understand how device tree is being passed on Jetson devices but got surprised another time.
It seems impossible to update device tree overlay value without reflashing QSPI.
Orin NX, BSP 36.4, using extlinux.
In the device tree overlay, we have this value:
$ fdtdump /boot/tegra234-diamond-orb.dtbo | grep line_
line_length = "2800";
But in /proc
it’s 2880 (previous value before reflash)
$ cat /proc/device-tree/bus@0/cam_i2cmux/i2c@3/rbpcv2_ox05b1s_a@24/mode0/line_length
2880
Files in /boot
$ ls /boot -l
total 68644
-rw-r--r-- 1 root root 44126720 Jan 1 1970 Image
-rw-r--r-- 1 root root 8494950 Jan 1 1970 System.map-5.15.148
-rw-r--r-- 1 root root 256485 Jan 1 1970 config-5.15.148
drwxr-xr-x 1 root root 4096 Jan 1 1970 extlinux
-rw-r--r-- 1 root root 17531269 Jan 1 1970 initrd.cpio.gz
-rw-r--r-- 1 root root 17535 Jul 10 11:25 tegra234-diamond-orb.dtbo
-rw-r--r-- 1 root root 249601 Jan 1 1970 tegra234-p3768-0000+p3767-0000-nv.dtb
extlinux.conf:
$ sudo cat /boot/extlinux/extlinux.conf
TIMEOUT 30
DEFAULT primary
MENU TITLE L4T boot options
LABEL primary
MENU LABEL primary kernel
LINUX /boot/Image
FDT /boot/tegra234-p3768-0000+p3767-0000-nv.dtb
OVERLAYS /boot/tegra234-diamond-orb.dtbo
INITRD /boot/initrd.cpio.gz
APPEND root=/dev/mapper/root net.ifnames=0 ${cbootargs}
I’m aware there is a “bootloader dtb” that’s picked from Linux_for_Tegra/kernel/dtb/tegra234-p3768-0000+p3767-0000-nv.dtb
, copied to Linux_for_Tegra/bootloader/
and used as UEFI dtb. And that having any value in this dtb will make it propagate to kernel and cause clash.
But this value cam_i2cmux/i2c@3/rbpcv2_ox05b1s_a@24/mode0/line_length
is NOT in the bootloader dtb. It is ONLY in the .dtbo file which is not used by the bootloader.
Questions:
- Why the value seen by kernel is different from the value in
.dtbo
file? - How to update it?