Configuring Proper Device Tree for Ivy Carrier Board on Verdin iMX8MM in Yocto

Hello Toradex Support,

I’m using a Verdin iMX8M Mini SoM on an Ivy carrier board, and I want Yocto to automatically select the correct device tree (imx8mm-verdin-wifi-ivy.dtb) without having to stop at U-Boot and manually set fdtfile.

My current machine configuration is based on verdin-imx8mm.conf, with this :

#@TYPE: Machine
#@NAME: Toradex Verdin iMX8M Mini
#@SOC: i.MX8MM
#@DESCRIPTION: Machine configuration for Toradex Verdin iMX8M Mini SoM
#@MAINTAINER: Max Krummenacher <max.krummenacher@toradex.com>

MACHINE_NAME = "Verdin-iMX8MM"

MACHINEOVERRIDES =. "tdx:mx8:mx8m:mx8mm:"

MACHINE_EXTRA_RRECOMMENDS:append = " mwifiexconf"

IMX_DEFAULT_BSP = "nxp"
IMX_DEFAULT_BSP:upstream = "mainline"

require conf/machine/include/imx-base.inc
# override imx-base.inc which sets this to cortexa53-crypto
DEFAULTTUNE:mx8mm-generic-bsp = "armv8a-crypto"
require conf/machine/include/arm/armv8a/tune-cortexa53.inc

# Don't include kernels in standard images
RRECOMMENDS:${KERNEL_PACKAGE_NAME}-base = ""

KERNEL_DTB_PREFIX = "freescale/"
KERNEL_DEVICETREE = " \
    ${KERNEL_DTB_PREFIX}imx8mm-verdin-wifi-ivy.dtb \
"
KERNEL_IMAGETYPE:mx8-generic-bsp = "Image.gz"

UBOOT_CONFIG ??= "sd"
UBOOT_CONFIG[sd] = "verdin-imx8mm_defconfig,sdcard"
SPL_BINARY = "spl/u-boot-spl.bin"

UBOOT_DTB_LOADADDRESS:mx8mm-generic-bsp = "0x50200000"
UBOOT_DTBO_LOADADDRESS:mx8mm-generic-bsp = "0x50240000"
UBOOT_ENTRYPOINT:mx8mm-generic-bsp  = "0x48200000"
UBOOT_RD_LOADADDRESS = "0x52300000"

# Set u-boot DTB
UBOOT_DTB_NAME = "imx8mm-verdin-wifi-dev.dtb"

# Set DDR FIRMWARE
DDR_FIRMWARE_NAME = " \
    lpddr4_pmu_train_1d_imem.bin \
    lpddr4_pmu_train_1d_dmem.bin \
    lpddr4_pmu_train_2d_imem.bin \
    lpddr4_pmu_train_2d_dmem.bin \
"

ATF_PLATFORM = "imx8mm"
SOC_ATF_BOOT_UART_BASE:verdin-imx8mm = "0x30860000"

BOOT_SPACE = "65536"

# Set imx-mkimage boot target
IMXBOOT_TARGETS = "flash_evk_emmc_fastboot"
IMX_BOOT_SOC_TARGET = "iMX8MM"

IMAGE_BOOT_FILES:append = " boot.scr-${MACHINE};boot.scr"
WKS_FILE_DEPENDS:append = " u-boot-default-script"
PREFERRED_PROVIDER_u-boot-default-script = "u-boot-distro-boot"

LOADADDR = ""
UBOOT_SUFFIX = "bin"
UBOOT_MAKE_TARGET = ""
IMX_BOOT_SEEK = "33"

SERIAL_CONSOLES = "115200;ttymxc0"

MACHINE_FEATURES += "3g bluetooth alsa ext2 pci screen touchscreen tpm2 usbgadget usbhost vfat wifi"

PREFERRED_PROVIDER_virtual/kernel = "linux-toradex"
PREFERRED_PROVIDER_virtual/kernel:preempt-rt = "linux-toradex"
PREFERRED_PROVIDER_virtual/kernel:use-mainline-bsp = "linux-toradex-upstream"
PREFERRED_VERSION_linux-toradex-upstream = "6.6%"
PREFERRED_PROVIDER_virtual/kernel:use-mainline-bsp:preempt-rt = "linux-toradex-upstream-rt"
PREFERRED_VERSION_linux-toradex-upstream-rt = "6.6%"
PREFERRED_PROVIDER_virtual/dtb:use-mainline-bsp = "device-tree-overlays-mainline"
PREFERRED_VERSION_linux-imx-headers = "6.6"

IMX_DEFAULT_BOOTLOADER = "u-boot-toradex"
# variables to control imx-boot with u-boot
ATF_LOAD_ADDR = "0x920000"
IMX_EXTRA_FIRMWARE = "firmware-imx-8m"
TEE_LOAD_ADDR = "0xbe000000"
UBOOT_MAKE_TARGET:use-mainline-bsp = "all"

# handle machine firmware
MACHINE_FIRMWARE:append = " linux-firmware-ath10k linux-firmware-imx-sdma-imx7d"
MACHINE_FIRMWARE:append = " linux-firmware-sd8997"
MACHINE_FIRMWARE:append = " firmware-imx-vpu-imx8"

