Support for Hardware v2.0 of Variscite VAR-STK-DT8M-MINI_LO or VAR-DVK-DT8M-MINI_LO, based on DART-MX8M-MINI. AKA how to patch BalenaOS with a newer .dtb file ?

Summary:

Looking for support for DART-MX8M-MINI on Hardware Rev 2.0 of the Variscite eval kit:

We have the schematic for H/W Rev 2.0, which was created on March 1, 2021, but I cannot find it on the Variscite website (maybe they haven’t posted it yet).

I tried to toggle the 4 LEDs and read the 4 push buttons. The reasons I think we need a different DTB for Rev 2.0 are:

  1. (T1) Running BalenaOS on Rev 1.x, it works.
  2. (T2) Running BalenaOS on Rev 2.0, it doesn’t work.
  3. (T3) Running the Variscite image on Rev 2.0, it works.

My questions are:

  • Q1. Will Balena be providing support for this “NEWer” MX8M-Mini [Balena already calls this “MX8M-Mini (NEW)” ]
  • Q2. If not, maybe I need to setup a whole Yocto environment and add meta-balena and meta-variscite, but perhaps there is a faster/better way?

Here is what I tried:

  • M1. I tried manually copying the DTB file from the Variscite image on Rev 2.0 to the BalenaOS image on Rev 2.0 and renaming it to the expected one, but it seems that BalenaOS detects that I have changed the rootfs on the eMMC and somehow re-loads the old DTB.
  • M2. I also tried manually copying the DTB file to the Balena micro SD-card and renaming it, but I think this only takes effect when I boot from the SD, but as soon as Balena flashes the eMMC, it does so with a pre-canned image which contains the old DTB.

Any help would be greatly appreciated!

Details

We designed our custom board based on the Variscite eval kit (hardware v2.0) for the DART-MX8M-MINI . The eval kits have the following model numbers:

Starter kit    : VAR-STK-DT8M-MINI_LO
Development kit: VAR-DVK-DT8M-MINI_LO

The only difference between the above two is that the DVK comes with a touch screen.
The VAR-DVK-DT8M-MINI_LO eval kit consists of the following:

  • VAR-DT8MCustomBoard (this is the carrier board)
  • DART-MX8M-MINI (this is the SOM - System On Module)

For the sake of this discussion, let’s call our custom board the AMCU, to distinguish it from what Variscite calls their custom board or carrier board.

  1. In 2021, we ordered 4 x VAR-DVK-DT8M-MINI_LO, which I believe is based on v2.0 of VAR-DT8MCustomBoard
  2. In 2019, we ordered 1 x VAR-STK-DT8MM-MINI_LO, which I believe is based on v1.x of VAR-DT8MCustomBoard

The model number in (2) above is not a typo (“MM”), but it no longer exists on the Variscite website.

We have not yet tested with the AMCU. The tests I have done are summarized above.

Also, here is the output of some commands, which show that the gpio allocation is different because of the incorrect DTB file:

(T1) BalenaOS on Rev 1.x [works]

root@8e7bfb8:~# uname -a
Linux 8e7bfb8 4.19.35-imx8mm #1 SMP PREEMPT Mon Mar 8 18:35:00 UTC 2021 aarch64 aarch64 aarch64 GNU/Linux

root@8e7bfb8:~# ls -lF /boot
total 21036
-rw-r--r-- 1 root root 10497504 Mar  8 18:39 Image.gz
-rw-r--r-- 1 root root    42529 Feb 25 16:26 fsl-imx8mm-var-dart-m4.dtb
-rw-r--r-- 1 root root    42395 Feb 25 16:26 fsl-imx8mm-var-dart.dtb
-rw-r--r-- 1 root root    42893 Feb 25 16:26 fsl-imx8mm-var-som-m4.dtb
-rw-r--r-- 1 root root    43170 Feb 25 16:26 fsl-imx8mm-var-som-rev10-m4.dtb
-rw-r--r-- 1 root root    43036 Feb 25 16:26 fsl-imx8mm-var-som-rev10.dtb
-rw-r--r-- 1 root root    42759 Feb 25 16:26 fsl-imx8mm-var-som.dtb
-rw-r--r-- 1 root root  1053528 Mar  9 18:14 imx-boot-imx8mm-var-dart-sd.bin-flash_lpddr4_ddr4_evk
-rwxr-xr-x 1 root root  9914280 Feb 25 16:14 init*
-rw-r--r-- 1 root root        9 Mar  8 16:07 storage-driver

root@8e7bfb8:~# cat /sys/kernel/debug/gpio
gpiochip0: GPIOs 0-31, parent: platform/30200000.gpio, 30200000.gpio:
 gpio-7   (                    |eth_phy_pwr         ) out lo
 gpio-9   (                    |phy-reset           ) out hi
 gpio-12  (                    |spi_imx             ) out hi

