NVMe Flashing Fails with "no-flash flag enabled" Error

Hi Nvidia,

We are using a 64GB AGX Orin without EEPROM on the carrier board. During flashing, modify the following file
Linux_for_Tegra/bootloader/tegra234-mb2-bct-common.dtsi

1.Flashing to eMMC works normally with the following command:

 sudo ./flash.sh jetson-agx-orin-devkit internal

2.Flashing to NVMe fails with the following command:

$ sudo ./tools/kernel_flash/l4t_initrd_flash.sh --external-device nvme0n1p1 \
  -c tools/kernel_flash/flash_l4t_t234_nvme.xml \
  --showlogs --network usb0 jetson-agx-orin-devkit external

Error message:

*** no-flash flag enabled. Exiting now... *** 

User can run above saved command in factory environment without 
providing pkc and sbk keys to flash a device

Example:
    $ cd bootloader 
    $ sudo bash ./flashcmd.txt

Key issues observed:

  • The flashing process times out during “Waiting for target to boot-up…”
  • Device fails to boot to the initrd flash kernel
  • Error suggests the no-flash flag is enabled

full log
flash_external_log.txt (269.4 KB)

Hi norman_xu,

Please try using the following command instead.

$ sudo ADDITIONAL_DTB_OVERLAY_OPT="BootOrderNvme.dtbo" ./tools/kernel_flash/l4t_initrd_flash.sh --external-device nvme0n1p1 -p "-c ./bootloader/generic/cfg/flash_t234_qspi.xml" -c ./tools/kernel_flash/flash_l4t_t234_nvme.xml --showlogs --network usb0 jetson-agx-orin-devkit internal

Hi KevinFFF,

sudo ADDITIONAL_DTB_OVERLAY_OPT="BootOrderNvme.dtbo" ./tools/kernel_flash/l4t_initrd_flash.sh --external-device nvme0n1p1 -p "-c ./bootloader/generic/cfg/flash_t234_qspi.xml" -c ./tools/kernel_flash/flash_l4t_t234_nvme.xml --showlogs --network usb0 jetson-agx-orin-devkit internal

Unfortunately, the issue still persists.

flash log:
flash_log.txt (263.6 KB)

You are purposely using Jetpack 6.0 with kernel 5.15.136-tegra?

The --no-flash part of your log is from when Jetpack first flashes bootloader/generic/cfg/flash_t234_qspi.xml and is not an error.

If you use the same usb port on your x86_64 host then this may work.

cat /sys/bus/usb/devices/1-2/power/control

if it isn’t ‘on’ then

echo on | sudo tee /sys/bus/usb/devices/1-2/power/control

so your host usb doesn’t sleep. Then

cd /home/fyx/xxs/Linux_for_Tegra
sudo ADDITIONAL_DTB_OVERLAY_OPT="BootOrderNvme.dtbo" ./tools/kernel_flash/l4t_initrd_flash_internal.sh --network usb0 --usb-instance 1-2 --device-instance 0 --flash-only --external-device nvme0n1p1-c "./tools/kernel_flash/flash_l4t_t234_nvme.xml" jetson-agx-orin-devkit internal

Hi whitesscott,

Yes, Jetpack 6.0 ( R36.3.0)

image

flash error log:
flash_log.txt (66.6 KB)

Here’s another method that might work

sudo ADDITIONAL_DTB_OVERLAY_OPT="BootOrderNvme.dtbo" \
./flash.sh -c ./tools/kernel_flash/flash_l4t_t234_nvme.xml \
           jetson-agx-orin-devkit nvme0n1p1

Hi whitesscott,

A different error appeared while flashing with this command.

[   2.2954 ] Packing sdram param for instance[10]
[   2.2954 ] Packing sdram param for instance[11]
[   2.2955 ] Packing sdram param for instance[12]
[   2.2955 ] Packing sdram param for instance[13]
[   2.2956 ] Packing sdram param for instance[14]
[   2.2957 ] Packing sdram param for instance[15]
[   2.3562 ] Reading ramcode from backup chip_info.bin file
[   2.3562 ] RAMCODE Read from Device: 3

[   2.3562 ] Using ramcode 0
[   2.3562 ] Disabled BPMP dtb trim, using default dtb
[   2.3562 ] 
[   2.3566 ] tegrahost_v2 --chip 0x23 0 --align mem_rcm_aligned.bct
[   2.3572 ] tegrahost_v2 --chip 0x23 0 --magicid MEM0 --ratchet_blob ratchet_blob.bin --appendsigheader mem_rcm_aligned.bct zerosbk
[   2.3573 ] adding BCH for mem_rcm_aligned.bct
[   2.3595 ] tegrasign_v3.py --key None --list mem_rcm_aligned_sigheader.bct_list.xml --pubkeyhash pub_key.key --sha sha512
[   2.3596 ] Assuming zero filled SBK key
[   2.3606 ] Warning: pub_key.key is not found
[   2.3605 ] tegrahost_v2 --chip 0x23 0 --updatesigheader mem_rcm_aligned_sigheader.bct.encrypt mem_rcm_aligned_sigheader.bct.hash zerosbk
[   2.3614 ] Copying signatures
[   2.3617 ] tegrahost_v2 --chip 0x23 0 --partitionlayout flash.xml.bin --updatesig images_list_signed.xml
Traceback (most recent call last):
  File "/home/fyx/xxs/Linux_for_Tegra/bootloader/./tegraflash.py", line 1456, in <module>
    tegraflash_run_commands()
  File "/home/fyx/xxs/Linux_for_Tegra/bootloader/./tegraflash.py", line 1276, in tegraflash_run_commands
    interpreter.onecmd(command)
  File "/usr/lib/python3.10/cmd.py", line 217, in onecmd
    return func(arg)
  File "/home/fyx/xxs/Linux_for_Tegra/bootloader/./tegraflash.py", line 289, in do_flash
    self.chip_inst.tegraflash_flash(exports)
  File "/home/fyx/xxs/Linux_for_Tegra/bootloader/tegraflash_impl_t234.py", line 979, in tegraflash_flash
    self.tegraflash_send_to_bootrom()
  File "/home/fyx/xxs/Linux_for_Tegra/bootloader/tegraflash_impl_t234.py", line 1013, in tegraflash_send_to_bootrom
    info_print(mb1_bin + " filename is from images_list")
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
Failed flashing generic.

full log:

flash_log.txt (50.2 KB)

If your Linux_for_Tegra was created via manually downloaded Jetson_Linux_r36.3.?_aarch64.tbz2 and Tegra_Linux_Sample-Root-Filesystem_r36.3.?_aarch64.tbz2 then it may help to run following if you haven’t already.

If you have changed your ./rootfs directory back it up first to be safe.

cd /home/fyx/xxs/Linux_for_Tegra
sudo ./apply_binaries.sh
sudo ./tools/l4t_flash_prerequisites.sh

then try this again

sudo ADDITIONAL_DTB_OVERLAY_OPT="BootOrderNvme.dtbo" ./tools/kernel_flash/l4t_initrd_flash.sh --external-device nvme0n1p1 -p "-c ./bootloader/generic/cfg/flash_t234_qspi.xml" -c ./tools/kernel_flash/flash_l4t_t234_nvme.xml --showlogs --network usb0 jetson-agx-orin-devkit internal

From the flash log your shared, it seems failing at Step 3: Start the flashing proces to wait the board boot up.
Please share the full serial console log at this moment for further check.

Hi FevinFFF,

the full serial console log:

minicom_log.txt (76.2 KB)

After replacing the DTB file, the issue has been resolved. Thanks.