BOARD_TYPE = "verdin"

IMAGE_CLASSES:append = " image_type_tezi"
IMAGE_FSTYPES += "teziimg"

UBOOT_BINARY_TEZI_EMMC = "imx-boot"
OFFSET_BOOTROM_PAYLOAD = "2"

TEZI_EXTERNAL_KERNEL_DEVICETREE_BOOT = "verdin-imx8mm_dsi-to-hdmi_overlay.dtbo verdin-imx8mm_spidev_overlay.dtbo"

TORADEX_PRODUCT_IDS = "0055 0057 0059 0060 0068 0086 0087 0090 0216"
TORADEX_PRODUCT_IDS[0055] = "imx8mm-verdin-wifi-v1.1-dev.dtb"
TORADEX_PRODUCT_IDS[0057] = "imx8mm-verdin-nonwifi-v1.1-dev.dtb"
TORADEX_PRODUCT_IDS[0059] = "imx8mm-verdin-nonwifi-v1.1-dev.dtb"
TORADEX_PRODUCT_IDS[0060] = "imx8mm-verdin-wifi-v1.1-dev.dtb"
TORADEX_PRODUCT_IDS[0068] = "imx8mm-verdin-wifi-v1.1-dev.dtb"
TORADEX_PRODUCT_IDS[0086] = "imx8mm-verdin-nonwifi-v1.1-dev.dtb"
TORADEX_PRODUCT_IDS[0087] = "imx8mm-verdin-nonwifi-v1.1-dev.dtb"
TORADEX_PRODUCT_IDS[0090] = "imx8mm-verdin-wifi-v1.1-dev.dtb"
TORADEX_PRODUCT_IDS[0216] = "imx8mm-verdin-wifi-v1.1-dev.dtb"

From my understanding, TORADEX_PRODUCT_IDS is used by Toradex Easy Installer and U-Boot to select the right DTB for the detected hardware.

Could you clarify:

  1. What is the recommended way to set TORADEX_PRODUCT_IDS so that the Ivy carrier board always boots with imx8mm-verdin-wifi-ivy.dtb?
  2. Should all entries in TORADEX_PRODUCT_IDS that match my SoM SKU be mapped to the Ivy DTB, or is there a more targeted approach?
  3. Do I also need to set UBOOT_DTB_NAME to the Ivy DTB to make this work in Yocto, or will TORADEX_PRODUCT_IDS alone override it?

My goal is to avoid manual setenv fdtfile in U-Boot and have the correct DTB applied automatically for the Ivy carrier board in all cases.

Thank you for your guidance!
Alvaro

Hi, I’m the Toradex AI Assistant.

I might make mistakes. Our support team will step in if needed. If I answered your question, please tick the “Solution” checkbox. For follow-up questions to me, please use @ToradexAI in your post.

Did you like my answer? :+1: :-1:


Hello Alvaro,

Thank you for the detailed description of your setup and requirements. I’ll clarify how to configure the automatic selection of the correct device tree for the Verdin iMX8M Mini on your Ivy carrier board.


1. What is the recommended way to set TORADEX_PRODUCT_IDS so that the Ivy carrier board always boots with imx8mm-verdin-wifi-ivy.dtb?

You should update your TORADEX_PRODUCT_IDS mappings so that every product ID (SKU) for the SoMs you intend to use on the Ivy carrier board points to imx8mm-verdin-wifi-ivy.dtb. This ensures that, when the hardware SKU is detected during boot (by U-Boot or Easy Installer), the Ivy DTB is selected automatically.

Example:

TORADEX_PRODUCT_IDS[0055] = "imx8mm-verdin-wifi-ivy.dtb"
TORADEX_PRODUCT_IDS[0060] = "imx8mm-verdin-wifi-ivy.dtb"
# ...repeat as appropriate for each SKU you are using with Ivy

If you only ever use Wi-Fi modules, you don’t need to include non-Wi-Fi variants, but for maximum robustness, map all relevant SKUs accordingly.


2. Should all entries in TORADEX_PRODUCT_IDS that match my SoM SKU be mapped to the Ivy DTB, or is there a more targeted approach?

Yes, you should map all SKUs you intend to use with the Ivy carrier board to the correct Ivy DTB.

  • If you have an environment where a mix of carrier boards is used with the same image, you may want to use a more sophisticated mechanism (e.g., runtime detection or a separate image per carrier). However, for a dedicated Ivy image, set all SKUs that may be used on Ivy to the Ivy DTB.
  • If you want to guarantee that no matter which Verdin iMX8M Mini SKU is inserted, the Ivy DTB will be used, then simply update all relevant entries as shown above.

3. Do I also need to set UBOOT_DTB_NAME to the Ivy DTB to make this work in Yocto, or will TORADEX_PRODUCT_IDS alone override it?

For the automatic device tree selection mechanism to work, you must update both:

  • TORADEX_PRODUCT_IDS ensures the correct DTB is selected at runtime based on the detected SoM.
  • UBOOT_DTB_NAME is used during the build and packaging stage, ensuring the correct DTB is included as the build default.

Best practice:
Set both to "imx8mm-verdin-wifi-ivy.dtb" to ensure full alignment and to avoid inconsistencies between build-time and runtime behavior.

