Failure to start imx-boot after BSP 6.8.1 upgrade on iMX8MM

My goal is to upgrade BSP from version 5.7.1 to 6.8.1, which includes updating U-Boot from version 2020.04 to 2022.04. The target is Verdin iMX8M Mini.
In production, we use UUU to flash the initial software via USB in recovery mode.

The issue is that the imx-boot image (imx-boot-verdin-imx8mm-xxxxx-sd.bin-flash_evk_emmc_fastboot), which is first loaded into RAM, does not seem to start.

Below is the log of what happens with version 2022.04 (DEBUG enabled):

U-Boot SPL 2022.04-6.8.1-devel+git.a31fdd543bee (Dec 18 2024 - 08:33:49 +0000)
DDRINFO: start DRAM init
DDRINFO: DRAM rate 3000MTS
DDRINFO:ddrphy calibration done
DDRINFO: ddrmix config done
WDT:   Started watchdog@30280000 with servicing (60s timeout)
Trying to boot from USB SDP
sdp_add: cdev: 42200610 gadget: 7fa6a0 gadget->ep0: 7fa740
SDP: initialize...
sdp_set_alt: intf: 0 alt: 0
sdp_start_ep: ep:7fa7a8 req:42200950
sdp_start_ep: ep:7fa810 req:42200a50
w_value: 0x0000 len: 0x0000
req_type: 0x20 ctrl->bRequest: 0x0a sdp->state: 0
w_value: 0x2200 len: 0x004c
req_type: 0x00 ctrl->bRequest: 0x06 sdp->state: 0
SDP: handle requests...
sdp_rx_command_complete: command: 0404, addr: 00000000, cnt: 1026944
Downloading file of size 1026944 to 0x40400000... done
Report 3: HAB security
ep1in-bulk complete --> 0, 5/5
Report 4: Status
ep1in-bulk complete --> 0, 65/65
sdp_rx_command_complete: command: 0b0b, addr: 00000000, cnt: 0
Report 3: HAB security
ep1in-bulk complete --> 0, 5/5
Jumping to header at 0x40400000
Header Tag is not an IMX image
Found header at 0x404229a0
Found FIT
sdp_load_read: sector 0, count 378, buf 42200c50
sdp_load_read: sector 5000, count babe0, buf 40200000
sdp_load_read: sector bfbe0, count e530, buf 402bac00
sdp_load_read: sector ce110, count a0d0, buf 920000

This is how the image booted successfully with version 2020.04:

U-Boot SPL 2020.04-5.7.1-devel+git.15d08d1d2fa1 (Mar 19 2025 - 09:55:04 +0000)
DDRINFO: start DRAM init
DDRINFO: DRAM rate 3000MTS
DDRINFO:ddrphy calibration done
DDRINFO: ddrmix config done
Normal Boot
Trying to boot from USB SDP
SDP: initialize...
SDP: handle requests...
Downloading file of size 1067616 to 0x40400000... done
Jumping to header at 0x40400000
Header Tag is not an IMX image
Found header at 0x404317a0
NOTICE:  BL31: v2.2(release):toradex_imx_5.4.70_2.3.0-g2fa8c6349e
NOTICE:  BL31: Built : 12:30:42, May 17 2022


U-Boot 2020.04-5.7.1-devel+git.33bb8e968332 (Jul 06 2022 - 12:21:53 +0000)

CPU:   i.MX8MMQ rev1.0 1600 MHz (running at 1200 MHz)
CPU:   Industrial temperature grade (-40C to 105C) at 51C
Reset cause: POR
DRAM:  2 GiB
MMC:   FSL_SDHC: 0, FSL_SDHC: 1
Loading Environment from MMC... OK
Fail to setup video link
In:    serial
Out:   serial
Err:   serial
Model: Toradex Verdin iMX8M Mini Quad 2GB Wi-Fi / BT IT V1.1B, Serial# 07219902

 BuildInfo:
  - ATF 2fa8c63
  - U-Boot 2020.04-5.7.1-devel+git.33bb8e968332

