Verdin am62 doesn't boot on a custom carrier board

When trying to boot “Toradex 0071 Verdin AM62 Solo 512MB V1.1B” in a custom carrier board, we see errors that can be traced to the driver for i2c bus (“drivers/i2c/omap24xx_i2c.c”) in the u-boot source code. Our custom board has i2c buses #1 and #2 in used, and both have pull-up resistors. But buses #3 and #4 were left unconnected.

U-Boot 2024.04-ti-gedba3cda828c (Jun 26 2025 - 13:43:32 +0000)

SoC:   AM62X SR1.0 HS-FS
DRAM:  512 MiB
Core:  145 devices, 31 uclasses, devicetree: separate
MMC:   mmc@fa10000: 0, mmc@fa00000: 1
Loading Environment from MMC… OK
Timed out in wait_for_event: status=0000
Check if pads/pull-ups of bus are properly configured

How can I change the device tree used in u-boot to disable the unused i2c buses?

Similar issue: Error message when booting Verdin AM62

Hi, I’m the Toradex AI Assistant.

I might make mistakes or occasionally get you wrong. Our support team will step in if needed.


I’d be glad to help! Could you let me know which OS and version you are using? Please run the tdx-info command to get detailed information about your setup, as described in the tdx-info documentation.

Understanding your specific platform configuration will help me provide the most accurate guidance for modifying the device tree to disable the unused I2C buses in U-Boot.

Best regards, Toradex AI Assistant.


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

If I answered your question, please tick the “Solution” checkbox.

For follow-up questions to me, please use @ToradexAI in your post.

Here is the output of tdx-info, while the SOM was on the Mallow carrier board:

root@verdin-am62-15313540:~# tdx-info 

Software summary
------------------------------------------------------------
Bootloader:               U-Boot
Kernel version:           6.6.106-7.4.0 #1 SMP PREEMPT Thu Sep 18 20:27:33 UTC 2025
Kernel command line:      root=PARTUUID=ba105c12-02 ro rootwait console=tty1 console=ttyS2,115200
Distro name:              NAME="TDX Wayland with XWayland"
Distro version:           VERSION_ID=7.4.0-build.10
Distro variant:           -
Hostname:                 verdin-am62-15313540
------------------------------------------------------------

Hardware info
------------------------------------------------------------
HW model:                 Toradex Verdin AM62 on Verdin Development Board
Toradex version:          0071 V1.1B
Serial number:            15313540
Processor arch:           aarch64
------------------------------------------------------------
root@verdin-am62-15313540:~# tdx-info -b

Bootloader info
------------------------------------------------------------
U-Boot version:           2024.04-ti-gb8a91ecaacfe
U-Boot vendor:            toradex
U-Boot board:             verdin-am62
U-Boot fdt_board:         dev
U-Boot soc:               k3
U-Boot video args:        -
U-Boot secure boot:       -
U-Boot boot delay:        1
------------------------------------------------------------

Disabling Unused I2C Buses in U-Boot Device Tree

Based on your setup (Verdin AM62 Solo 512MB V1.1B with U-Boot 2024.04-ti-gb8a91ecaacfe running BSP 7.4.0), you can modify the device tree to disable the unused I2C buses #3 and #4 that are causing the timeout errors.

Solution: Modify Device Tree to Disable I2C Buses

You’ll need to create a custom device tree that disables the unused I2C buses by setting their status to “disabled”(1). Here’s the approach:

1. Create Custom Device Tree

First, locate and copy the base device tree for your configuration(2):

$ cp ./arch/arm64/boot/dts/freescale/imx8mm-verdin-wifi-dev.dts ./arch/arm64/boot/dts/freescale/imx8mm-verdin-wifi-dev-custom.dts

(2)

2. Disable Unused I2C Buses

In your custom device tree, add nodes to disable the unused I2C buses(1):

&i2c3 {
    status = "disabled";
};

&i2c4 {
    status = "disabled";
};

(1)

3. Update U-Boot Environment

You can change the device tree used by U-Boot in two ways(3):

Method 1: Set fdtfile directly

> env set fdtfile your-custom-device-tree.dtb
> saveenv

(3)