UBOOT_DTB_NAME = "imx8mm-verdin-wifi-ivy.dtb"
TORADEX_PRODUCT_IDS[0055] = "imx8mm-verdin-wifi-ivy.dtb"
TORADEX_PRODUCT_IDS[0060] = "imx8mm-verdin-wifi-ivy.dtb"
# ...and so on for each SoM variant you use.

This will prevent the need for any manual setting of fdtfile in U-Boot, and the correct DTB will be used by default.


Summary Checklist:

  • Map all SoM SKUs you’ll use with Ivy to the Ivy DTB in TORADEX_PRODUCT_IDS.
  • Set UBOOT_DTB_NAME to the Ivy DTB for build correctness.
  • You do not need to manually set fdtfile at U-Boot prompt.

More info:

Let me know if you need an example configuration file or further explanation!

Best regards,
Toradex AI Assistant.

@ToradexAI
I tried this solution

# Force default device tree to Ivy board version
UBOOT_DTB_NAME = "imx8mm-verdin-wifi-ivy.dtb"

# Force U-Boot to set fdtfile automatically
# UBOOT_ENV:append = " fdtfile=imx8mm-verdin-wifi-ivy.dtb"

TORADEX_PRODUCT_IDS = "0055 0057 0059 0060 0068 0086 0087 0090"

# Optional: If you want to ensure Toradex product ID mapping always uses Ivy DTB
TORADEX_PRODUCT_IDS[0055] = "imx8mm-verdin-wifi-ivy.dtb"
TORADEX_PRODUCT_IDS[0057] = "imx8mm-verdin-wifi-ivy.dtb"
TORADEX_PRODUCT_IDS[0059] = "imx8mm-verdin-wifi-ivy.dtb"
TORADEX_PRODUCT_IDS[0060] = "imx8mm-verdin-wifi-ivy.dtb"
TORADEX_PRODUCT_IDS[0068] = "imx8mm-verdin-wifi-ivy.dtb"
TORADEX_PRODUCT_IDS[0086] = "imx8mm-verdin-wifi-ivy.dtb"
TORADEX_PRODUCT_IDS[0087] = "imx8mm-verdin-wifi-ivy.dtb"
TORADEX_PRODUCT_IDS[0090] = "imx8mm-verdin-wifi-ivy.dtb"


but now my device is not booting I’m getting no image in my screen

Thanks for your response.

Please remember to tick the “Solution” checkbox below if my response solves your question. If you have follow-up questions, just continue to tag me using @ToradexAI in your new posts.

Did you like my answer? :+1: :-1:


Hello Alvaro,

Thank you for your update and for testing the changes. Let’s walk through a few things you can check to help debug the issue:


1. Confirm DTB Existence

First, make sure that the device tree file imx8mm-verdin-wifi-ivy.dtb is really present in both:

  • The deployed /boot/ partition of your root filesystem on the target device.
  • The locations referenced by U-Boot at boot (typically /boot/ or the root of the boot partition).

If the DTB is missing or misspelled, U-Boot will fail and you may see no output after U-Boot hands off to the kernel.


2. Screen Output—Possible Video Configuration

If you are getting U-Boot output but the screen goes blank after the kernel starts, the issue might be a mismatch between the display interface and panel configuration expected by the DTB and what is physically connected. Double-check that:

  • The Ivy device tree supports your display type (HDMI, DSI, or parallel LCD).
  • The carrier board and panel wiring matches your expected configuration.

You may need to briefly connect via serial/UART debug to verify boot progress and kernel messages.

Refer to:


3. U-Boot Environment

It’s not recommended to force fdtfile directly via U-Boot environment within Yocto unless absolutely necessary. The mapping using TORADEX_PRODUCT_IDS should be sufficient as long as the DTB is present.

If you’ve previously set fdtfile persistently in U-Boot and it points to a non-existent DTB, this could cause problems. You can check and clear this variable in U-Boot:

printenv fdtfile
setenv fdtfile
saveenv

4. Validate Your Device Tree Build

Make sure Yocto is actually building and installing imx8mm-verdin-wifi-ivy.dtb by checking your deploy directory (typically tmp/deploy/images/<machine>/).

If the device tree is not being built, double-check your KERNEL_DEVICETREE and kernel recipe (e.g., linux-toradex, meta-toradex-nxp) includes this DTB.


5. Recovery Steps

  • Connect via UART debug to see console/log output.
  • If you have serial console output, see where the boot process is stopping (U-Boot or kernel).
  • If unable to recover, you can reflash the device using the Toradex Easy Installer and a known-good image: Toradex Easy Installer.

Quick Diagnostic Steps:

  1. Confirm DTB presence and spelling.
  2. Check serial/UART log for kernel panic or DTB not found message.
  3. Ensure display interface matches the DTB configuration.
  4. Reset any custom fdtfile U-Boot env.
  5. If needed, revert to the previous working TORADEX_PRODUCT_IDS and UBOOT_DTB_NAME and test.

Please let me know the result of these checks, or share serial console output if possible, and I can suggest specific next steps!

Best regards,
Toradex AI Assistant.

@ToradexAI
During the process, I noticed that there is no board-specific device tree for Ivy under:

arch/arm/dts/imx8mm-verdin-ivy.dts
arch/arm/dts/imx8mm-verdin-u-boot.dtsi

