USB boot from Apalis iMX8QM USB01 on custom carrier board

We are testing the USB ports on our custom carrier board for the Apalis iMX8. We have designed USBO1, USBH2 and USBH3 to all be USB host ports. (USBH4 is unavailable at the moment.)

In Linux, we are able to use devices connected to any of the three ports. However, in u-boot, we are unable to use any of the ports:

  • USBH2 & USBH3 apply power to the device but “usb reset” in u-boot shows that USB0 is unavailable and USB1 has some sort of hub attached.
  • USBO1 does not apply power to the device

Any ideas on how I can get one of these ports to work in u-boot? I would prefer to use USBO1, but could live with using either of the other ports.

I see that the u-boot device tree has dr_mode="peripheral" in /usb@5b0d0000 which I think is keeping USBO1 from being used. I tried

fdt rm /usb@5b0d0000 dr_mode

and that opens the USB 0 bus for scanning, but power is still not applied to the USB stick.

Any ideas as to how to get power applied to USBO1?

It appears that USBO1_EN (pin 274) is not configured in the u-boot device tree. If I set GPIO4_IO03, then power is applied to the USB stick.

The following steps appear to get the Easy Installer on the USB stick to start:

fdt addr $fdtcontroladdr
fdt rm /usb@5b0d0000 dr_mode
gpio set 131
run bootcmd_usb0

I have not tried to install anything using autoinstall since I do not want to get this module stuck in an un-upgradable state like another module I have used ( awaiting resolution to issue raised in Making a bootable Torizon / EasyInstaller USB for Torizon 5 & iMX8 )

It sounds strange. pin 247 is used as USBO1_EN on Ixora board () and USB devices inserted to X8A lower connector work as expected.

Could you please clarify which exactly DT files you referred saying " pin 274 is not configured in the u-boot device tree "

I think this may be an issue relating to “U-Boot 2018.03-toradex_imx_v2018.03_4.14.98_2.3.0_bringup”, which is currently installed in the module.

I have not been able to try the newer u-boot; see here for more information.

Could you flash latest OS image using Toradex Easy Installer 2.0b6?

I was able to flash the Reference Minimal Image built from your instructions

The installed image boots and runs apparently normally but I am unable to flash any new images.

I tried running bootcmd_usb0 and the following is the result:

U-Boot 2020.04-5.1.0-devel+git.8ca87245fde7 (Nov 23 2020 - 23:45:52 +0000)

CPU:   NXP i.MX8QM RevB A53 at 1200 MHz

DRAM:  4 GiB
MMC:   FSL_SDHC: 0, FSL_SDHC: 1, FSL_SDHC: 2
Loading Environment from MMC... OK
In:    serial
Out:   serial
Err:   serial
Model: Toradex Apalis iMX8 QuadMax 4GB Wi-Fi / BT IT V1.0B, Serial# 06494646

 BuildInfo:
  - SCFW 732e719a, SECO-FW 376e3c15, IMX-MKIMAGE 6745ccdc, ATF
  - U-Boot 2020.04-5.1.0-devel+git.8ca87245fde7

switch to partitions #0, OK
mmc0(part 0) is current device
flash target is MMC:0
Net:   eth0: ethernet@5b040000
Fastboot: Normal
Normal Boot
Hit any key to stop autoboot:  0
Apalis iMX8 # run bootcmd_usb0
starting USB...
Bus usb@5b0d0000: usb dr_mode not found
Port not available.
Bus usbh3: XHCI-imx8 init hccr 0x000000005b130000 and hcor 0x000000005b130080 hc_length 128
Register 2000820 NbrPorts 2
Starting the controller
USB XHCI 1.00
scanning bus usbh3 for devices... cannot reset port 1!?
2 USB Device(s) found
       scanning usb for storage devices... 1 Storage Device(s) found

Device 0: Vendor: Lexar    Rev: 1.00 Prod: JumpDrive
            Type: Removable Hard Disk
            Capacity: 30544.0 MB = 29.8 GB (62554112 x 512)