gpiochip1: GPIOs 32-63, parent: platform/30210000.gpio, 30210000.gpio:
 gpio-38  (                    |sysfs               ) out hi
 gpio-39  (                    |sysfs               ) out hi
 gpio-42  (                    |sysfs               ) out hi
 gpio-44  (                    |cd                  ) in  hi IRQ
 gpio-51  (                    |VSD_3V3             ) out lo
 gpio-52  (                    |sysfs               ) out lo

gpiochip2: GPIOs 64-95, parent: platform/30220000.gpio, 30220000.gpio:

gpiochip3: GPIOs 96-127, parent: platform/30230000.gpio, 30230000.gpio:
 gpio-102 (                    |Back                ) in  hi IRQ
 gpio-109 (                    |Home                ) in  hi IRQ
 gpio-111 (                    |Down                ) in  hi IRQ
 gpio-113 (                    |eMMC                ) out lo
 gpio-114 (                    |Up                  ) in  hi IRQ

gpiochip4: GPIOs 128-159, parent: platform/30240000.gpio, 30240000.gpio:
 gpio-133 (                    |sysfs               ) out lo
 gpio-137 (                    |spi_imx             ) out hi
root@8e7bfb8:~#

(T2) BalenaOS on Rev 2.0 [does NOT work]

root@8d6111f:~# uname -a
Linux 8d6111f 4.19.35-imx8mm #1 SMP PREEMPT Mon Mar 8 18:35:00 UTC 2021 aarch64 aarch64 aarch64 GNU/Linux
root@8d6111f:~#  ls -lF /boot
total 21036
-rw-r--r-- 1 root root 10497504 Mar  8 18:39 Image.gz
-rw-r--r-- 1 root root    42529 Feb 25 16:26 fsl-imx8mm-var-dart-m4.dtb
-rw-r--r-- 1 root root    42395 Feb 25 16:26 fsl-imx8mm-var-dart.dtb
-rw-r--r-- 1 root root    42893 Feb 25 16:26 fsl-imx8mm-var-som-m4.dtb
-rw-r--r-- 1 root root    43170 Feb 25 16:26 fsl-imx8mm-var-som-rev10-m4.dtb
-rw-r--r-- 1 root root    43036 Feb 25 16:26 fsl-imx8mm-var-som-rev10.dtb
-rw-r--r-- 1 root root    42759 Feb 25 16:26 fsl-imx8mm-var-som.dtb
-rw-r--r-- 1 root root  1053528 Mar  9 18:14 imx-boot-imx8mm-var-dart-sd.bin-flash_lpddr4_ddr4_evk
-rwxr-xr-x 1 root root  9914280 Feb 25 16:14 init*
-rw-r--r-- 1 root root        9 Mar  8 16:07 storage-driver

root@8d6111f:~# cat /sys/kernel/debug/gpio
gpiochip0: GPIOs 0-31, parent: platform/30200000.gpio, 30200000.gpio:
 gpio-7   (                    |eth_phy_pwr         ) out lo
 gpio-9   (                    |phy-reset           ) out hi
 gpio-12  (                    |spi_imx             ) out hi

gpiochip1: GPIOs 32-63, parent: platform/30210000.gpio, 30210000.gpio:
 gpio-38  (                    |sysfs               ) out hi
 gpio-39  (                    |sysfs               ) out hi
 gpio-42  (                    |sysfs               ) out hi
 gpio-43  (                    |enable              ) out hi
 gpio-44  (                    |cd                  ) in  hi IRQ
 gpio-51  (                    |VSD_3V3             ) out lo
 gpio-52  (                    |sysfs               ) out lo

gpiochip2: GPIOs 64-95, parent: platform/30220000.gpio, 30220000.gpio:

gpiochip3: GPIOs 96-127, parent: platform/30230000.gpio, 30230000.gpio:
 gpio-102 (                    |Back                ) in  hi IRQ
 gpio-109 (                    |Home                ) in  hi IRQ
 gpio-111 (                    |Down                ) in  hi IRQ
 gpio-113 (                    |eMMC                ) out lo
 gpio-114 (                    |Up                  ) in  hi IRQ

gpiochip4: GPIOs 128-159, parent: platform/30240000.gpio, 30240000.gpio:
 gpio-133 (                    |sysfs               ) out lo
 gpio-137 (                    |spi_imx             ) out hi

gpiochip5: GPIOs 510-511, parent: spi/spi0.1, spi0.1, can sleep:
root@8d6111f:~#

(T3) Variscite image on Rev 2.0 [works]