Keep SLEEP_MOCI# down
flash target is MMC:0
Net:   eth0: ethernet@30be0000
Fastboot: Normal
Normal Boot
...

If I replace the new imx-boot-verdin-imx8mm-xxxxx-sd.bin-flash_evk_emmc_fastboot image with the one compiled with the old BSP, the update process continues normally.

Below is my latest defconfig (patched u-boot-toradex, contains some unnecessary configs at the end):

CONFIG_ARM=y
CONFIG_ARCH_IMX8M=y
CONFIG_SYS_TEXT_BASE=0x40200000
CONFIG_SYS_MALLOC_LEN=0x2000000
CONFIG_SPL_GPIO=y
CONFIG_SPL_LIBCOMMON_SUPPORT=y
CONFIG_SPL_LIBGENERIC_SUPPORT=y
CONFIG_SYS_MEMTEST_START=0x40000000
CONFIG_SYS_MEMTEST_END=0x80000000
CONFIG_ENV_SIZE=0x2000
CONFIG_ENV_OFFSET=0xFFFFDE00
CONFIG_DM_GPIO=y
CONFIG_DEFAULT_DEVICE_TREE="imx8mm-verdin"
CONFIG_SPL_TEXT_BASE=0x7E1000
CONFIG_TARGET_VERDIN_IMX8MM=y
CONFIG_SPL_MMC=y
CONFIG_SPL_SERIAL=y
CONFIG_SPL_DRIVERS_MISC=y
CONFIG_SPL=y
CONFIG_IMX_BOOTAUX=y
CONFIG_LTO=y
CONFIG_DISTRO_DEFAULTS=y
CONFIG_SYS_LOAD_ADDR=0x48200000
CONFIG_FIT=y
CONFIG_FIT_EXTERNAL_OFFSET=0x3000
CONFIG_FIT_VERBOSE=y
CONFIG_SPL_LOAD_FIT=y
# CONFIG_USE_SPL_FIT_GENERATOR is not set
CONFIG_OF_SYSTEM_SETUP=y
CONFIG_BOOTDELAY=1
CONFIG_USE_PREBOOT=y
CONFIG_PREBOOT="test -n ${fdtfile} || setenv fdtfile imx8mm-verdin-${variant}-${fdt_board}.dtb"
CONFIG_LOG=y
# CONFIG_DISPLAY_BOARDINFO is not set
CONFIG_DISPLAY_BOARDINFO_LATE=y
CONFIG_BOARD_LATE_INIT=y
CONFIG_SPL_BOARD_INIT=y
CONFIG_SPL_SEPARATE_BSS=y
CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR=y
CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR=0x300
CONFIG_SPL_I2C=y
CONFIG_SPL_POWER=y
CONFIG_SPL_USB_HOST=y
CONFIG_SPL_USB_GADGET=y
CONFIG_SPL_USB_SDP_SUPPORT=y
CONFIG_SPL_WATCHDOG=y
CONFIG_SYS_PROMPT="Verdin iMX8MM # "
# CONFIG_BOOTM_NETBSD is not set
CONFIG_CMD_ASKENV=y
# CONFIG_CMD_EXPORTENV is not set
CONFIG_CRC32_VERIFY=y
CONFIG_CMD_MD5SUM=y
CONFIG_MD5SUM_VERIFY=y
CONFIG_CMD_MEMTEST=y
CONFIG_CMD_CLK=y
CONFIG_CMD_FUSE=y
CONFIG_CMD_GPIO=y
CONFIG_CMD_I2C=y
CONFIG_CMD_MMC=y
CONFIG_CMD_READ=y
CONFIG_CMD_USB=y
CONFIG_CMD_USB_MASS_STORAGE=y
CONFIG_CMD_BOOTCOUNT=y
CONFIG_CMD_CACHE=y
CONFIG_CMD_TIME=y
CONFIG_CMD_UUID=y
CONFIG_CMD_PMIC=y
CONFIG_CMD_REGULATOR=y
CONFIG_CMD_EXT4_WRITE=y
# CONFIG_ISO_PARTITION is not set
# CONFIG_SPL_EFI_PARTITION is not set
CONFIG_OF_CONTROL=y
CONFIG_SPL_OF_CONTROL=y
CONFIG_ENV_OVERWRITE=y
CONFIG_ENV_IS_IN_MMC=y
CONFIG_SYS_RELOC_GD_ENV_ADDR=y
CONFIG_SYS_MMC_ENV_PART=1
CONFIG_VERSION_VARIABLE=y
CONFIG_IP_DEFRAG=y
CONFIG_TFTP_BLOCKSIZE=4096
CONFIG_SPL_DM=y
CONFIG_BOOTCOUNT_LIMIT=y
CONFIG_BOOTCOUNT_ENV=y
CONFIG_SPL_CLK_IMX8MM=y
CONFIG_CLK_IMX8MM=y
CONFIG_CMD_FASTBOOT=y
CONFIG_FASTBOOT=y
CONFIG_USB_FUNCTION_FASTBOOT=y
CONFIG_FASTBOOT_BUF_ADDR=0x42800000
CONFIG_FASTBOOT_BUF_SIZE=0x40000000
CONFIG_FASTBOOT_FLASH=y
CONFIG_FASTBOOT_USB_DEV=0
CONFIG_FASTBOOT_UUU_SUPPORT=y
CONFIG_FASTBOOT_FLASH_MMC_DEV=0
CONFIG_FSL_FASTBOOT=y
CONFIG_GPIO_HOG=y
CONFIG_SPL_GPIO_HOG=y
CONFIG_MXC_GPIO=y
CONFIG_DM_I2C=y
CONFIG_MISC=y
CONFIG_I2C_EEPROM=y
CONFIG_SUPPORT_EMMC_BOOT=y
CONFIG_MMC_IO_VOLTAGE=y
CONFIG_SPL_MMC_IO_VOLTAGE=y
CONFIG_MMC_UHS_SUPPORT=y
CONFIG_SPL_MMC_UHS_SUPPORT=y
CONFIG_MMC_HS400_ES_SUPPORT=y
CONFIG_MMC_HS400_SUPPORT=y
CONFIG_SPL_MMC_HS400_SUPPORT=y
CONFIG_FSL_USDHC=y
CONFIG_PHY=y
CONFIG_PHYLIB=y
CONFIG_PHY_ADDR_ENABLE=y
CONFIG_PHY_MICREL=y
CONFIG_PHY_MICREL_KSZ90X1=y
CONFIG_PHY_FIXED=y
CONFIG_DM_ETH=y
CONFIG_DM_MDIO=y
CONFIG_FEC_MXC=y
CONFIG_MII=y
CONFIG_SPL_PHY=y
CONFIG_SPL_NOP_PHY=y
CONFIG_PINCTRL=y
CONFIG_SPL_PINCTRL=y
CONFIG_PINCTRL_IMX8M=y
CONFIG_POWER_DOMAIN=y
CONFIG_IMX8M_POWER_DOMAIN=y
CONFIG_DM_PMIC=y
CONFIG_SPL_DM_PMIC_PCA9450=y
CONFIG_DM_REGULATOR=y
CONFIG_DM_REGULATOR_FIXED=y
CONFIG_DM_REGULATOR_GPIO=y
CONFIG_DM_SERIAL=y
CONFIG_MXC_UART=y
CONFIG_SYSRESET=y
CONFIG_SPL_SYSRESET=y
CONFIG_SYSRESET_PSCI=y
CONFIG_SYSRESET_WATCHDOG=y
CONFIG_DM_THERMAL=y
CONFIG_IMX_TMU=y
CONFIG_USB=y
# CONFIG_SPL_DM_USB is not set
CONFIG_DM_USB_GADGET=y
CONFIG_USB_EHCI_HCD=y
# CONFIG_MXC_USB_OTG_HACTIVE is not set
CONFIG_USB_KEYBOARD=y
CONFIG_USB_HOST_ETHER=y
CONFIG_USB_GADGET=y
CONFIG_USB_GADGET_MANUFACTURER="FSL"
CONFIG_USB_GADGET_VENDOR_NUM=0x0525
CONFIG_USB_GADGET_PRODUCT_NUM=0xa4a5
CONFIG_CI_UDC=y
CONFIG_SDP_LOADADDR=0x40400000
CONFIG_IMX_WATCHDOG=y
CONFIG_HEXDUMP=y
CONFIG_OF_LIBFDT_OVERLAY=y
CONFIG_DEBUG=y
# CONFIG_DEBUG_UART is not set
CONFIG_SPL_LOG_MAX_LEVEL=7
CONFIG_LOGLEVEL=7
CONFIG_LOG_MAX_LEVEL=7
CONFIG_BOOTSTAGE=y
# CONFIG_BOARD_EARLY_INIT_F is not set
# CONFIG_BOARD_EARLY_INIT_R is not set