in U-Boot from the toradex_imx_lf_v2024.04 source. Could you please confirm that ?

Without these files, it seems I would need to configure U-Boot manually for the Ivy carrier board.

Could you please confirm:

  1. If an Ivy-specific U-Boot device tree is available in another branch or release, or
  2. If I should create a new .dts and .dtsi for Ivy based on a similar Verdin carrier board (e.g., Dahlia or Development board)?

Any guidance or example configurations would be greatly appreciated.

Thank you,

Thanks for your response.

Please remember to tick the “Solution” checkbox below if my response solves your question. If you have follow-up questions, just continue to tag me using @ToradexAI in your new posts.

Did you like my answer? :+1: :-1:


Hello Alvaro,

Thank you for your careful investigation!

You are correct: the U-Boot device tree sources in the toradex_imx_lf_v2024.04 branch do not currently provide an Ivy-specific board file, such as arch/arm/dts/imx8mm-verdin-ivy.dts. By design, Toradex uses a generic SoM-level device tree in U-Boot (e.g., imx8mm-verdin-wifi-dev.dtb), which covers the basic configuration required for U-Boot to load the OS image, but does not configure board-level peripherals. U-Boot does not usually handle full carrier-board-specific initializations; those are expected to be handled by the Linux kernel’s DTB.

Detailed answers to your questions:


1. Is an Ivy-specific U-Boot device tree available in another branch or release?

  • As of now, no, there is not an Ivy-specific U-Boot device tree (imx8mm-verdin-ivy.dts) in the official Toradex U-Boot repositories. This is intentional because U-Boot typically configures SoM-level resources only.
  • The standard approach is to use imx8mm-verdin-wifi-dev.dtb for U-Boot, which works across various carrier boards.
  • Reference: Device Tree Overview – U-Boot vs Linux Device Trees

2. Should you create a new .dts/.dtsi for Ivy in U-Boot?

  • Usually, there’s no need to do this unless you require U-Boot to directly interact with carrier board hardware (which is uncommon for most workflows on Verdin modules).
  • If you have a use case where U-Boot must handle Ivy-specific peripherals (for example, U-Boot logo display on an Ivy-connected display, or device enablement during boot), you can create a new Ivy U-Boot DT file based on another carrier board (e.g., Dahlia or Dev board). Typically, this involves:
    1. Copying an existing file such as imx8mm-verdin-dahlia-u-boot.dtsi and imx8mm-verdin-wifi-dev.dts.
    2. Modifying it as needed for your Ivy board peripherals.
    3. Adding your new DT to the U-Boot build system.
  • But for most use cases (where you do not require carrier-board-specific initialization in U-Boot), this step is unnecessary.

Summary:

  • For booting Linux with proper Ivy support, you need an Ivy-specific Linux device tree (imx8mm-verdin-wifi-ivy.dtb - which you already have) and correct TORADEX_PRODUCT_IDS mapping.
  • It is NOT required or recommended to set an Ivy-specific device tree for U-Boot.
  • U-Boot can continue to use imx8mm-verdin-wifi-dev.dtb as the DTB as long as Linux gets the correct Ivy DTB to handle all board-level hardware.

References & More Info:


If you describe what function you need U-Boot to perform on the Ivy board, I can provide a concrete example or further advise if a custom U-Boot DTB is warranted.

Best regards,
Toradex AI Assistant.

Hi @AYJF

I see you have been going round and around with our AI bot. I think there might be an easier way depending on exactly what your needs are. Do you want the proper device tree embedded into your build or is it ok to manually add it to the UBoot environment as a one-time step rather than every boot?

I’m mobile at the moment so I cannot test but I’ll be back in my office in just a bit and can test better and provide a proper answer if I understand your objective.

Drew

based on that. How my verdin-imx8mm.conf should look like ? I want Yocto to automatically select the correct device tree (imx8mm-verdin-wifi-ivy.dtb) without having to stop at U-Boot and manually set fdtfile.

this is the default .conf file

#@TYPE: Machine
#@NAME: Toradex Verdin iMX8M Mini
#@SOC: i.MX8MM
#@DESCRIPTION: Machine configuration for Toradex Verdin iMX8M Mini SoM
#@MAINTAINER: Max Krummenacher <max.krummenacher@toradex.com>

MACHINE_NAME = "Verdin-iMX8MM"

MACHINEOVERRIDES =. "tdx:mx8:mx8m:mx8mm:"

MACHINE_EXTRA_RRECOMMENDS:append = " mwifiexconf"

IMX_DEFAULT_BSP = "nxp"
IMX_DEFAULT_BSP:upstream = "mainline"

require conf/machine/include/imx-base.inc
# override imx-base.inc which sets this to cortexa53-crypto
DEFAULTTUNE:mx8mm-generic-bsp = "armv8a-crypto"
require conf/machine/include/arm/armv8a/tune-cortexa53.inc

# Don't include kernels in standard images
RRECOMMENDS:${KERNEL_PACKAGE_NAME}-base = ""

