Strange behavior when flashing Xavier NX nvme

I’ve got a Xavier NX config which uses the flash_l4t_t194_qspi_p3668.xml for qspi and the tools/kernel_flash/flash_l4t_nvme_rootfs_ab.xml for the NVMe.

Usually that worked. Now after some reflashing I encountered the issue that the bootloader complains that the partition bpmp-fw_b is not found.

That partition is usually located on the emmc/sd card for the Xavier NX. It is not added with the flash xml files I use.
How do I add that partitions? If I create an alternative xml for the qspi with them included the system cannot flash as the qspi seems to be full.

Could it be that remains of such a partition on the SD/EMMC caused my system to work when not adding that partition to the qspi/nvme?

can you share the full workflow what you did, and what error was shown?

Hey @DaveYYY I can’t tell the exact steps anymore.

Just answer me the question if bpmp-fw_b is required and if it is possible to add it into QSPI. Or do I need to add it into the NVMe due to a lack of space?

I am pretty sure that it is related to my question

There is no way anymore to properly script the flashing for multiple devices anymore.
The changes in flashing between Xavier/Orin seem to have made it impossible to describe the devices with configs anymore. If you want to flash a device now, you need to know which device you flash, so that you can adapt the flash command to the config file chosen. That is very user unfriendly and should be changed back to how flashing worked in the past. Let’s wait for the answer of your internal team.


I flashed a Xavier NX EMMC with the following EMMC_CFG:

I used this NVMe config:

This flashes QSPI/EMMC/NVMe
Switching A/B slots works.

As soon as I remove the partition table of the EMMC with fdisk the A/B switch does not work anymore and I get the following error from the bootloader:

[0000.916] I> Welcome to MB2(TBoot-BPMP) (version: default.t194-mobile-74494172)
[0000.916] I> DMA Heap @ [0x526fa000 - 0x52ffa000]
[0000.917] I> Default Heap @ [0xd486400 - 0xd48a400]
[0000.918] E> DEVICE_PROD: Invalid value data = 70020000, size = 0.
[0000.923] W> device prod register failed
[0000.927] I> gpio framework initialized
[0000.931] I> tegrabl_gpio_driver_register: register 'nvidia,tegra194-gpio' driver
[0000.938] I> tegrabl_gpio_driver_register: register 'nvidia,tegra194-gpio-aon' driver
[0000.946] I> No valid sdcard_params in mb1_bct
[0000.950] I> Boot_device: QSPI_FLASH instance: 0
[0000.954] I> qspi flash-0 params source = boot args
[0000.960] I> QSPI-0l initialized successfully
[0000.963] I> sdmmc-3 params source = safe params
[0001.306] I> sdmmc DDR50 mode
[0001.324] I> Found 41 partitions in QSPI_FLASH (instance 0)
[0001.341] W> Cannot find any partition table for 00000003
[0001.342]  > PARTITION_MANAGER: Failed to publish partition.
[0001.358] W> Cannot find any partition table for 00010003
[0001.359]  > PARTITION_MANAGER: Failed to publish partition.
[0001.360] I> Active Boot chain : 1
[0001.361] E> Cannot find partition bpmp-fw_b
[0001.361] E> Partition bpmp-fw_b not found
[0001.361] I> ↑???↑???↑???↑???↑???↑???↑???↑???: execution failed
[0001.362] I> ↑???↑???↑???↑???↑???↑???↑???↑???: execution failed
[0001.366] E> Top caller module: LOADER, error module: PARTITION_MANAGER, reason: 0x0d, aux_info: 0x09
[0001.376] I> AB warm reset

So the issue I had before is due to this EMMC CFG:
This qspi config does not contain the bpmp_fw-b partition. Should it be added into the NVMe table?

I wanted to use all the default .xml partition files due to the changes which happen between jetpack releases.
Can anyone confirm that what I attempted to do can not work?

For the Orin devices the QSPI xml contains the partititions.


not sure if it’s a design trade-off or due to space limit, but on Xavier NX, part of the bootloader is stored on eMMC/SD card (depending on the variant), not entirely on QSPI.
If it’s fine to flash with flash_l4t_t194_qspi_p3668.xml, then just keep it. We do not have the authority to force developers into changing the design.

Hey @DaveYYY

No, unfortunately if I flash with the provided nvme_ab.xml and the qspi.xml the bpmp_fw-b partition is missing and the A/B Feature does not work.

Can you please provide a list which partitions need to be added to the nvme.xml to make the A/B feature work if the SD card / EMMC should remain removed/unplugged?


