Invalid Device Spec generated during bootloader update

Hi,

I am trying to do a bootloader update on a Jetson Xavier NX board running the new JetPack 4.6. I generated the update file with the command sudo ./build_l4t_bup.sh xxxxx mmcblk0p1 with the board connected and it is (correctly) detected as 3668-200.

When I try to run the update on the device, I get an error message like:

Device TN Spec: 3668-200-0001-G.0-1-2-xxxxx-mmcblk0p1
Device Compatible Spec: 3668-100---1--xxxxx-
Can't find matching TN Spec in OTA Blob!
OTA Blob update failed. Status: 3

Although the Device TN Spec is 3668-200-… the Device Compatible Spec is 3668-100-… Digging into this, I found that there is a line in /opt/nvidia/l4t-bootloader-config/nv-l4t-bootloader-config.sh that changes the board version:

update_jetson_xavier_nx_spec () {
    if [[ "${board_ver}" != "301" ]]; then
        board_ver="100"
    fi
    board_sku=""
    board_rev=""
    chip_rev=""
}

So basically the board version “200” read from the EEPROM is changed to “100” making the device board version incompatible with the update.

Changing this line makes the update work. So what is the reason for changing the board version there and is there a recommended way to fix this and make the update work correctly?

Thank you,
Max

Could you share me the S/N number on your module sticker?

Also, is your carrier board the NV developer kit?

The carrier board is a custom board. It is also difficult to access the mounted module to check the S/N. Can it also be read out via the software?

Did you use the same board name in both flash.sh and build_l4t_bup.sh?

Yes, I’m using the same board name for both commands (so the “xxxxx” is the same everywhere).

The board name is also consistent in all files and logs. The only difference is in the board version, which is read as 200 from EEPROM but returned as 100 from the above mentioned method.

By the way, the same difference also exists in the /etc/nv_boot_control.conf file:

TNSPEC 3668-200-0001-G.0-1-2-xxxxx-mmcblk0p1
COMPATIBLE_SPEC 3668-100---1--xxxxx-
TEGRA_CHIPID 0x19
TEGRA_OTA_BOOT_DEVICE /dev/mtdblock0
TEGRA_OTA_GPT_DEVICE /dev/mtdblock0

With JetPack version 4.3 (the one we used before) the problem does not occur:

TNSPEC 3668-200-0001-G.0-1-2-xxxxx-mmcblk0p1
COMPATIBLE_SPEC 3668----1--xxxxx-mmcblk0p1
TEGRA_CHIPID 0x19
TEGRA_OTA_BOOT_DEVICE /dev/mtdblock0
TEGRA_OTA_GPT_DEVICE /dev/mtdblock0

Can you firstly put your SOM back to devkit and validate if the default jetpack is able to create and update the BUP?

If this is caused by SOM version (100 and 200), then even devkit should hit issue too.

Unfortunately, I don’t have a devkit. But I agree with you, that it probably also affects the default jetpack systems so it should be reproducible.

For the S/N the eeprom shall provide the info.

sudo i2dcump -y 0 0x50

What I just tried was to flash the default JetPack with SDKManager on the module (but without dev kit carrier board). It still shows the same content in /etc/nv_boot_control.conf:

test@test-desktop:~$ cat /etc/nv_boot_control.conf 
TNSPEC 3668-200-0001-G.0-1-2-jetson-xavier-nx-devkit-emmc-mmcblk0p1
COMPATIBLE_SPEC 3668-100---1--jetson-xavier-nx-devkit-emmc-
TEGRA_CHIPID 0x19
TEGRA_OTA_BOOT_DEVICE /dev/mtdblock0
TEGRA_OTA_GPT_DEVICE /dev/mtdblock0

I also tried to force a bootloader update and it completes although showing the wrong board version number. Probably the default BUP also contains content for the 3668-100?

test@test-desktop:~$ sudo apt-get install --reinstall nvidia-l4t-bootloader 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages were automatically installed and are no longer required:
  apt-clone archdetect-deb bogl-bterm busybox-static cryptsetup-bin dpkg-repack gir1.2-timezonemap-1.0 gir1.2-xkl-1.0 grub-common kde-window-manager kinit kio kpackagetool5 kwayland-data kwin-common
  kwin-data kwin-x11 libdebian-installer4 libkdecorations2-5v5 libkdecorations2private5v5 libkf5activities5 libkf5attica5 libkf5completion-data libkf5completion5 libkf5declarative-data libkf5declarative5
  libkf5doctools5 libkf5globalaccel-data libkf5globalaccel5 libkf5globalaccelprivate5 libkf5idletime5 libkf5jobwidgets-data libkf5jobwidgets5 libkf5kcmutils-data libkf5kcmutils5 libkf5kiocore5 libkf5kiontlm5
  libkf5kiowidgets5 libkf5newstuff-data libkf5newstuff5 libkf5newstuffcore5 libkf5package-data libkf5package5 libkf5plasma5 libkf5quickaddons5 libkf5solid5 libkf5solid5-data libkf5sonnet5-data
  libkf5sonnetcore5 libkf5sonnetui5 libkf5textwidgets-data libkf5textwidgets5 libkf5waylandclient5 libkf5waylandserver5 libkf5xmlgui-bin libkf5xmlgui-data libkf5xmlgui5 libkscreenlocker5
  libkwin4-effect-builtins1 libkwineffects11 libkwinglutils11 libkwinxrenderutils11 libqgsttools-p1 libqt5designer5 libqt5help5 libqt5multimedia5 libqt5multimedia5-plugins libqt5multimediaquick-p5
  libqt5multimediawidgets5 libqt5opengl5 libqt5quickwidgets5 libqt5sql5 libqt5test5 libxcb-composite0 libxcb-cursor0 libxcb-damage0 os-prober python3-dbus.mainloop.pyqt5 python3-icu python3-pam python3-pyqt5
  python3-pyqt5.qtsvg python3-pyqt5.qtwebkit qml-module-org-kde-kquickcontrolsaddons qml-module-qtmultimedia qml-module-qtquick2 rdate tasksel tasksel-data
