Jetson Orin Nano 8GB - QSPI & NVMe flashing issue

Hello,

I’m working since few weeks with a NVIDIA Jetson Orin Nano 8GB (JetPack 6.0 - Jetson Linux 36.3) mounted on a custom board. Initially, everything flashed (QSPI + NVMe) and booted correctly with the custom kernel.

Suddenly, after a couple of days the Jetson stopped working (I still have to figure out if is was a SW or HW issue), and I was not able to see any messages, neither via serial connection.

Then, I repeated the same recovery procedure already used once and successfully working:

  1. Flashed the SOM again on the NVIDIA DevKit.

  2. Moved the SOM back to the custom board.

  3. Ran the l4t_initrd_flash.sh prepare + flash flow for QSPI + NVMe.

This time, the NVMe was no longer detected. During flashing, the log shows:

Error: Could not stat device /dev/nvme0n1 - No such file or directory
Flash failure

When I SSH into the recovery shell and check the device tree model, I see:

cat /proc/device-tree/model
NVIDIA Jetson Orin Nano Developer Kit

This confirms that the board is using the DevKit DTB (p3768-0000+p3767-0005), instead of the 0003 where I indicated the model name that should have been displayed.

The kernel logs confirm PCIe link training never completes:

tegra194-pcie 14100000.pcie: Phy link never came up

Questions:

  1. Why did the first flash work (with NVMe link up) even though the SOM EEPROM (probably) already reported DevKit, but now the initrd consistently boots the wrong DTB?

  2. Is there a way to “clear” or reset the flashing preparation environment so I don’t need to redo all my customization from scratch each time?

  3. Can I force the initrd to use a specific DTB (e.g. always my …0003-nv.dtb), regardless of what the EEPROM reports?

Better solutions are more than welcome. Thank you in advance.

Additional notes
To prepare the QSPI I run:

sudo ./tools/kernel_flash/l4t_initrd_flash.sh --showlogs --no-flash -p "-c bootloader/generic/cfg/flash_t234_qspi.xml" --network usb0 jetson-orin-nano-devkit internal

To prepare the NVMe I run:

sudo ./tools/kernel_flash/l4t_initrd_flash.sh --showlogs --no-flash --external-device nvme0n1p1 -c ./tools/kernel_flash/flash_l4t_t234_nvme.xml --external-only --append --network usb0 jetson-orin-nano-devkit external

To flash (first QSPI and then NVMe) I run:
sudo ./tools/kernel_flash/l4t_initrd_flash.sh --showlogs --network usb0 --flash-only

Best regards,

Simone Contorno

Files:

qspi_flashing.log (38.0 KB)

nvme_flashing.log (8.4 KB)

dmesg.log (53.9 KB)

Hi @simone_c !

Hope you are doing well.

To specify which DTB file to use during flashing, make sure you have TBCDTB_FILE set to your DTB file in your jetson-orin-nano-devkit.conf file.

TBCDTB_FILE = "your_dtb_file"

The flash_t234_qspi.xml file will look for this DTB file in the following partition block:

<partition name="A_cpu-bootloader" type="bootloader_stage2" oem_sign="true" compress="true" comp_algo="lz4">
            <allocation_policy> sequential </allocation_policy>
            <filesystem_type> basic </filesystem_type>
            <size> 3670016 </size>
            <file_system_attribute> 0 </file_system_attribute>
            <allocation_attribute> 8 </allocation_attribute>
            <percent_reserved> 0 </percent_reserved>
            <filename> TBCDTB-FILE </filename>
            <align_boundary> 65536 </align_boundary>
</partition>

Just as reference, in case it is helpful: I am able to flash an Orin NX (L4T R36.4.3) with CTI custom carrier board using this flashing command:

sudo ./tools/kernel_flash/l4t_initrd_flash.sh --external-device nvme0n1p1 -c tools/kernel_flash/flash_l4t_external.xml -p '-c bootloader/generic/cfg/flash_t234_qspi.xml' --showlogs --network usb0 cti/orin-nx/boson/fsm-imx464-2cam internal

Nico
Best regards
Embedded Software Engineer at ProventusNova

It worked, thank you!

Bests,

Simone

1 Like

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