Below is the beginning of the UUU script in use:

uuu_version 1.4.43

SDP: boot -f images-xxxxx-mfg/imx-boot-verdin-imx8mm-xxxxx-sd.bin-flash_evk_emmc_fastboot
CFG: SDPU: -vid 0x0525 -pid 0xb4a4

SDPV: delay 1000
SDPV: write -f images-xxxxx-mfg/imx-boot-verdin-imx8mm-xxxxx-sd.bin-flash_evk_emmc_fastboot -skipspl
SDPV: jump

CFG: FB: -vid 0x0525 -pid 0x4000
CFG: FB: -vid 0x0525 -pid 0x4037
CFG: FB: -vid 0x0525 -pid 0x4039
CFG: FB: -vid 0x0525 -pid 0x403b
CFG: FB: -vid 0x0525 -pid 0x403c
...

Execution always stops after the jump. I’ve tried all sorts of things, but now I’m running out of ideas. What could be the likely cause for this?

Hi, I’m the Toradex AI Assistant. The Toradex Support team will follow up with you shortly!

Did you like my answer?

:+1: :-1:


Hello there!

To address the issue you’re encountering with the Verdin iMX8M Mini, it’s important to ensure that you’re using the correct U-Boot configuration and branch. Here’s a step-by-step guide to help you:

  1. U-Boot Git Branch: Make sure you are using the “toradex_imx_lf_v2024.04” branch. You can find more details in the Toradex documentation.

  2. U-Boot Configuration: The appropriate configuration for your module is “verdin-imx8mm_defconfig”. This is crucial for ensuring compatibility.

  3. Building the Boot Container: Use the following command to build the boot container with the correct parameters for the iMX8M Mini:

    $ make clean; make SOC=iMX8MM flash_evk_emmc_fastboot
    

    More information can be found here.

  4. Renaming the Output File: After building, rename the output file as follows:

    $ mv iMX8M/flash.bin iMX8M/imx-boot
    

    This step is also detailed in the documentation.

The error message “Header Tag is not an IMX image” suggests there might be an issue with the boot container format. By following these steps closely, you should be able to rebuild the boot container correctly and resolve the issue.

If you need further details on the build process or troubleshooting, the documentation links provided will be very helpful.

Best regards,
Toradex AI Assistant.

Please, also check if these links can help you solve your problem:

https://developer.toradex.com/linux-bsp/os-development/build-u-boot-and-linux-kernel-from-source-code/build-u-boot/build-u-boot-for-nxp-imx8m-mini-plus-modules/#build-u-boot-soc-specific-steps.