... is now current device
Scanning usb 0:1...
Found U-Boot script /boot.scr
2246 bytes read in 3 ms (730.5 KiB/s)
## Executing script at 83100000
106496 bytes read in 4 ms (25.4 MiB/s)
Loading hdp firmware from 0x000000009c000000 offset 0x0000000000002000
Loading hdp firmware Complete
** Reading file would overwrite reserved memory **
SCRIPT FAILED: continuing...
Found U-Boot script /boot.scr
2246 bytes read in 3 ms (730.5 KiB/s)
## Executing script at 83100000
106496 bytes read in 5 ms (20.3 MiB/s)
Loading hdp firmware from 0x000000009c000000 offset 0x0000000000002000
Loading hdp firmware Complete
** Reading file would overwrite reserved memory **
SCRIPT FAILED: continuing...
Apalis iMX8 #

It looks like the u-boot installed by the update has one or more incorrect addresses set.

I tried to work around this problem by continuing as follows:

Apalis iMX8 # setenv ramdisk_addr_r 0x8a000000
Apalis iMX8 # setenv fdtfile        fsl-$fdtfile
Apalis iMX8 # run bootcmd_tezi && run bootcmd_run
37481764 bytes read in 212 ms (168.6 MiB/s)
## Loading kernel from FIT Image at 8a000000 ...
   Using 'config@freescale_fsl-imx8qm-apalis-eval.dtb' configuration
   Trying 'kernel@1' kernel subimage
     Description:  Linux kernel
     Type:         Kernel Image
     Compression:  gzip compressed
     Data Start:   0x8a000108
     Data Size:    6689782 Bytes = 6.4 MiB
     Architecture: AArch64
     OS:           Linux
     Load Address: 0x80280000
     Entry Point:  0x80280000
     Hash algo:    sha1
     Hash value:   cb0cf197924e01466a3d824cccbabbb9ff0f5bd3
   Verifying Hash Integrity ... sha1+ OK
## Loading ramdisk from FIT Image at 8a000000 ...
   Using 'config@freescale_fsl-imx8qm-apalis-eval.dtb' configuration
   Trying 'ramdisk@1' ramdisk subimage
     Description:  tezi-initramfs
     Type:         RAMDisk Image
     Compression:  uncompressed
     Data Start:   0x8a6b0584
     Data Size:    30466048 Bytes = 29.1 MiB
     Architecture: AArch64
     OS:           Linux
     Load Address: 0xa0000000
     Entry Point:  unavailable
     Hash algo:    sha1
     Hash value:   8e46cd4ad885859c0515a85a45195e7cfb8978bb
   Verifying Hash Integrity ... sha1+ OK
   Loading ramdisk from 0x8a6b0584 to 0xa0000000
## Loading fdt from FIT Image at 8a000000 ...
   Using 'config@freescale_fsl-imx8qm-apalis-eval.dtb' configuration
   Trying 'fdt@freescale_fsl-imx8qm-apalis-eval.dtb' fdt subimage
     Description:  Flattened Device Tree blob
     Type:         Flat Device Tree
     Compression:  uncompressed
     Data Start:   0x8a66161c
     Data Size:    107679 Bytes = 105.2 KiB
     Architecture: AArch64
     Hash algo:    sha1
     Hash value:   2090a5e0b2d81cff88023f488aeff3c216abf95a
   Verifying Hash Integrity ... sha1+ OK
   Booting using the fdt blob at 0x8a66161c
   Uncompressing Kernel Image
   Loading Ramdisk to fb942000, end fd650000 ... OK
   Loading Device Tree to 00000000fb924000, end 00000000fb94149e ... OK
