Skip to content

Commit 9c9e242

Browse files
morishitaandrekartben
authored andcommitted
boards: variscite: Add Variscite DART-MX8M-PLUS board
Add Variscite DART-MX8M-PLUS board support. This SoM is based on NXP's i.MX8M Plus SoC. It includes Cortex-A53 and Cortex-M7 support. Signed-off-by: Andre Morishita <andre.m@variscite.com>
1 parent 67eb03c commit 9c9e242

16 files changed

+715
-0
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# Copyright 2025 Variscite Ltd.
2+
# Copyright 2021-2022, 2024 NXP
3+
# SPDX-License-Identifier: Apache-2.0
4+
5+
config BOARD_IMX8MP_VAR_DART
6+
select SOC_MIMX8ML8_A53 if BOARD_IMX8MP_VAR_DART_MIMX8ML8_A53
7+
select SOC_MIMX8ML8_M7 if BOARD_IMX8MP_VAR_DART_MIMX8ML8_M7 || BOARD_IMX8MP_VAR_DART_MIMX8ML8_M7_DDR
8+
select SOC_PART_NUMBER_MIMX8ML8DVNLZ
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#
2+
# Copyright 2025 Variscite Ltd.
3+
# Copyright (c) 2024 NXP
4+
#
5+
# SPDX-License-Identifier: Apache-2.0
6+
#
7+
8+
if(CONFIG_SOC_MIMX8ML8_M7)
9+
board_set_debugger_ifnset(jlink)
10+
board_set_flasher_ifnset(jlink)
11+
12+
board_runner_args(jlink "--device=MIMX8ML8_M7")
13+
include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake)
14+
endif()
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
boards:
2+
- name: imx8mp_var_dart
3+
full_name: DART-MX8M-PLUS
4+
vendor: variscite
5+
socs:
6+
- name: mimx8ml8
7+
variants:
8+
- name: ddr
9+
cpucluster: m7
Binary file not shown.
Lines changed: 276 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,276 @@
1+
.. zephyr:board:: imx8mp_var_dart
2+
3+
Overview
4+
********
5+
6+
Variscite's DART-MX8M-PLUS System on Module (SoM) is based on the i.MX 8M Plus family,
7+
which is a set of NXP products built to achieve both high performance and low power
8+
consumption and relies on a powerful, fully coherent core complex based on a quad Cortex®-A53
9+
cluster and Cortex®-M7 low-power coprocessor, audio digital signal processor, machine learning
10+
and graphics accelerators.
11+
12+
Zephyr OS is ported to run on either the Cortex®-A53 or the Cortex®-M7.
13+
14+
Specs Summary
15+
***************
16+
17+
- CPU
18+
19+
- NXP i.MX8M Plus:
20+
- Up to 4x Cortex®-A53 @ 1.8GHz
21+
- 1x Cortex®-M7 @ 800 MHz
22+
- 1x NPU 2.3 TOPS
23+
- Memory
24+
25+
- Up to 8GB LPDDR4 RAM @ 2000MHz
26+
- 8-bit up to 128GB eMMC boot and storage
27+
- GPU
28+
29+
- 3D: Vivante™ GC7000UltraLite (2 shaders) OpenGL ES 3.0, OpenCL1.2, Vulkan
30+
- 2D: Vivante™ GC520L
31+
- NPU (Neural Processing Unit)
32+
33+
- 2.3 TOPS Neural Network performance
34+
- Display
35+
36+
- 2x LVDS interface 4-lane each up to 1080p60
37+
- HDMI 2.0a up to 4Kp30
38+
- 1x MIPI DSI with up to 4 data lanes 1080p60
39+
- Network
40+
41+
- 2x 10/100/1000 Mbit/s Ethernet Interface
42+
- Certified Wi-Fi 6 dual-band 802.11ax/ac/a/b/g/n with optional 802.15.4
43+
- Bluetooth/BLE 5.4
44+
- Camera
45+
46+
- Up to 2x MIPI CSI – CMOS Serial camera Interface 4 lanes
47+
- 375 Mpixel/s HDR ISP (Image Sensor Processor)
48+
- Audio
49+
50+
- Headphones
51+
- Microphone: Digital, Analog (stereo)
52+
- 6x I2S(SAI), S/PDIF RX TX, PDM 8CH, Line In/Out
53+
- USB
54+
55+
- 2x USB 3.0/2.0 Host/Device
56+
- Serial interfaces
57+
58+
- SPI: x3
59+
- I2C: x5
60+
- UART: x4, up to 5 Mbps
61+
- CAN: x2
62+
- Temperature range
63+
64+
- -40°C to 85°C
65+
66+
More information about the SoM can be found at the
67+
`Variscite Wiki`_ and
68+
`Variscite website`_.
69+
70+
Supported Features
71+
==================
72+
73+
.. zephyr:board-supported-hw::
74+
75+
.. note::
76+
77+
It is recommended to disable peripherals used by the M7 core on the Linux host.
78+
79+
Devices
80+
========
81+
System Clock
82+
------------
83+
84+
This board configuration uses a system clock frequency of 8 MHz.
85+
86+
The M7 core is configured to run at an 800 MHz clock speed.
87+
88+
Serial Port
89+
-----------
90+
91+
This board configuration uses a single serial communication channel with the
92+
CPU's UART3.
93+
94+
Programming and Debugging (A53)
95+
*******************************
96+
97+
Copy the compiled ``zephyr.bin`` to the boot directory of the SD card and
98+
plug the SD card into the board. Power it up and stop the U-Boot execution at
99+
prompt.
100+
101+
Use U-Boot to load and run zephyr.bin on the Cortex-A53:
102+
103+
.. code-block:: console
104+
105+
load mmc $mmcdev:$mmcpart $loadaddr /boot/zephyr.bin
106+
dcache flush; icache flush; go $loadaddr
107+
108+
Use this configuration to run basic Zephyr applications and kernel tests,
109+
for example, with the :zephyr:code-sample:`hello_world` sample:
110+
111+
.. zephyr-app-commands::
112+
:zephyr-app: samples/hello_world
113+
:host-os: unix
114+
:board: imx8mp_var_dart/mimx8ml8/a53
115+
:goals: build
116+
117+
This will build an image with the hello_world sample app. When loaded and executed
118+
it will display the following ram console output:
119+
120+
.. code-block:: console
121+
122+
*** Booting Zephyr OS build v4.0.0-3113-g5aeda6fe7dfa ***
123+
Hello World! imx8mp_var_dart/mimx8ml8/a53
124+
125+
126+
Programming and Debugging (M7)
127+
******************************
128+
129+
.. zephyr:board-supported-runners::
130+
131+
The DART-MX8M-PLUS doesn't have QSPI flash for the M7, and it needs to be
132+
started by the A53 core. The A53 core is responsible to load the M7 binary
133+
application into the RAM, put the M7 in reset, set the M7 Program Counter and
134+
Stack Pointer, and get the M7 out of reset. The A53 can perform these steps at
135+
bootloader level or after the Linux system has booted.
136+
137+
The M7 can use up to 3 different RAMs (currently, only two configurations are
138+
supported: ITCM and DDR). These are the memory mapping for A53 and M7:
139+
140+
+------------+-------------------------+------------------------+-----------------------+----------------------+
141+
| Region | Cortex-A53 | Cortex-M7 (System Bus) | Cortex-M7 (Code Bus) | Size |
142+
+============+=========================+========================+=======================+======================+
143+
| OCRAM | 0x00900000-0x0098FFFF | 0x20200000-0x2028FFFF | 0x00900000-0x0098FFFF | 576KB |
144+
+------------+-------------------------+------------------------+-----------------------+----------------------+
145+
| DTCM | 0x00800000-0x0081FFFF | 0x20000000-0x2001FFFF | | 128KB |
146+
+------------+-------------------------+------------------------+-----------------------+----------------------+
147+
| ITCM | 0x007E0000-0x007FFFFF | | 0x00000000-0x0001FFFF | 128KB |
148+
+------------+-------------------------+------------------------+-----------------------+----------------------+
149+
| OCRAM_S | 0x00180000-0x00188FFF | 0x20180000-0x20188FFF | 0x00180000-0x00188FFF | 36KB |
150+
+------------+-------------------------+------------------------+-----------------------+----------------------+
151+
| DDR | 0x80000000-0x803FFFFF | 0x7B200000-0x7B3FFFFF | 0x7B000000-0x7B1FFFFF | 2MB |
152+
+------------+-------------------------+------------------------+-----------------------+----------------------+
153+
154+
For more information about memory mapping see the
155+
`i.MX 8M Applications Processor Reference Manual`_ (section 2.1 to 2.3)
156+
157+
At compilation time you have to choose which RAM will be used. This
158+
configuration is done based on board name (e.g. imx8mp_var_dart/mimx8ml8/m7
159+
for ITCM and imx8mp_var_dart/mimx8ml8/m7/ddr for DDR).
160+
161+
There are two methods to load M7 Core images: U-Boot command and Linux remoteproc.
162+
163+
Load and Run M7 Zephyr Image from U-Boot
164+
========================================
165+
166+
Load and run Zephyr on M7 from A53 using U-Boot by copying the compiled
167+
``zephyr.bin`` to the boot directory of the SD card and plug the SD
168+
card into the board. Power it up and stop the U-Boot execution at prompt.
169+
170+
Load the M7 binary onto the desired memory and start its execution using:
171+
172+
ITCM
173+
====
174+
175+
.. code-block:: console
176+
177+
load mmc 1:1 0x48000000 /boot/zephyr.bin
178+
cp.b 0x48000000 0x7e0000 20000
179+
bootaux 0x7e0000
180+
181+
DDR
182+
===
183+
184+
.. code-block:: console
185+
186+
load mmc 1:1 0x7b000000 /boot/zephyr.bin
187+
dcache flush
188+
bootaux 0x7b000000
189+
190+
Load and Run M7 Zephyr Image by using Linux remoteproc
191+
======================================================
192+
193+
Transfer built binaries ``zephyr.bin`` and ``zephyr.elf`` to the SoM's ``/boot`` and
194+
``/lib/firmware`` respectively using ``scp`` or through an USB drive.
195+
196+
It is possible to execute Zephyr binaries using Variscite remoteproc scripts made
197+
for MCUXpresso binaries:
198+
199+
.. code-block:: console
200+
201+
root@imx8mp-var-dart:~# /etc/remoteproc/variscite-rproc-linux -f /lib/firmware/zephyr.elf
202+
[ 212.888118] remoteproc remoteproc0: powering up imx-rproc
203+
[ 212.899215] remoteproc remoteproc0: Booting fw image zephyr.elf, size 515836
204+
[ 212.912070] remoteproc remoteproc0: No resource table in elf
205+
[ 213.444675] remoteproc remoteproc0: remote processor imx-rproc is now up
206+
207+
Which should yield the following result on the UART3 serial console:
208+
209+
.. code-block:: console
210+
211+
*** Booting Zephyr OS build v4.0.0-3113-g5aeda6fe7dfa ***
212+
Hello World! imx8mp_var_dart/mimx8ml8/m7
213+
214+
If the device tree dedicated to be used with Cortex-M7 applications is not being
215+
currently used, the script will give instructions on how to do so:
216+
217+
.. code-block:: console
218+
219+
Error: /sys/class/remoteproc/remoteproc0 not found.
220+
Please enable remoteproc driver.
221+
Most likely you need to use the correct device tree, for example:
222+
fw_setenv fdt_file imx8mp-var-dart-dt8mcustomboard-m7.dtb && reboot
223+
224+
You can also configure U-Boot to load firmware on boot:
225+
226+
.. code-block:: console
227+
228+
root@imx8mp-var-dart:~# /etc/remoteproc/variscite-rproc-u-boot -f /boot/zephyr.bin
229+
Configuring for TCM memory
230+
+ fw_setenv m7_addr 0x7E0000
231+
+ fw_setenv fdt_file imx8mp-var-dart-dt8mcustomboard-m7.dtb
232+
+ fw_setenv use_m7 yes
233+
+ fw_setenv m7_bin zephyr.bin
234+
235+
Finished: Please reboot, the m7 firmware will run during U-Boot
236+
237+
For more information about Variscite remoteproc scripts and general Cortex-M7
238+
support, visit `Variscite Wiki`_.
239+
240+
Debugging
241+
=========
242+
243+
DART-MX8M-PLUS board can be debugged by connecting an external
244+
JLink JTAG debugger to the J29 of the DT8MCustomBoard and to the PC.
245+
Then the application can be debugged using the usual way.
246+
247+
Here is an example for the :zephyr:code-sample:`hello_world` application.
248+
249+
.. zephyr-app-commands::
250+
:zephyr-app: samples/hello_world
251+
:board: imx8mp_var_dart/mimx8ml8/m7
252+
:goals: debug
253+
254+
Open a serial terminal, step through the application in your debugger, and you
255+
should see the following message in the terminal:
256+
257+
.. code-block:: console
258+
259+
*** Booting Zephyr OS build v4.0.0-3113-g5aeda6fe7dfa ***
260+
Hello World! imx8mp_var_dart/mimx8ml8/m7
261+
262+
References
263+
==========
264+
265+
- `Variscite Wiki`_
266+
- `Variscite website`_
267+
- `i.MX 8M Applications Processor Reference Manual`_
268+
269+
.. _Variscite Wiki:
270+
https://variwiki.com/index.php?title=DART-MX8M-PLUS
271+
272+
.. _Variscite website:
273+
https://www.variscite.com/product/system-on-module-som/cortex-a53-krait/dart-mx8m-plus-nxp-i-mx-8m-plus
274+
275+
.. _i.MX 8M Applications Processor Reference Manual:
276+
https://www.nxp.com/webapp/Download?colCode=IMX8MPRM
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/*
2+
* Copyright 2025 Variscite Ltd.
3+
* Copyright 2022-2024 NXP
4+
* SPDX-License-Identifier: Apache-2.0
5+
*
6+
*/
7+
8+
#include <nxp/nxp_imx/mimx8ml8dvnlz-pinctrl.dtsi>
9+
10+
&pinctrl {
11+
uart1_default: uart1_default {
12+
group0 {
13+
pinmux = <&iomuxc_uart1_rxd_uart_rx_uart1_rx>,
14+
<&iomuxc_uart1_txd_uart_tx_uart1_tx>;
15+
bias-pull-up;
16+
slew-rate = "slow";
17+
drive-strength = "x1";
18+
};
19+
};
20+
21+
uart3_default: uart3_default {
22+
group0 {
23+
pinmux = <&iomuxc_uart3_rxd_uart_rx_uart3_rx>,
24+
<&iomuxc_uart3_txd_uart_tx_uart3_tx>;
25+
bias-pull-up;
26+
slew-rate = "slow";
27+
drive-strength = "x1";
28+
};
29+
};
30+
31+
uart4_default: uart4_default {
32+
group0 {
33+
pinmux = <&iomuxc_uart4_rxd_uart_rx_uart4_rx>,
34+
<&iomuxc_uart4_txd_uart_tx_uart4_tx>;
35+
bias-pull-up;
36+
slew-rate = "slow";
37+
drive-strength = "x1";
38+
};
39+
};
40+
};
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/*
2+
* Copyright 2025 Variscite Ltd.
3+
* Copyright (c) 2021, Laird Connectivity
4+
*
5+
* SPDX-License-Identifier: Apache-2.0
6+
*/
7+
8+
#include <nxp/nxp_imx8ml_m7.dtsi>
9+
10+
/ {
11+
soc {
12+
uart3: uart@30880000 {
13+
compatible = "nxp,imx-iuart";
14+
reg = <0x30880000 0x10000>;
15+
interrupts = <28 3>;
16+
clocks = <&ccm IMX_CCM_UART3_CLK 0x68 12>;
17+
status = "disabled";
18+
};
19+
};
20+
};

0 commit comments

Comments
 (0)