I forgot to mention in the previous comment that, in addition to the fact that part of the bootloader is stored on eMMCS/SD card, T194 MB2 does not support loading bootloader from the NVMe SSD (this is also related to why it has to be flashed with initrd_flash instead of

So you have to keep the eMMC/SD card on your module when booting with NVMe SSD as the rootfs.


In that case you might want to update what people on the forum here are saying.
In is statet in multiple places that the SD Card does not need to be plugged in when using NVMe.

I guess I can not create a universal EMMC_CFG which includes only the QSPI and the required partitions for SD and EMMC where I omit the APP and APP_b partitions in order to speed the flashing up?

In the emmc files the device is this:

In the sd files the device is this:

I guess there is no way to generate a universal partition table?
I need to add two separate files for the QSPI with NVMe, one for SD and one for EMMC?

I must say that I am not really happy with this.
In the past I’ve modified the files and that caused many issues when upgrading to the next Jetpack as the default partition table changed and stuff broke…

Not quite sure about what’s your goal exactly.

In that case you might want to update what people on the forum here are saying.
In is statet in multiple places that the SD Card does not need to be plugged in when using NVMe.

Can you explain more about this?

Why do you insist on creating a universal config file for SD and eMMC? If you have the SD card version, then use the config file for SD card; if you have the eMMC version, then use the one for eMMC.

I have followed the new design of the .conf files where the EMMC_CFG is set automatically based on the board to flash using the update_flash_args function.

In case for A/B you currently have this:

	if [ "${ROOTFS_AB}" == 1 ]; then
		EMMC_CFG=not working;

When I add two different files I have to do two things:

  1. Add two size wise identical copies, apart from the target device, of the qspi_ab.xml, including a part for SD one for EMMC.
    That is error prone and can lead to one file not being updated the next time the L4T changes.
  2. It adds complexity of the update_flash_args function as it has to take into account which device I flash to when ROOTFS_AB is set.

Last update from 5.0.1 to 5.1 I had the issue that the xml file was changed. The system did not throw any error. Anyway we searched why the device behaved strange for a long time. I wanted to prevent that by using the standard files, as it is possible with the Orin seried. Now I learn that there is no default config which can be used with the Xavier series for AB.

So I do not have any other option except creating one myself. I want to limit the modifications to a minimum. If that’s possible. If you say that your system does not offer that much flexibility that’s sad, but I can accept it.

1 Like


Can you tell me which partitions I need to add to the internal storage so that it will work?

I think you already have the answer here:

If I create an alternative xml for the qspi with them included the system cannot flash as the qspi seems to be full.

Ah you misunderstood me.

I am going to create a config for QSPI + SD or QSPI + EMMC which only adds the required partitions to the internal storage (As flashing not required partitions will slow down the flash process):

For now I tried with these and it seems to work:

/dev/mmcblk0p1: UUID="a81f3fb8-fbee-456e-924f-cb32780ef985" TYPE="ext4" PARTLABEL="reserved_for_chain_A_user" PARTUUID="5c056f32-a5f5-4aec-9311-8b03ccb22f7c"
/dev/mmcblk0p2: PARTLABEL="secure-os_b" PARTUUID="22218bc0-9de1-4039-b268-e765ba3b5b40"
/dev/mmcblk0p3: PARTLABEL="eks_b" PARTUUID="333fbb51-cd61-4613-b031-056fdfbec76a"
/dev/mmcblk0p4: PARTLABEL="adsp-fw_b" PARTUUID="1f3f4c10-3e3d-44cd-be20-1807fc99d114"
/dev/mmcblk0p5: PARTLABEL="rce-fw_b" PARTUUID="32ff2dff-0e1c-4330-9666-7270ce942f3b"
/dev/mmcblk0p6: PARTLABEL="sce-fw_b" PARTUUID="7d7af276-f375-4e9b-a21a-676042326960"
/dev/mmcblk0p7: PARTLABEL="bpmp-fw_b" PARTUUID="2893c95d-6d0f-44f9-8444-8d1e84b80839"
/dev/mmcblk0p8: PARTLABEL="bpmp-fw-dtb_b" PARTUUID="18d4c478-9569-495e-b82a-7d0dab33da74"
/dev/mmcblk0p9: PARTLABEL="reserved_for_chain_B_user" PARTUUID="544b3b5e-3ccb-4108-b7e6-09711ec76c76"

Do I need them all or can I omit more?


just keep it if it works fine. I’m not sure if customizing partition layout files is what we should officially support.
Also, I think it is creating the system image that take up majority of time, not flashing, especially with initrd_flash.

I’d be glad to use an official one…unfortunately it does not exist for Xavier. For Orin I’ll keep the stock file for sure. It’s just causing issues. I just can’t justify with our production if flashing 90% of the time is for the EMMC while 10% of the time is what would be needed if we flash only QSPI and NVMe
Flashing the A/B partitions takes a while, about 10 minutes extra when flashing to the EMMC…