Method 2: Use fdt_board variable
The U-Boot uses fdt_board and variant variables to determine fdtfile during the preboot step(3). You can modify the fdt_board variable to point to your custom device tree configuration(3).

4. Compile the Device Tree

Add your custom device tree to the Makefile and compile it(2):

dtb-$(CONFIG_ARCH_MXC) += imx8mm-verdin-wifi-wifi-dev-custom.dtb

(2)

Then compile using the Device Tree Compiler (DTC) tool(1):

$ make freescale/<custom-device-tree>.dtb

(1)

5. Deploy the Custom Device Tree

Copy the compiled device tree to the /boot directory(2):

$ scp <custom-device-tree>.dtb root@<ip-address>:/boot

(2)

Alternative: Use Device Tree Overlays

For development and testing, you could also create a device tree overlay that disables the unused I2C buses(4). Create a .dts file with the /plugin/; header(4):

/dts-v1/;
/plugin/;

/ {
    fragment@0 {
        target = <&i2c3>;
        __overlay__ {
            status = "disabled";
        };
    };
    
    fragment@1 {
        target = <&i2c4>;
        __overlay__ {
            status = "disabled";
        };
    };
};

(4)

This approach should resolve the I2C timeout errors you’re seeing during U-Boot initialization on your custom carrier board.

Best regards, Toradex AI Assistant.


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

If I answered your question, please tick the “Solution” checkbox.

For follow-up questions to me, please use @ToradexAI in your post.

Here is the boot log, while the SOM was in our custom carrier board:

U-Boot SPL 2024.04-ti-gb8a91ecaacfe (Oct 01 2025 - 18:14:20 +0000)
SYSFW ABI: 4.0 (firmware rev 0x000b '11.1.5--v11.01.05 (Fancy Rat)')
Changed A53 CPU frequency to 800000000Hz (K grade) in DT
SPL initial stack usage: 13424 bytes
Trying to boot from MMC1
Authentication passed
Authentication passed
Authentication passed
Loading Environment from nowhere... OK
init_env from device 9 not supported!
Authentication passed
Authentication passed
Starting ATF on ARM64 core...

NOTICE:  BL31: v2.13.0(release):v2.13.0-259-ge0c4d3903b-dirty
NOTICE:  BL31: Built : 07:01:36, Jul  1 2025

U-Boot SPL 2024.04-ti-gb8a91ecaacfe (Oct 01 2025 - 18:14:20 +0000)
SYSFW ABI: 4.0 (firmware rev 0x000b '11.1.5--v11.01.05 (Fancy Rat)')
SPL initial stack usage: 1904 bytes
Trying to boot from MMC1
Authentication passed
Authentication passed


U-Boot 2024.04-ti-gb8a91ecaacfe (Oct 01 2025 - 18:14:20 +0000)

SoC:   AM62X SR1.0 HS-FS
DRAM:  512 MiB
optee optee: OP-TEE: revision 4.7 (a9690ae39995af36)
Core:  147 devices, 33 uclasses, devicetree: separate
MMC:   mmc@fa10000: 0, mmc@fa00000: 1
Loading Environment from MMC... OK
Timed out in wait_for_event: status=0000
Check if pads/pull-ups of bus are properly configured
Timed out in wait_for_event: status=0000
Check if pads/pull-ups of bus are properly configured
Timed out in wait_for_event: status=0000
Check if pads/pull-ups of bus are properly configured
Timed out in wait_for_event: status=0000
Check if pads/pull-ups of bus are properly configured
Timed out in wait_for_event: status=0000
Check if pads/pull-ups of bus are properly configured
Timed out in wait_for_event: status=0000
Check if pads/pull-ups of bus are properly configured
Timed out in wait_for_event: status=0000
Check if pads/pull-ups of bus are properly configured
Timed out in wait_for_event: status=0000
Check if pads/pull-ups of bus are properly configured
Timed out in wait_for_event: status=0000
Check if pads/pull-ups of bus are properly configured
Timed out in wait_for_event: status=0000
Check if pads/pull-ups of bus are properly configured
Timed out in wait_for_event: status=0000
Check if pads/pull-ups of bus are properly configured
Timed out in wait_for_event: status=0000
Check if pads/pull-ups of bus are properly configured
Timed out in wait_for_event: status=0000
Check if pads/pull-ups of bus are properly configured
Timed out in wait_for_event: status=0000
Check if pads/pull-ups of bus are properly configured
Timed out in wait_for_event: status=0000
Check if pads/pull-ups of bus are properly configured
Timed out in wait_for_event: status=0000
Check if pads/pull-ups of bus are properly configured
Timed out in wait_for_event: status=0000
Check if pads/pull-ups of bus are properly configured
Timed out in wait_for_event: status=0000
Check if pads/pull-ups of bus are properly configured
Timed out in wait_for_event: status=0000
Check if pads/pull-ups of bus are properly configured
Timed out in wait_for_event: status=0000
Check if pads/pull-ups of bus are properly configured
Timed out in wait_for_event: status=0000
Check if pads/pull-ups of bus are properly configured
Timed out in wait_for_event: status=0000
Check if pads/pull-ups of bus are properly configured