KERNEL_DTB_PREFIX = "freescale/"
KERNEL_DEVICETREE = " \
    ${KERNEL_DTB_PREFIX}imx8mm-verdin-nonwifi-dahlia.dtb \
    ${KERNEL_DTB_PREFIX}imx8mm-verdin-nonwifi-dev.dtb \
    ${KERNEL_DTB_PREFIX}imx8mm-verdin-nonwifi-ivy.dtb \
    ${KERNEL_DTB_PREFIX}imx8mm-verdin-nonwifi-mallow.dtb \
    ${KERNEL_DTB_PREFIX}imx8mm-verdin-nonwifi-yavia.dtb \
    ${KERNEL_DTB_PREFIX}imx8mm-verdin-wifi-dahlia.dtb \
    ${KERNEL_DTB_PREFIX}imx8mm-verdin-wifi-dev.dtb \
    ${KERNEL_DTB_PREFIX}imx8mm-verdin-wifi-ivy.dtb \
    ${KERNEL_DTB_PREFIX}imx8mm-verdin-wifi-mallow.dtb \
    ${KERNEL_DTB_PREFIX}imx8mm-verdin-wifi-yavia.dtb \
"
KERNEL_IMAGETYPE:mx8-generic-bsp = "Image.gz"

UBOOT_CONFIG ??= "sd"
UBOOT_CONFIG[sd] = "verdin-imx8mm_defconfig,sdcard"
SPL_BINARY = "spl/u-boot-spl.bin"

UBOOT_DTB_LOADADDRESS:mx8mm-generic-bsp = "0x50200000"
UBOOT_DTBO_LOADADDRESS:mx8mm-generic-bsp = "0x50240000"
UBOOT_ENTRYPOINT:mx8mm-generic-bsp  = "0x48200000"
UBOOT_RD_LOADADDRESS = "0x52300000"

# Set u-boot DTB
UBOOT_DTB_NAME = "imx8mm-verdin-wifi-dev.dtb"

# Set DDR FIRMWARE
DDR_FIRMWARE_NAME = " \
    lpddr4_pmu_train_1d_imem.bin \
    lpddr4_pmu_train_1d_dmem.bin \
    lpddr4_pmu_train_2d_imem.bin \
    lpddr4_pmu_train_2d_dmem.bin \
"

ATF_PLATFORM = "imx8mm"
SOC_ATF_BOOT_UART_BASE:verdin-imx8mm = "0x30860000"

BOOT_SPACE = "65536"

# Set imx-mkimage boot target
IMXBOOT_TARGETS = "flash_evk_emmc_fastboot"
IMX_BOOT_SOC_TARGET = "iMX8MM"

IMAGE_BOOT_FILES:append = " boot.scr-${MACHINE};boot.scr"
WKS_FILE_DEPENDS:append = " u-boot-default-script"
PREFERRED_PROVIDER_u-boot-default-script = "u-boot-distro-boot"

LOADADDR = ""
UBOOT_SUFFIX = "bin"
UBOOT_MAKE_TARGET = ""
IMX_BOOT_SEEK = "33"

SERIAL_CONSOLES = "115200;ttymxc0"

MACHINE_FEATURES += "3g bluetooth alsa ext2 pci screen touchscreen tpm2 usbgadget usbhost vfat wifi"

PREFERRED_PROVIDER_virtual/kernel = "linux-toradex"
PREFERRED_PROVIDER_virtual/kernel:preempt-rt = "linux-toradex"
PREFERRED_PROVIDER_virtual/kernel:use-mainline-bsp = "linux-toradex-upstream"
PREFERRED_VERSION_linux-toradex-upstream = "6.6%"
PREFERRED_PROVIDER_virtual/kernel:use-mainline-bsp:preempt-rt = "linux-toradex-upstream-rt"
PREFERRED_VERSION_linux-toradex-upstream-rt = "6.6%"
PREFERRED_PROVIDER_virtual/dtb:use-mainline-bsp = "device-tree-overlays-mainline"
PREFERRED_VERSION_linux-imx-headers = "6.6"

IMX_DEFAULT_BOOTLOADER = "u-boot-toradex"
# variables to control imx-boot with u-boot
ATF_LOAD_ADDR = "0x920000"
IMX_EXTRA_FIRMWARE = "firmware-imx-8m"
TEE_LOAD_ADDR = "0xbe000000"
UBOOT_MAKE_TARGET:use-mainline-bsp = "all"

# handle machine firmware
MACHINE_FIRMWARE:append = " linux-firmware-ath10k linux-firmware-imx-sdma-imx7d"
MACHINE_FIRMWARE:append = " linux-firmware-sd8997"
MACHINE_FIRMWARE:append = " firmware-imx-vpu-imx8"

BOARD_TYPE = "verdin"

IMAGE_CLASSES:append = " image_type_tezi"
IMAGE_FSTYPES += "teziimg"

UBOOT_BINARY_TEZI_EMMC = "imx-boot"
OFFSET_BOOTROM_PAYLOAD = "2"

TEZI_EXTERNAL_KERNEL_DEVICETREE_BOOT = "verdin-imx8mm_dsi-to-hdmi_overlay.dtbo verdin-imx8mm_spidev_overlay.dtbo"