/dma-controller@5a1f0000, 73816
/dma-controller@591F0000, 74772
/dma-controller@591F0000, 74772
/dma-controller@599F0000, 75928
sc_rm_set_master_sid: resource:4784 sid:17: res:3
config_smmu_resource_sid rsrc[-43707728] not owned
sc_rm_set_master_sid: resource:4784 sid:17: res:3
config_smmu_resource_sid rsrc[-43707728] not owned
sc_rm_set_master_sid: resource:4784 sid:17: res:3
config_smmu_resource_sid rsrc[-43707728] not owned
sc_rm_set_master_sid: resource:4784 sid:18: res:3
config_smmu_resource_sid rsrc[-43707728] not owned
sc_rm_set_master_sid: resource:4784 sid:18: res:3
config_smmu_resource_sid rsrc[-43707728] not owned
sc_rm_set_master_sid: resource:4784 sid:19: res:3
config_smmu_resource_sid rsrc[-43707728] not owned

Starting kernel ...

[    0.323130] clk: couldn't set hdmi_lis_ipg_clk clk rate to 100000000 (-22), current rate: 0
[    0.438449] dmi: Firmware registration failed.
[    0.529224] imx6q-pcie 5f000000.pcie: pcie_ext clock source missing or invalid
[    0.531502] imx6q-pcie 5f010000.pcie: pcie_ext clock source missing or invalid
[    0.579027] Can't support > 32 bit dma.
[    0.661000] i.mx8-hdp 56268000.hdmi: invalid resource
[    2.359441] ahci-imx 5f020000.sata: can't get per_clk0 clock.
[    2.390804] Can't support > 32 bit dma.
[    2.615844] atmel_mxt_ts 4-004a: __mxt_read_reg: i2c transfer failed (-5)
[    2.622890] atmel_mxt_ts 4-004a: mxt_bootloader_read: i2c recv failed (-5)
[    2.629988] atmel_mxt_ts 4-004a: mxt_bootloader_read: i2c recv failed (-5)
[    3.278963] imx6q-pcie 5f000000.pcie: phy link never came up
[    3.284786] imx6q-pcie 5f000000.pcie: failed to initialize host
[    3.290841] imx6q-pcie 5f000000.pcie: unable to add pcie port.
Running /etc/rc.local...
TDX_VER_ID="Apalis-iMX8_ToradexEasyInstaller_2.0b6-20201102"
Starting udev
[    4.039151] hid-generic 0003:046D:C52B.0003: device has no listeners, quitting
System time was Tue Dec 22 00:46:54 UTC 2020.
Setting the System Clock using the Hardware Clock as reference...
System Clock set. System local time is now Tue Dec 22 00:46:54 UTC 2020.

Welcome to the Toradex Easy Installer

This is a Linux based installer for Toradex modules. Currently, the installer
does not have a serial console interface. You can use the Toradex Easy Installer
via any of the available display interfaces using USB mouse/keyboard or via a
network connection using VNC. Use:
  # ip addr show eth0
to display the Ethernet IP address or use USB RNDIS at IP 192.168.11.1.

Check our documentation at:
  https://developer.toradex.com/software/toradex-easy-installer