Use 'sudo apt autoremove' to remove them.
0 upgraded, 0 newly installed, 1 reinstalled, 0 to remove and 136 not upgraded.
Need to get 38,0 MB of archives.
After this operation, 0 B of additional disk space will be used.
Get:1 https://repo.download.nvidia.com/jetson/t194 r32.6/main arm64 nvidia-l4t-bootloader arm64 32.6.1-20210726122859 [38,0 MB]
Fetched 38,0 MB in 2s (16,2 MB/s)                 
debconf: delaying package configuration, since apt-utils is not installed
(Reading database ... 159851 files and directories currently installed.)
Preparing to unpack .../nvidia-l4t-bootloader_32.6.1-20210726122859_arm64.deb ...
Unpacking nvidia-l4t-bootloader (32.6.1-20210726122859) over (32.6.1-20210726122859) ...
Setting up nvidia-l4t-bootloader (32.6.1-20210726122859) ...
3668-100---1--jetson-xavier-nx-devkit-emmc-        # <<============ HERE THE "WRONG" BOARD VERSION IS DETECTED
Starting bootloader post-install procedure.
rootfs AB is not enabled.
Update bl_update_payload completed.
Reboot the target system for changes to take effect.
Updating extlinux.conf...
Root device is set in the extlinux.conf

This is the output of the i2cdump:

test@test-desktop:~$ sudo i2cdump -y 0 0x50
No size specified (using byte-data access)
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
00: 01 00 fc 00 54 0e 01 00 02 47 00 00 00 00 00 00    ?.?.T??.?G......
10: 00 00 00 00 36 39 39 2d 31 33 36 36 38 2d 30 30    ....699-13668-00
20: 30 31 2d 32 30 30 20 47 2e 30 00 00 00 00 00 00    01-200 G.0......
30: 00 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
40: ff ff ff ff e3 c6 05 2d b0 48 31 34 32 32 32 32    ....???-?H142222
50: 30 30 31 33 32 39 34 00 00 00 00 00 00 00 00 00    0013294.........
60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
90: 00 00 00 00 00 00 4e 56 43 42 1c 00 4d 31 00 00    ......NVCB?.M1..
a0: ff ff ff ff ff ff ff ff ff ff ff ff e3 c6 05 2d    ............???-
b0: b0 48 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ?H..............
c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3f    ...............?

Is your default jetpack from sdkm the 4.6 version?

Yes, it is 4.6 (rev.2)

We will check what happened to this kind of module. But need to wait until Monday.

Thanks for reporting this.

1 Like

Hi,

We find the cause of this issue. To workaround this, please use the l4t_generate_soc_bup.sh to generate the BUP directly, you can remove unnecessary entries in “t19x_spec” inside this script according to your module.

Thank you for the suggestion @WayneWWW. Unfortunately, I wasn’t able to test it with the device until today. I’m still not quite sure which configuration you are suggesting. If I remove the unnecessary entries and add the following line derived from the EEPROM information, it still fails with the same error message.

'boardid=3668;fab=200;boardsku=0001;boardrev=;fuselevel_s=1;chiprev=2;board=xxxxx;rootdev=mmcblk0p1'

If I change it to fab=100,the bl_update_payload is accepted, but isn’t this still wrong? I don’t understand why I need to specify fab=100 if my device is fab=200. Or do you mean to use this only as a temporary workaround?

Correct my comment.

The workaround here is as below.

# jetson-xavier-nx-devkit:
    'boardid=3668;fab=100;boardsku=0000;boardrev=;fuselevel_s=1;chiprev=2;board=jetson-xavier-nx-devkit;rootdev=mmcblk0p1'
    'boardid=3668;fab=200;boardsku=0000;boardrev=;fuselevel_s=1;chiprev=2;board=jetson-xavier-nx-devkit;rootdev=mmcblk0p1'

Add one line to the l4t_generate_soc_bup.sh and let it generate a new BUP, this one should work on your fab=200 module.

Thank you @WayneWWW the workaround seems to work for my setup.

1 Like

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