TORADEX_PRODUCT_IDS = "0055 0057 0059 0060 0068 0086 0087 0090 0216"
TORADEX_PRODUCT_IDS[0055] = "imx8mm-verdin-wifi-v1.1-dev.dtb"
TORADEX_PRODUCT_IDS[0057] = "imx8mm-verdin-nonwifi-v1.1-dev.dtb"
TORADEX_PRODUCT_IDS[0059] = "imx8mm-verdin-nonwifi-v1.1-dev.dtb"
TORADEX_PRODUCT_IDS[0060] = "imx8mm-verdin-wifi-v1.1-dev.dtb"
TORADEX_PRODUCT_IDS[0068] = "imx8mm-verdin-wifi-v1.1-dev.dtb"
TORADEX_PRODUCT_IDS[0086] = "imx8mm-verdin-nonwifi-v1.1-dev.dtb"
TORADEX_PRODUCT_IDS[0087] = "imx8mm-verdin-nonwifi-v1.1-dev.dtb"
TORADEX_PRODUCT_IDS[0090] = "imx8mm-verdin-wifi-v1.1-dev.dtb"
TORADEX_PRODUCT_IDS[0216] = "imx8mm-verdin-wifi-v1.1-dev.dtb"

Hi @drew.tx ,

Thanks for your response. I saw it when I was posting my last response,. My goal is to have the proper device tree for the Verdin iMX8MM + Ivy carrier board embedded into the Yocto / U-Boot build, so it’s automatically available without manual intervention at boot cause I’m currently struggling with UART debug on the Ivy carrier board. According to the datasheet, J1 and J17 are listed as UART connections for the Linux console.

  • Can I use these for the UART console instead of the USB-C port?
  • What are the exact pin assignments for J1 and J17? They aren’t described in the datasheet.
  • I just want to confirm before connecting anything, as I’d prefer not to fry the board — I’m more of a software developer than a hardware guy.

Thanks for clarifying both points and for your response,
best regards
Alvaro

Hi Alvaro,

Ultimately to change the default DTB at the build level, you need to patch the UBoot recipe. You can see an example of how do that here.

As for the UART, the Ivy board does not have a UART console populated. My colleague @bruno.tx shows the details in this ticket. I’m working internally to see if we can get this info onto our developer site and maybe into the datasheet so others can find it easily.

Drew

Request #39966 “Re: Toradex Support - Ticket#337…” was closed and merged into this request. Last comment in request #39966:

but now my device is not booting I’m getting no image on my screen

What are you getting on the debug UART?

Alexander Samutin
Toradex

Hi @drew.tx

thanks for getting back to me . After take a look to the link you provide me I was able to get uart console working. I set the

setenv fdtfile imx8mm-verdin-wifi-ivy.dtb
saveenv

and I double check after reboot using printenv , fdtfile was correctly set but now I’m not getting any video output in my 7" DSI Capacitive Touch Display.

my machine.conf file is


MACHINE_NAME = "Verdin-iMX8MM"

MACHINEOVERRIDES =. "mx8:mx8m:mx8mm:"

MACHINE_EXTRA_RRECOMMENDS:append = " mwifiexconf"

IMX_DEFAULT_BSP = "nxp"
IMX_DEFAULT_BSP:upstream = "mainline"

require conf/machine/include/imx-base.inc
# override imx-base.inc which sets this to cortexa53-crypto
DEFAULTTUNE:mx8mm-generic-bsp = "armv8a-crypto"
require conf/machine/include/arm/armv8a/tune-cortexa53.inc

# Don't include kernels in standard images
RRECOMMENDS:${KERNEL_PACKAGE_NAME}-base = ""

KERNEL_DTB_PREFIX = "freescale/"
KERNEL_DEVICETREE = " \
    ${KERNEL_DTB_PREFIX}imx8mm-verdin-nonwifi-dahlia.dtb \
    ${KERNEL_DTB_PREFIX}imx8mm-verdin-nonwifi-dev.dtb \
    ${KERNEL_DTB_PREFIX}imx8mm-verdin-nonwifi-ivy.dtb \
    ${KERNEL_DTB_PREFIX}imx8mm-verdin-nonwifi-mallow.dtb \
    ${KERNEL_DTB_PREFIX}imx8mm-verdin-nonwifi-yavia.dtb \
    ${KERNEL_DTB_PREFIX}imx8mm-verdin-wifi-dahlia.dtb \
    ${KERNEL_DTB_PREFIX}imx8mm-verdin-wifi-dev.dtb \
    ${KERNEL_DTB_PREFIX}imx8mm-verdin-wifi-ivy.dtb \
    ${KERNEL_DTB_PREFIX}imx8mm-verdin-wifi-mallow.dtb \
    ${KERNEL_DTB_PREFIX}imx8mm-verdin-wifi-yavia.dtb \
"
KERNEL_IMAGETYPE:mx8-generic-bsp = "Image.gz"

UBOOT_CONFIG ??= "sd"
UBOOT_CONFIG[sd] = "verdin-imx8mm_defconfig,sdcard"
SPL_BINARY = "spl/u-boot-spl.bin"

UBOOT_DTB_LOADADDRESS:mx8mm-generic-bsp = "0x50200000"
UBOOT_DTBO_LOADADDRESS:mx8mm-generic-bsp = "0x50240000"
UBOOT_ENTRYPOINT:mx8mm-generic-bsp  = "0x48200000"
UBOOT_RD_LOADADDRESS = "0x52300000"