/ # [   12.771702] mmc0: Timeout waiting for hardware interrupt. retries left=0 opcode=0
[   12.779206] mmc0: sdhci: ============ SDHCI REGISTER DUMP ===========
[   12.785651] mmc0: sdhci: Sys addr:  0x00000000 | Version:  0x00000002
[   12.792098] mmc0: sdhci: Blk size:  0x00000200 | Blk cnt:  0x00000001
[   12.798544] mmc0: sdhci: Argument:  0x00000000 | Trn mode: 0x00000013
[   12.804987] mmc0: sdhci: Present:   0x01fd8a0a | Host ctl: 0x00000011
[   12.811435] mmc0: sdhci: Power:     0x00000002 | Blk gap:  0x00000080
[   12.817881] mmc0: sdhci: Wake-up:   0x00000008 | Clock:    0x000020ff
[   12.824326] mmc0: sdhci: Timeout:   0x0000008f | Int stat: 0x00000000
[   12.830774] mmc0: sdhci: Int enab:  0x117f100b | Sig enab: 0x117f100b
[   12.837220] mmc0: sdhci: ACmd stat: 0x00000000 | Slot int: 0x00000502
[   12.843664] mmc0: sdhci: Caps:      0x07eb0000 | Caps_1:   0x8000b407
[   12.850112] mmc0: sdhci: Cmd:       0x0000083a | Max curr: 0x00ffffff
[   12.856557] mmc0: sdhci: Resp[0]:   0x00000900 | Resp[1]:  0xffffffff
[   12.863000] mmc0: sdhci: Resp[2]:   0x328f5903 | Resp[3]:  0x00d02701
[   12.869441] mmc0: sdhci: Host ctl2: 0x00000000
[   12.873888] mmc0: sdhci: ADMA Err:  0x00000004 | ADMA Ptr: 0xfffffffc
[   12.880330] mmc0: sdhci: ============================================
[   12.886869] mmc0: error -110 whilst initialising MMC card
[   23.011709] mmc0: Timeout waiting for hardware interrupt. retries left=0 opcode=0
[   23.019214] mmc0: sdhci: ============ SDHCI REGISTER DUMP ===========
[   23.025661] mmc0: sdhci: Sys addr:  0x00000000 | Version:  0x00000002
[   23.032105] mmc0: sdhci: Blk size:  0x00000200 | Blk cnt:  0x00000001
[   23.038550] mmc0: sdhci: Argument:  0x00000000 | Trn mode: 0x00000013
[   23.044999] mmc0: sdhci: Present:   0x01fd8a0a | Host ctl: 0x00000011
[   23.051442] mmc0: sdhci: Power:     0x00000002 | Blk gap:  0x00000080
[   23.057888] mmc0: sdhci: Wake-up:   0x00000008 | Clock:    0x000040af
[   23.064339] mmc0: sdhci: Timeout:   0x0000008f | Int stat: 0x00000000
[   23.070789] mmc0: sdhci: Int enab:  0x117f100b | Sig enab: 0x117f100b
[   23.077235] mmc0: sdhci: ACmd stat: 0x00000000 | Slot int: 0x00000502
[   23.083683] mmc0: sdhci: Caps:      0x07eb0000 | Caps_1:   0x8000b407
[   23.090127] mmc0: sdhci: Cmd:       0x0000083a | Max curr: 0x00ffffff
[   23.096573] mmc0: sdhci: Resp[0]:   0x00000900 | Resp[1]:  0xffffffff
[   23.103022] mmc0: sdhci: Resp[2]:   0x328f5903 | Resp[3]:  0x00d02701
[   23.109465] mmc0: sdhci: Host ctl2: 0x00000000
[   23.113914] mmc0: sdhci: ADMA Err:  0x00000004 | ADMA Ptr: 0xfffffffc
[   23.120358] mmc0: sdhci: ============================================
[   23.126954] mmc0: error -110 whilst initialising MMC card

On the HDMI monitor, it shows an error: Reading Config Block failed.

I now have two modules in this same stuck state.

I have tried using recovery mode to reinstall the Easy Installer. The recovery batch file starts okay, on the console I see u-boot start, but then it stalls at Hit any key to stop autoboot: 0

How can I update u-boot and linux on these modules?

Do you have an Ixora board? Can you use it to install latest version of Toradex pre-built image? And then test it with your carrier board?

I have an Apalis evaluation board that I have been trying to use to recover the modules, without success. Please see this message.

I could never get the Windows recovery batch file to work, but the Linux one does seem to work.

I was able to flash the Easy Installer, but the recover u-boot does not appear to properly enable the Ethernet port so I am unable to install anyversion of Toradex pre-built image.

Window recovery batch file works perfect for me. Are you using Windows 10?

What was a version of Easy Installer you flashed?

You can download an image from our website and put on USB stick or SD card .

Yes, Windows 10. For me, most of the time it would write the u-boot environment and then stop, but sometimes it would not do anything at all.

Easy Installer version: Apalis-iMX8_ToradexEasyInstaller_2.0b6-20201102

According our records you should have an Ixora carrier board. Could you try to replicate this issue using an Ixora board?

Using a different Windows 10 computer and the Ixora carrier board, I am able to use the Windows recovery batch file.

Not sure if the problem is a configuration problem with the original Windows 10 computer or with the Apalis carrier board interacting with Windows 10…

Thank you for an update.