@ToradexAI, how can I create a custom device tree for U-Boot using the reference Toradex Yocto build?

Creating a Custom Device Tree for U-Boot with Yocto

Based on your boot log showing repeated I2C timeout errors, you need to create a custom device tree to disable the unused I2C buses. Here’s how to do this using the Toradex Yocto build system:

1. Create a Custom Meta Layer

First, create your own meta layer for customizations(1):

# Run `. export` or `source setup-environment` when building Torizon OS  

$ . export # will take you to the `build` directory  
$ bitbake-layers create-layer ../layers/meta-customer # inside the build directory  

(1)

2. Set Up Device Tree Customization Structure

Create the necessary directory structure for your device tree customization(1):

$ cd ../layers/meta-customer/  
$ mkdir -p recipes-bsp/u-boot  

(1)

3. Create U-Boot Recipe Append

For the Verdin AM62, create a U-Boot append file(1):

touch recipes-bsp/u-boot/u-boot-toradex_%.bbappend  

(1)

4. Add Your Custom Device Tree

The .bbappend contents should include your custom device tree modifications(1):

do_configure:append() {  
    # Remove exisiting fdtfile, if there is one  
    sed -i '/"fdtfile=.*\\0" \\/d' ${S}/include/configs/verdin-imx8mp.h  
    # Add new fdtfile, "my-custom-devicetree.dtb" should be replaced with your device tree binary file  
    sed -i 's/\("fdt_board=.*\\0" \\\)/\0\n      "fdtfile=my-custom-devicetree.dtb\\0" \\/' ${S}/include/configs/verdin-imx8mp.h  
}  

(1)

5. Create Custom Device Tree File

Create your custom device tree that disables the unused I2C buses. For the AM62, create a file like k3-am625-verdin-wifi-dev-custom.dts(1):

/dts-v1/;  
  
#include <dt-bindings/pwm/pwm.h>  
#include "k3-am625-verdin-wifi-dev.dts"  
  
/ {  
	model = "Customer Carrier Board with Toradex Verdin AM62";  
	compatible = "customer,verdin_am62",  
                 "toradex,verdin-am62-wifi",  
                 "toradex,verdin_am62",  
		         "ti,am625";  
};  

&i2c3 {
	status = "disabled";
};

&i2c4 {
	status = "disabled";
};

(1)

6. Add Device Tree to Build Configuration

You need to add the device tree file to the variable KERNEL_DEVICETREE(1). Create a machine-specific configuration file:

KERNEL_DEVICETREE:append = " ti/k3-am625-verdin-wifi-dev-custom.dtb"  

(1)

Include this in your conf/layer.conf file(1):

include conf/machine/verdin-am62-extra.conf  

(1)

7. Configure U-Boot Environment Variable

The U-Boot uses the fdtfile variable to determine which device tree to load(2). You can modify this through the U-Boot environment or by customizing the U-Boot configuration(2).

8. Build Your Custom Image

After setting up your custom meta layer, build your image(3):

$ bitbake <your-image-name>

(3)

This approach will create a custom device tree that disables the unused I2C buses, eliminating the timeout errors you’re seeing during U-Boot initialization on your custom carrier board.

Best regards, Toradex AI Assistant.


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

If I answered your question, please tick the “Solution” checkbox.

For follow-up questions to me, please use @ToradexAI in your post.