# Set u-boot DTB
UBOOT_DTB_NAME = "imx8mm-verdin-wifi-dev.dtb"
# UBOOT_DTB_NAME = "imx8mm-verdin-wifi-ivy.dtb"

# Set DDR FIRMWARE
DDR_FIRMWARE_NAME = " \
    lpddr4_pmu_train_1d_imem.bin \
    lpddr4_pmu_train_1d_dmem.bin \
    lpddr4_pmu_train_2d_imem.bin \
    lpddr4_pmu_train_2d_dmem.bin \
"

ATF_PLATFORM = "imx8mm"
SOC_ATF_BOOT_UART_BASE:verdin-imx8mm = "0x30860000"

BOOT_SPACE = "65536"

# Set imx-mkimage boot target
IMXBOOT_TARGETS = "flash_evk_emmc_fastboot"
IMX_BOOT_SOC_TARGET = "iMX8MM"

IMAGE_BOOT_FILES:append = " boot.scr-${MACHINE};boot.scr"
WKS_FILE_DEPENDS:append = " u-boot-default-script"
PREFERRED_PROVIDER_u-boot-default-script = "u-boot-distro-boot"

LOADADDR = ""
UBOOT_SUFFIX = "bin"
UBOOT_MAKE_TARGET = ""
IMX_BOOT_SEEK = "33"

SERIAL_CONSOLES = "115200;ttymxc0"

MACHINE_FEATURES += "3g bluetooth alsa ext2 pci screen touchscreen tpm2 usbgadget usbhost vfat wifi"

PREFERRED_PROVIDER_virtual/kernel = "linux-toradex"
PREFERRED_PROVIDER_virtual/kernel:preempt-rt = "linux-toradex"
PREFERRED_PROVIDER_virtual/kernel:use-mainline-bsp = "linux-toradex-upstream"
PREFERRED_VERSION_linux-toradex-upstream = "6.6%"
PREFERRED_PROVIDER_virtual/kernel:use-mainline-bsp:preempt-rt = "linux-toradex-upstream-rt"
PREFERRED_VERSION_linux-toradex-upstream-rt = "6.6%"
PREFERRED_PROVIDER_virtual/dtb:use-mainline-bsp = "device-tree-overlays-mainline"
PREFERRED_VERSION_linux-imx-headers = "6.6"

IMX_DEFAULT_BOOTLOADER = "u-boot-toradex"
# variables to control imx-boot with u-boot
ATF_LOAD_ADDR = "0x920000"
IMX_EXTRA_FIRMWARE = "firmware-imx-8m"
TEE_LOAD_ADDR = "0xbe000000"
UBOOT_MAKE_TARGET:use-mainline-bsp = "all"

# handle machine firmware
MACHINE_FIRMWARE:append = " linux-firmware-ath10k linux-firmware-imx-sdma-imx7d"
MACHINE_FIRMWARE:append = " linux-firmware-sd8997"
MACHINE_FIRMWARE:append = " firmware-imx-vpu-imx8"

BOARD_TYPE = "verdin"

IMAGE_CLASSES:append = " image_type_tezi"
IMAGE_FSTYPES += "teziimg"

UBOOT_BINARY_TEZI_EMMC = "imx-boot"
OFFSET_BOOTROM_PAYLOAD = "2"

TEZI_EXTERNAL_KERNEL_DEVICETREE_BOOT = "verdin-imx8mm_spidev_overlay.dtbo verdin-imx8mm_panel-cap-touch-7inch-dsi_overlay.dtbo"

TORADEX_PRODUCT_IDS = "0055 0057 0059 0060 0068 0086 0087 0090"
TORADEX_PRODUCT_IDS[0055] = "imx8mm-verdin-wifi-v1.1-dev.dtb"
TORADEX_PRODUCT_IDS[0057] = "imx8mm-verdin-nonwifi-v1.1-dev.dtb"
TORADEX_PRODUCT_IDS[0059] = "imx8mm-verdin-nonwifi-v1.1-dev.dtb"
TORADEX_PRODUCT_IDS[0060] = "imx8mm-verdin-wifi-v1.1-dev.dtb"
TORADEX_PRODUCT_IDS[0068] = "imx8mm-verdin-wifi-v1.1-dev.dtb"
TORADEX_PRODUCT_IDS[0086] = "imx8mm-verdin-nonwifi-v1.1-dev.dtb"
TORADEX_PRODUCT_IDS[0087] = "imx8mm-verdin-nonwifi-v1.1-dev.dtb"
TORADEX_PRODUCT_IDS[0090] = "imx8mm-verdin-wifi-v1.1-dev.dtb"

and I’m getting this error on debug terminal

b2qt-verdin-imx8mm login: [   23.070286] imx-drm display-subsystem: bound imx-lcdif-crtc.0 (ops 0xffffffc08)
[   23.078334] imx_sec_dsim_drv 32e10000.mipi_dsi: version number is 0x1060200                              
[   23.085433] [drm:drm_bridge_attach] *ERROR* failed to attach bridge /soc@0/bus@32c00000/mipi_dsi@32e10007
[   23.097159] imx_sec_dsim_drv 32e10000.mipi_dsi: Failed to attach bridge: 32e10000.mipi_dsi               
[   23.105504] imx_sec_dsim_drv 32e10000.mipi_dsi: failed to bind sec dsim bridge: -517                     
[   23.126387] platform 32e10000.mipi_dsi: deferred probe pending                                           
[   23.132274] platform panel-lvds: deferred probe pending                                                  
[   23.137526] i2c 1-002c: deferred probe pending    