root@imx8mm-var-dart:~# uname -a
Linux imx8mm-var-dart 5.4.85+g1c7a21268ceb #1 SMP PREEMPT Wed Feb 17 10:23:40 UTC 2021 aarch64 aarch64 aarch64 GNU/Linux

root@imx8mm-var-dart:~# ls -lF /boot
total 7400
lrwxrwxrwx 1 root root      29 Mar  9  2018 Image.gz -> Image.gz-5.4.85+g1c7a21268ceb
-rw-r--r-- 1 root root 6026639 Mar  9  2018 Image.gz-5.4.85+g1c7a21268ceb
-rw-r--r-- 1 root root   46293 Mar  9  2018 imx8mm-var-dart-dt8mcustomboard-legacy-m4.dtb
-rw-r--r-- 1 root root   45520 Mar  9  2018 imx8mm-var-dart-dt8mcustomboard-legacy.dtb
-rw-r--r-- 1 root root   46455 Mar  9  2018 imx8mm-var-dart-dt8mcustomboard-m4.dtb
-rw-r--r-- 1 root root   45682 Mar  9  2018 imx8mm-var-dart-dt8mcustomboard.dtb
-rw-r--r-- 1 root root   46450 Mar  9  2018 imx8mm-var-som-symphony-legacy-m4.dtb
-rw-r--r-- 1 root root   45677 Mar  9  2018 imx8mm-var-som-symphony-legacy.dtb
-rw-r--r-- 1 root root   46493 Mar  9  2018 imx8mm-var-som-symphony-m4.dtb
-rw-r--r-- 1 root root   45724 Mar  9  2018 imx8mm-var-som-symphony.dtb
-rw-r--r-- 1 root root 1152054 Mar  9  2018 splash.bmp

root@imx8mm-var-dart:~# cat /sys/kernel/debug/gpio
gpiochip0: GPIOs 0-31, parent: platform/30200000.gpio, 30200000.gpio:
 gpio-3   (                    |ads7846_pendown     ) in  hi IRQ
 gpio-7   (                    |regulator-eth-phy   ) out lo ACTIVE LOW
 gpio-9   (                    |phy-reset           ) out hi
 gpio-10  (                    |id                  ) in  hi IRQ
 gpio-12  (                    |spi_imx             ) out hi

gpiochip1: GPIOs 32-63, parent: platform/30210000.gpio, 30210000.gpio:
 gpio-38  (                    |sysfs               ) out hi
 gpio-39  (                    |sysfs               ) out hi
 gpio-42  (                    |sysfs               ) out hi
 gpio-43  (                    |enable              ) out hi
 gpio-44  (                    |cd                  ) in  hi IRQ ACTIVE LOW
 gpio-51  (                    |regulator-usdhc2    ) out lo
 gpio-52  (                    |sysfs               ) out lo

gpiochip2: GPIOs 64-95, parent: platform/30220000.gpio, 30220000.gpio:

gpiochip3: GPIOs 96-127, parent: platform/30230000.gpio, 30230000.gpio:
 gpio-114 (                    |eMMC                ) out lo
 gpio-118 (                    |spi_imx             ) out hi

gpiochip4: GPIOs 128-159, parent: platform/30240000.gpio, 30240000.gpio:
 gpio-132 (                    |microchip,rx-int    ) in  lo ACTIVE LOW
 gpio-133 (                    |sysfs               ) out lo
 gpio-137 (                    |spi_imx             ) out hi
 gpio-142 (                    |scl                 ) out hi
 gpio-143 (                    |sda                 ) in  hi
 gpio-144 (                    |scl                 ) out hi
 gpio-145 (                    |sda                 ) in  hi
 gpio-146 (                    |scl                 ) out hi
 gpio-147 (                    |sda                 ) in  hi
 gpio-148 (                    |scl                 ) out hi
 gpio-149 (                    |sda                 ) in  hi

gpiochip6: GPIOs 496-503, parent: i2c/3-0021, 3-0021, can sleep:

gpiochip5: GPIOs 504-511, parent: i2c/3-0020, 3-0020, can sleep:
 gpio-508 (                    |Home                ) in  hi IRQ ACTIVE LOW
 gpio-509 (                    |Up                  ) in  hi IRQ ACTIVE LOW
 gpio-510 (                    |Down                ) in  hi IRQ ACTIVE LOW
 gpio-511 (                    |Back                ) in  hi IRQ ACTIVE LOW
root@imx8mm-var-dart:~#

Hi Alain, thanks for reporting this. We are checking with our devices team to see what is the plan to support v2 of the Variscite development board and we will come back to you.

If you want to try to add the support by yourself, please follow the instructions in GitHub - balena-os/balena-variscite-mx8 to build from source. The repository is open to PRs so please do share if you make this new version work.