Hello,
For a new product I have been developing with a Colibri Evaluation Board and an IMX6ULL WB. With this combination I’ve managed to try out the angstrom based console-tdx-image, and later moved on to poky’s core-image-minimal for size reasons.
Because our application requires some specific hardware (A Micrel KSZ8463 3 ports ethernet switch), we made our own custom carrier board to act as our development board. I can probably supply the schematics for it if required. The KSZ8463 is connected via MII and SPI (no MDIO), but the MII pins conflict with the default UARTA used for debugging. We’ve made UARTD available instead, and also have the recommended USBC connector on our board. There is no other special hardware on our custom board, and we’ve broken out some general Colibri IO pins, I2C, SPI and an RJ45 jack for the built in PHY.
If I put regular TEZI 1.8 into flash and plug the module in to the Colibri Evalation Board, I get this output over UARTA and can succesfully connect via VNC:
U-Boot 2016.11-1.8.0+g07edca0bb8 (Oct 19 2018 - 13:34:09 +0000)
CPU: Freescale i.MX6ULL rev1.0 792 MHz (running at 396 MHz)
CPU: Industrial temperature grade (-40C to 105C) at 41C
Reset cause: POR
DRAM: 512 MiB
NAND: 512 MiB
MMC: FSL_SDHC: 0
Using default environment
Video: 640x480x18
In: serial
Out: serial
Err: serial
Model: Toradex Colibri iMX6ULL 512MB Wi-Fi / Bluetooth IT V1.1A, Serial# 06399160
Net: FEC0
Hit any key to stop autoboot: 0
MMC: no card present
Booting Toradex Easy Installer...
ubi0: default fastmap pool size: 200
ubi0: default fastmap WL pool size: 100
ubi0: attaching mtd1
ubi0: scanning is finished
ubi0: attached mtd1 (name "mtd=4", size 508 MiB)
ubi0: PEB size: 131072 bytes (128 KiB), LEB size: 126976 bytes
ubi0: min./max. I/O unit sizes: 2048/2048, sub-page size 2048
ubi0: VID header offset: 2048 (aligned 2048), data offset: 4096
ubi0: good PEBs: 4060, bad PEBs: 4, corrupted PEBs: 0
ubi0: user volume: 1, internal volumes: 1, max. volumes count: 128
ubi0: max/mean erase counter: 40/17, WL threshold: 4096, image sequence number: 86348508
ubi0: available PEBs: 0, total reserved PEBs: 4060, PEBs reserved for bad PEB handling: 76
No size specified -> Using max size (20856020)
Read 20856020 bytes from volume rootfs to 82200000
## Loading kernel from FIT Image at 82200000 ...
Using 'config@1' configuration
Trying 'kernel@1' kernel subimage
Description: Linux Kernel 4.1
Type: Kernel Image
Compression: uncompressed
Data Start: 0x822000e0
Data Size: 4887376 Bytes = 4.7 MiB
Architecture: ARM
OS: Linux
Load Address: 0x81000000
Entry Point: 0x81000000
Hash algo: md5
Hash value: 5b8a3fa97134f80a06ee830c58e75dcf
Verifying Hash Integrity ... md5+ OK
## Loading ramdisk from FIT Image at 82200000 ...
Using 'config@1' configuration
Trying 'ramdisk@1' ramdisk subimage
Description: SquashFS RAMdisk
Type: RAMDisk Image
Compression: uncompressed
Data Start: 0x826a9518
Data Size: 15929344 Bytes = 15.2 MiB
Architecture: ARM
OS: Linux
Load Address: unavailable
Entry Point: unavailable
Hash algo: md5
Hash value: fff196a3409547b7ed2046bf9081b3ff
Verifying Hash Integrity ... md5+ OK
## Loading fdt from FIT Image at 82200000 ...
Using 'config@1' configuration
Trying 'fdt@1' fdt subimage
Description: Colibri iMX6ULL Device Tree
Type: Flat Device Tree
Compression: uncompressed
Data Start: 0x835da5e4
Data Size: 37816 Bytes = 36.9 KiB
Architecture: ARM
Hash algo: md5
Hash value: f61ffa470f6c279d7fade885b5600b74
Verifying Hash Integrity ... md5+ OK
Booting using the fdt blob at 0x835da5e4
Loading Kernel Image ... OK
Loading Device Tree to 8fff3000, end 8ffff3b7 ... OK
Updating MTD partitions...
Starting kernel ...
[ 0.540983] gpmi-nand 1806000.gpmi-nand: mode:5 ,failed in set feature.
[ 0.588365] imx_usb 2184000.usb: Can't register ci_hdrc platform device, err=-517
Running /etc/rc.local...
Colibri-iMX6ULL_ToradexEasyInstaller_1.8-20181019
Welcome to 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 through any of the available display interfaces
using USB mouse/keyboard or via network using VNC. Use:
# ip addr show eth0
to display the Ethernet IP address or use USB RNDIS at IP 192.168.11.1.
/ #
If I then swap the same Colibri IMX6ULL module over to our own board, this is the output I get instead (still via UARTA):
U-Boot 2016.11-1.8.0+g07edca0bb8 (Oct 19 2018 - 13:34:09 +0000)
CPU: Freescale i.MX6ULL rev1.0 792 MHz (running at 396 MHz)
CPU: Industrial temperature grade (-40C to 105C) at 37C
Reset cause: POR
DRAM: 512 MiB
NAND: 512 MiB
MMC: FSL_SDHC: 0
Using default environment
Video: 640x480x18
In: serial
Out: serial
Err: serial
Model: Toradex Colibri iMX6ULL 512MB Wi-Fi / Bluetooth IT V1.1A, Serial# 06399160
Net: FEC0
Hit any key to stop autoboot: 0
MMC: no card present
Booting Toradex Easy Installer...
ubi0: default fastmap pool size: 200
ubi0: default fastmap WL pool size: 100
ubi0: attaching mtd1
ubi0: scanning is finished
ubi0: attached mtd1 (name "mtd=4", size 508 MiB)
ubi0: PEB size: 131072 bytes (128 KiB), LEB size: 126976 bytes
ubi0: min./max. I/O unit sizes: 2048/2048, sub-page size 2048
ubi0: VID header offset: 2048 (aligned 2048), data offset: 4096
ubi0: good PEBs: 4060, bad PEBs: 4, corrupted PEBs: 0
ubi0: user volume: 1, internal volumes: 1, max. volumes count: 128
ubi0: max/mean erase counter: 40/17, WL threshold: 4096, image sequence number: 86348508
ubi0: available PEBs: 0, total reserved PEBs: 4060, PEBs reserved for bad PEB handling: 76
No size specified -> Using max size (20856020)
Read 20856020 bytes from volume rootfs to 82200000
## Loading kernel from FIT Image at 82200000 ...
Using 'config@1' configuration
Trying 'kernel@1' kernel subimage
Description: Linux Kernel 4.1
Type: Kernel Image
Compression: uncompressed
Data Start: 0x822000e0
Data Size: 4887376 Bytes = 4.7 MiB
Architecture: ARM
OS: Linux
Load Address: 0x81000000
Entry Point: 0x81000000
Hash algo: md5
Hash value: 5b8a3fa97134f80a06ee830c58e75dcf
Verifying Hash Integrity ... md5+ OK
## Loading ramdisk from FIT Image at 82200000 ...
Using 'config@1' configuration
Trying 'ramdisk@1' ramdisk subimage
Description: SquashFS RAMdisk
Type: RAMDisk Image
Compression: uncompressed
Data Start: 0x826a9518
Data Size: 15929344 Bytes = 15.2 MiB
Architecture: ARM
OS: Linux
Load Address: unavailable
Entry Point: unavailable
Hash algo: md5
Hash value: fff196a3409547b7ed2046bf9081b3ff
Verifying Hash Integrity ... md5+ OK
## Loading fdt from FIT Image at 82200000 ...
Using 'config@1' configuration
Trying 'fdt@1' fdt subimage
Description: Colibri iMX6ULL Device Tree
Type: Flat Device Tree
Compression: uncompressed
Data Start: 0x835da5e4
Data Size: 37816 Bytes = 36.9 KiB
Architecture: ARM
Hash algo: md5
Hash value: f61ffa470f6c279d7fade885b5600b74
Verifying Hash Integrity ... md5+ OK
Booting using the fdt blob at 0x835da5e4
Loading Kernel Image ... OK
Loading Device Tree to 8fff3000, end 8ffff3b7 ... OK
Updating MTD partitions...
Starting kernel ...
[ 0.541206] gpmi-nand 1806000.gpmi-nand: mode:5 ,failed in set feature.
[ 0.588606] imx_usb 2184000.usb: Can't register ci_hdrc platform device, err=-517
I don’t know if the logging cuts off because of something happening on the MII pins (unlikely, the device tree doesn’t know about it?), or because the module crashes. I cannot connect via VNC.
I then applied this patch to u-boot-toradex in an attempt to change the debug serial from UARTA to UARTD:
--- a/board/toradex/colibri-imx6ull/colibri_imx6ull.c
+++ b/board/toradex/colibri-imx6ull/colibri_imx6ull.c
@@ -67,11 +67,11 @@ int dram_init(void)
return 0;
}
-static iomux_v3_cfg_t const uart1_pads[] = {
- MX6_PAD_UART1_TX_DATA__UART1_DTE_RX | MUX_PAD_CTRL(UART_PAD_CTRL),
- MX6_PAD_UART1_RX_DATA__UART1_DTE_TX | MUX_PAD_CTRL(UART_PAD_CTRL),
- MX6_PAD_UART1_RTS_B__UART1_DTE_CTS | MUX_PAD_CTRL(UART_PAD_CTRL),
- MX6_PAD_UART1_CTS_B__UART1_DTE_RTS | MUX_PAD_CTRL(UART_PAD_CTRL),
+static iomux_v3_cfg_t const uart6_pads[] = {
+ MX6_PAD_CSI_MCLK__UART6_DTE_RX | MUX_PAD_CTRL(UART_PAD_CTRL),
+ MX6_PAD_CSI_PIXCLK__UART6_DTE_TX | MUX_PAD_CTRL(UART_PAD_CTRL),
+ MX6_PAD_CSI_VSYNC__UART6_DTE_CTS | MUX_PAD_CTRL(UART_PAD_CTRL),
+ MX6_PAD_CSI_HSYNC__UART6_DTE_RTS | MUX_PAD_CTRL(UART_PAD_CTRL),
};
static iomux_v3_cfg_t const usdhc1_pads[] = {
@@ -223,7 +223,7 @@ static void setup_dtemode_uart(void)
static void setup_iomux_uart(void)
{
setup_dtemode_uart();
- imx_iomux_v3_setup_multiple_pads(uart1_pads, ARRAY_SIZE(uart1_pads));
+ imx_iomux_v3_setup_multiple_pads(uart6_pads, ARRAY_SIZE(uart6_pads));
}
#ifdef CONFIG_FSL_ESDHC
@@ -462,7 +462,7 @@ int board_usb_phy_mode(int port)
#endif
static struct mxc_serial_platdata mxc_serial_plat = {
- .reg = (struct mxc_uart *)UART1_BASE,
+ .reg = (struct mxc_uart *)UART6_BASE_ADDR,
.use_dte = 1,
};
diff --git a/include/configs/colibri-imx6ull.h b/include/configs/colibri-imx6ull.h
index d61e307a08..e352a24ec0 100644
--- a/include/configs/colibri-imx6ull.h
+++ b/include/configs/colibri-imx6ull.h
@@ -97,7 +97,7 @@
"ubiargs=ubi.mtd=ubi root=ubi0:rootfs rw rootfstype=ubifs " \
"ubi.fm_autoconvert=1\0" \
"ubiboot=run setup; " \
- "setenv bootargs console=ttymxc0,115200 quiet " \
+ "setenv bootargs console=ttymxc5,115200 quiet " \
"rootfstype=squashfs root=/dev/ram autoinstall " \
"${teziargs}; echo Booting Toradex Easy Installer...; " \
"ubi part ubi && " \
@@ -142,7 +142,7 @@
NFS_BOOTCMD \
SD_BOOTCMD \
UBI_BOOTCMD \
- "console=ttymxc0\0" \
+ "console=ttymxc5\0" \
"defargs=user_debug=30\0" \
"dfu_alt_info=" DFU_ALT_NAND_INFO "\0" \
"fdt_board=eval-v3\0" \
I feel like this patch might be wrong, as it’s using the CTS and RTS pins (which I believe are connected to the WiFi module) but I couldn’t get it to work at all without this.
After this patch I compiled u-boot-toradex with:
make colibri-imx6ull_defconfig
make -j3 2>&1 | tee build.log
As specified here: Build U-Boot and Linux Kernel from Source Code | Toradex Developer Center
And copied the resulting u-boot-nand.imx to the TEZI recovery tool, replacing the one already there, and putting the module into recovery mode and running recovery-windows.bat
After this, the u-boot output now appears on UARTD, however it no longer attemps to boot into TEZI:
U-Boot 2016.11-dirty (Mar 27 2019 - 18:46:01 +0100)
CPU: Freescale i.MX6ULL rev1.0 792 MHz (running at 396 MHz)
CPU: Industrial temperature grade (-40C to 105C) at 48C
Reset cause: POR
DRAM: 512 MiB
NAND: 512 MiB
MMC: FSL_SDHC: 0
Video: 640x480x18
In: serial
Out: serial
Err: serial
Model: Toradex Colibri iMX6ULL 512MB Wi-Fi / Bluetooth IT V1.1A, Serial# 06399160
Net: FEC0
Hit any key to stop autoboot: 0
Booting from NAND...
ubi0: default fastmap pool size: 200
ubi0: default fastmap WL pool size: 100
ubi0: attaching mtd1
ubi0: scanning is finished
ubi0: attached mtd1 (name "mtd=4", size 508 MiB)
ubi0: PEB size: 131072 bytes (128 KiB), LEB size: 126976 bytes
ubi0: min./max. I/O unit sizes: 2048/2048, sub-page size 2048
ubi0: VID header offset: 2048 (aligned 2048), data offset: 4096
ubi0: good PEBs: 4060, bad PEBs: 4, corrupted PEBs: 0
ubi0: user volume: 1, internal volumes: 1, max. volumes count: 128
ubi0: max/mean erase counter: 40/17, WL threshold: 4096, image sequence number: 86348508
ubi0: available PEBs: 0, total reserved PEBs: 4060, PEBs reserved for bad PEB handling: 76
Volume kernel not found!
MMC: no card present
starting USB...
USB0: Port not available.
USB1: USB EHCI 1.00
scanning bus 1 for devices... 1 USB Device(s) found
scanning usb for storage devices... 0 Storage Device(s) found
USB device 0: unknown device
FEC0 Waiting for PHY auto negotiation to complete......... TIMEOUT !
Could not initialize PHY FEC0
BOOTP broadcast 1
BOOTP broadcast 2
BOOTP broadcast 3
BOOTP broadcast 4
BOOTP broadcast 5
BOOTP broadcast 6
BOOTP broadcast 7
BOOTP broadcast 8
BOOTP broadcast 9
BOOTP broadcast 10
BOOTP broadcast 11
BOOTP broadcast 12
BOOTP broadcast 13
BOOTP broadcast 14
BOOTP broadcast 15
BOOTP broadcast 16
BOOTP broadcast 17
Retry time exceeded; starting again
Colibri iMX6ULL #
I see some references to CONFIG_TDX_EASY_INSTALLER, so there’s probably a special way to compile u-boot for TEZI that I’m missing? Is my patch file even correct, and what would be the correct way to disable the CTS/RTS?
Thanks in advance.