error came from verdin-imx8mm_panel-cap-touch-7inch-dsi_overlay.dts

this is my screen device

High Brightness IPS 7.0″ TFT LCD display 1024x600px with Capacitive Touchscreen, MIPI DSI – RVT70HSDNWC00

Hi Alvaro,

I’m not sure modifying the machine conf file is the right approach here. It may work but I’ve obviously not tested your exact config. The diffs from the stock file are not too concerning but I wonder if we should take a step back and try with the default conf file.

My understanding is you have three main concerns:

  1. Getting the console to work. Unless you added a transceiver to your board, I’m not sure how you got it working. My understanding is that the Ivy board does not have that part populated and if you really need it then you need to follow the instructions in this post. What port are you connecting to when you got this working? Can you share a pic of your setup?

  2. Setting the default dtb. As you noticed you can set fdtfile in the uboot environment and save it, then the PREBOOT command will take care of it. If you want to have it set in the default image, the way to do that is documented here.

  3. Getting the Riverdi 7" DSI display to work. Was it working before you changed the uboot fdtfile variable? The basic way to handle this is documented here for the on-device workflow and here for doing this change in the Yocto build.

I realize I am repeating myself here but I just wanted to summarize what I think are all your concerns in one post. Please let me know if I got it all.

Drew

Hi @drew.tx

thanks for getting back to me. Right now my only concern is point #3 Getting the Riverdi 7" DSI display to work, cuase I was able to get the uart debugg working and I’m setting dbt using fdtfile in the uboot environment and save it, machine conf file is as it was by default

regarding to point #3 questions , yes display was working before I changed the uboot fdtfile variable, but when I set fdtfile to imx8mm-verdin-wifi-ivy.dtb I didn’t get video output , and doing # vi /boot/overlays.txt
fdt_overlays= verdin-imx8mm_spidev_overlay.dtbo verdin-imx8mm_panel-cap-touch-7inch-dsi_overlay.dtbo

I’m getting this error

b2qt-verdin-imx8mm login: [   23.070286] imx-drm display-subsystem: bound imx-lcdif-crtc.0 (ops 0xffffffc08)
[   23.078334] imx_sec_dsim_drv 32e10000.mipi_dsi: version number is 0x1060200                              
[   23.085433] [drm:drm_bridge_attach] *ERROR* failed to attach bridge /soc@0/bus@32c00000/mipi_dsi@32e10007
[   23.097159] imx_sec_dsim_drv 32e10000.mipi_dsi: Failed to attach bridge: 32e10000.mipi_dsi               
[   23.105504] imx_sec_dsim_drv 32e10000.mipi_dsi: failed to bind sec dsim bridge: -517                     
[   23.126387] platform 32e10000.mipi_dsi: deferred probe pending                                           
[   23.132274] platform panel-lvds: deferred probe pending                                                  
[   23.137526] i2c 1-002c: deferred probe pending

and still no video

Hi @AYJF

Could you please collect and share here full boot logs from debug UART (starting from power-up) for both cases—when the fdtfile is set to imx8mm-verdin-wifi-ivy.dtb and when it is set to imx8mm-verdin-wifi-dev.dtb?"

Hi @alex.tx
thansks fro getting back to me . I enclosed two .txt files with full boot logs
imx8mm-verdin-wifi-ivy.txt (92.7 KB)
imx8mm-verdin-wifi-dev.txt (82.6 KB)

@AYJF

I tested the Toradex pre-built image v7.3, and the display worked correctly when I used imx8mm-verdin-wifi-ivy.dtb. Could you try building a Boot2Qt image based on the v7.3 BSP?

@AYJF

Did you figure out how to select the ivy device tree for a yocto build? I’m trying to do the same - build torizon-docker but want to have it use the ivy device tree when it boots. I can see that the imx8mp-verdin-nonwifi-ivy-verdin-imx8mp.dtb is part of the deploy/images/… directory but it’s not being used when booting.

Hi @CGFE

Modifying the default device tree with Torizon is a different use case than what’s being discussed here. Or at least we have a simpler solution for Torizon users. This case is about doing it from the Yocto build which, while it can be done, is a bit cumbersome. For Torizon you use torizoncore-builder. If that link is not enough to unblock you, please create a separate post here. You can at-mention me in the post and I’ll get a direct email notification.

HTH,
Drew

Hi @CGFE

I decided to use
setenv fdtfile imx8mm-verdin-wifi-ivy.dtb
saveenv

@alex.tx Regarding to the ERROR failed to attach bridge /soc@0/bus@32c00000/mipi_dsi@32e10007 I found if I remove the leds 8 and 9 from the device tree, board boot successfully and I got my Qt app on the Riverdi 7" DSI display. I don’t know what specific led is or are the conflict one, but as I’m planning only use led 7 I’m ok for now lol. Thanks everyone for your support and for your help

Regards
Alvaro