Skip to content

Commit d3ecec1

Browse files
morishitaandrekartben
authored andcommitted
boards: variscite: Add Variscite DART-MX93 board
Add Variscite DART-MX93 board support. This SoM is based on NXP's i.MX93 SoC. It includes Cortex-A55 and Cortex-M33 support. Signed-off-by: Andre Morishita <andre.m@variscite.com>
1 parent aa3af71 commit d3ecec1

13 files changed

+507
-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 2022,2024 NXP
3+
# SPDX-License-Identifier: Apache-2.0
4+
5+
config BOARD_IMX93_VAR_DART
6+
select SOC_MIMX9352_A55 if BOARD_IMX93_VAR_DART_MIMX9352_A55
7+
select SOC_MIMX9352_M33 if BOARD_IMX93_VAR_DART_MIMX9352_M33
8+
select SOC_PART_NUMBER_MIMX9352DVVXM
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# Copyright 2025 Variscite Ltd.
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
if(CONFIG_SOC_MIMX9352_M33)
5+
board_set_debugger_ifnset(jlink)
6+
board_set_flasher_ifnset(jlink)
7+
8+
board_runner_args(jlink "--device=MIMX9352_M33")
9+
include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake)
10+
endif()
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
boards:
2+
- name: imx93_var_dart
3+
full_name: DART-MX93
4+
vendor: variscite
5+
socs:
6+
- name: mimx9352
Binary file not shown.
Lines changed: 214 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,214 @@
1+
.. zephyr:board:: imx93_var_dart
2+
3+
Overview
4+
********
5+
6+
The DART-MX93 offers a high-performance processing for a low-power System-on-Module.
7+
The product is based on the i.MX 93 family which represents NXP’s latest power-optimized
8+
processors for smart home, building control, contactless HMI, IoT edge, and Industrial
9+
applications.
10+
11+
The i.MX 93 includes powerful dual Arm® Cortex®-A55 processors with speeds up to 1.7 GHz
12+
integrated with a NPU that accelerates machine learning inference. A general-purpose Arm®
13+
Cortex®-M33 running up to 250 MHz is for real-time and low-power processing. Robust control
14+
networks are possible via CAN-FD interface. Also, dual 1 Gbps Ethernet controllers, one
15+
supporting Time Sensitive Networking (TSN), drive gateway applications with low latency.
16+
17+
Zephyr OS is ported to run on either the Cortex®-A55 or the Cortex®-M33.
18+
19+
Specs Summary
20+
*************
21+
22+
- CPU
23+
24+
- NXP i.MX 93:
25+
- 2x Cortex®-A55 @ 1.7GHz
26+
- 1x Cortex®-M33 @ 250 MHz
27+
- 1x Ethos-U65 microNPU 0.5 TOPS
28+
- Memory
29+
30+
- Up to 2GB LPDDR4 RAM
31+
- GPU
32+
33+
- PXP 2D Pixel acceleration engine
34+
- NPU (Neural Processing Unit)
35+
36+
- Neural Network performance (256 MACs operating up to 1.0 GHz and 2 OPS/MAC)
37+
- NPU targets 8-bit and 16-bit integer RNN
38+
- Handles 8-bit weights
39+
- Display
40+
41+
- LVDS up to 1366x768p60 or 1280x800p60
42+
- Parallel RGB up to 1366x768p60 or 1280x800p60
43+
- 1x MIPI DSI up to 1920x1200p60 24-bit
44+
- Network
45+
46+
- 2x 10/100/1000 Mbit/s Ethernet Interface
47+
- Certified Wi-Fi 802.11ax/ac/a/b/g/n
48+
- Bluetooth/BLE 5.4
49+
- Camera
50+
51+
- One 2-lane MIPI CSI-2 camera input
52+
- Audio
53+
54+
- Headphones
55+
- Microphone: Digital, Analog (stereo)
56+
- 3x I2S(SAI), S/PDIF, PDM 4CH
57+
- USB
58+
59+
- 2x USB 2.0 OTG
60+
- Serial interfaces
61+
62+
- SPI: x7
63+
- I2C: x7
64+
- UART: x7, up to 5 Mbps
65+
- CAN: x2
66+
- Temperature range
67+
68+
- -40°C to 85°C
69+
70+
More information about the SoM can be found at the
71+
`Variscite Wiki`_ and
72+
`Variscite website`_.
73+
74+
Supported Features
75+
==================
76+
77+
.. zephyr:board-supported-hw::
78+
79+
.. note::
80+
81+
It is recommended to disable peripherals used by the M33 core on the Linux host.
82+
83+
Devices
84+
========
85+
System Clock
86+
------------
87+
88+
This board configuration uses a system clock frequency of 24 MHz.
89+
Cortex-A55 Core runs up to 1.7 GHz.
90+
Cortex-M33 Core runs up to 200MHz in which SYSTICK runs on same frequency.
91+
92+
Serial Port
93+
-----------
94+
95+
This board configuration uses a single serial communication channel with the
96+
CPU's UART7 for A55 core and M33 core.
97+
98+
Programming and Debugging (A55)
99+
*******************************
100+
101+
Copy the compiled ``zephyr.bin`` to the boot directory of the SD card and
102+
plug the SD card into the board. Power it up and stop the U-Boot execution at
103+
prompt.
104+
105+
Use U-Boot to load and run zephyr.bin on the Cortex-A55:
106+
107+
.. code-block:: console
108+
109+
load mmc $mmcdev:$mmcpart $loadaddr /boot/zephyr.bin
110+
dcache off; icache flush; go $loadaddr
111+
112+
Use this configuration to run basic Zephyr applications and kernel tests,
113+
for example, with the :zephyr:code-sample:`hello_world` sample:
114+
115+
.. zephyr-app-commands::
116+
:zephyr-app: samples/hello_world
117+
:host-os: unix
118+
:board: imx93_var_dart/mimx9352/a55
119+
:goals: build
120+
121+
This will build an image with the hello_world sample app. When loaded and executed
122+
it will display the following ram console output:
123+
124+
.. code-block:: console
125+
126+
*** Booting Zephyr OS build v4.0.0-44-g93cbaccbbc41 ***
127+
Hello World! imx93_var_dart/mimx9352/a55
128+
129+
130+
Programming and Debugging (M33)
131+
*******************************
132+
133+
.. zephyr:board-supported-runners::
134+
135+
There are two methods to load M33 Core images: U-Boot command and Linux remoteproc.
136+
137+
Load and Run M33 Zephyr Image from U-Boot
138+
=========================================
139+
140+
Load and run Zephyr on M33 from A55 using U-Boot by copying the compiled
141+
``zephyr.bin`` to the boot directory of the SD card and plug the SD
142+
card into the board. Power it up and stop the U-Boot execution at prompt.
143+
144+
Load the M33 binary onto the desired memory and start its execution using:
145+
146+
.. code-block:: console
147+
148+
load mmc $mmcdev:$mmcpart 0x80000000 /boot/zephyr.bin
149+
cp.b 0x80000000 0x201e0000 0x30000
150+
bootaux 0x1ffe0000 0
151+
152+
Load and Run M33 Zephyr Image by using Linux remoteproc
153+
=======================================================
154+
155+
Transfer built binaries ``zephyr.bin`` and ``zephyr.elf`` to the SoM's ``/boot`` and
156+
``/lib/firmware`` respectively using ``scp`` or through an USB drive.
157+
158+
Before running Cortex-M33 binaries from Linux it is necessary to enable the device tree
159+
dedicated to be used with Cortex-M33 applications:
160+
161+
.. code-block:: console
162+
163+
root@imx93-var-som:~# fw_setenv fdt_file imx93-var-dart-dt8mcustomboard-m33.dtb
164+
root@imx93-var-som:~# reboot
165+
166+
It is possible to execute Zephyr binaries using Variscite remoteproc scripts made
167+
for MCUXpresso binaries:
168+
169+
.. code-block:: console
170+
171+
root@imx93-var-som:~# /etc/remoteproc/variscite-rproc-linux -f /lib/firmware/zephyr.elf
172+
[ 125.449838] remoteproc remoteproc0: powering up imx-rproc
173+
[ 125.459162] remoteproc remoteproc0: Booting fw image zephyr.elf, size 469356
174+
[ 125.468958] remoteproc remoteproc0: No resource table in elf
175+
[ 125.987142] remoteproc remoteproc0: remote processor imx-rproc is now up
176+
177+
Which should yield the following result on the UART7 serial console:
178+
179+
.. code-block:: console
180+
181+
*** Booting Zephyr OS build v4.0.0-44-g93cbaccbbc41 ***
182+
Hello World! imx93_var_dart/mimx9352/m33
183+
184+
You can also configure U-Boot to load firmware on boot:
185+
186+
.. code-block:: console
187+
188+
root@imx93-var-som:~# /etc/remoteproc/variscite-rproc-u-boot -f /boot/zephyr.bin
189+
Configuring for TCM memory
190+
+ fw_setenv m33_addr 0x201E0000
191+
+ fw_setenv fdt_file imx93-var-dart-dt8mcustomboard-m33.dtb
192+
+ fw_setenv use_m33 yes
193+
+ fw_setenv m33_bin zephyr.bin
194+
195+
Finished: Please reboot, the m33 firmware will run during U-Boot
196+
197+
For more information about Variscite remoteproc scripts and general Cortex-M33
198+
support, visit `Variscite Wiki`_.
199+
200+
References
201+
==========
202+
203+
- `Variscite Wiki`_
204+
- `Variscite website`_
205+
- `NXP website`_
206+
207+
.. _Variscite Wiki:
208+
https://variwiki.com/index.php?title=DART-MX93
209+
210+
.. _Variscite website:
211+
https://www.variscite.com/product/system-on-module-som/cortex-a55/dart-mx93-nxp-i-mx93/
212+
213+
.. _NXP website:
214+
https://www.nxp.com/products/processors-and-microcontrollers/arm-processors/i-mx-applications-processors/i-mx-9-processors/i-mx-93-applications-processor-family-arm-cortex-a55-ml-acceleration-power-efficient-mpu:i.MX93
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
/*
2+
* Copyright 2025 Variscite Ltd.
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
#include <nxp/nxp_imx93_m33.dtsi>
8+
9+
/ {
10+
soc {
11+
lpuart7: serial@42690000 {
12+
compatible = "nxp,imx-lpuart", "nxp,lpuart";
13+
reg = <0x42690000 DT_SIZE_K(64)>;
14+
interrupts = <20 3>;
15+
clocks = <&ccm IMX_CCM_LPUART7_CLK 0x6c 24>;
16+
status = "disabled";
17+
};
18+
};
19+
};
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
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/mimx9352cvuxk-pinctrl.dtsi>
9+
10+
&pinctrl {
11+
uart1_default: uart1_default {
12+
group0 {
13+
pinmux = <&iomuxc1_uart1_rxd_lpuart_rx_lpuart1_rx>,
14+
<&iomuxc1_uart1_txd_lpuart_tx_lpuart1_tx>;
15+
bias-pull-up;
16+
slew-rate = "slightly_fast";
17+
drive-strength = "x5";
18+
};
19+
};
20+
21+
uart7_default: uart7_default {
22+
group0 {
23+
pinmux = <&iomuxc1_gpio_io09_lpuart_rx_lpuart7_rx>,
24+
<&iomuxc1_gpio_io08_lpuart_tx_lpuart7_tx>;
25+
bias-pull-up;
26+
slew-rate = "slightly_fast";
27+
drive-strength = "x5";
28+
};
29+
};
30+
31+
};
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
/*
2+
* Copyright 2025 Variscite Ltd.
3+
* Copyright 2022,2024 NXP
4+
*
5+
* SPDX-License-Identifier: Apache-2.0
6+
*/
7+
8+
/dts-v1/;
9+
10+
#include <nxp/nxp_mimx93_a55.dtsi>
11+
#include "imx93_var_dart-pinctrl.dtsi"
12+
#include <zephyr/dt-bindings/gpio/gpio.h>
13+
#include <zephyr/dt-bindings/input/input-event-codes.h>
14+
15+
/ {
16+
model = "Variscite DART-MX93 A55";
17+
compatible = "fsl,mimx93";
18+
19+
chosen {
20+
zephyr,console = &lpuart7;
21+
zephyr,shell-uart = &lpuart7;
22+
zephyr,sram = &sram0;
23+
};
24+
25+
cpus {
26+
cpu@0 {
27+
status = "disabled";
28+
};
29+
};
30+
31+
sram0: memory@80400000 {
32+
reg = <0x80400000 DT_SIZE_M(1)>;
33+
};
34+
35+
lpuart7: serial@42690000 {
36+
compatible = "nxp,imx-lpuart", "nxp,lpuart";
37+
reg = <0x42690000 DT_SIZE_K(64)>;
38+
interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
39+
interrupt-names = "irq_0";
40+
interrupt-parent = <&gic>;
41+
clocks = <&ccm IMX_CCM_LPUART7_CLK 0x6c 24>;
42+
status = "okay";
43+
current-speed = <115200>;
44+
pinctrl-0 = <&uart7_default>;
45+
pinctrl-names = "default";
46+
};
47+
48+
aliases {
49+
led0 = &blinky0;
50+
sw0 = &button0;
51+
};
52+
53+
leds {
54+
compatible = "gpio-leds";
55+
56+
blinky0: blinky_0 {
57+
gpios = <&gpio4 1 GPIO_ACTIVE_HIGH>;
58+
};
59+
};
60+
61+
keys {
62+
compatible = "gpio-keys";
63+
64+
button0: btn_0 {
65+
label = "BTN0";
66+
gpios = <&gpio2 27 (GPIO_PULL_UP|GPIO_ACTIVE_LOW)>;
67+
zephyr,code = <INPUT_KEY_0>;
68+
};
69+
};
70+
};
71+
72+
&gpio2 {
73+
status = "okay";
74+
};
75+
76+
&gpio4 {
77+
status = "okay";
78+
};
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#
2+
# Copyright 2025 Variscite Ltd.
3+
# Copyright 2024 NXP
4+
#
5+
# SPDX-License-Identifier: Apache-2.0
6+
#
7+
8+
identifier: imx93_var_dart/mimx9352/a55
9+
name: Variscite DART-MX93 A55
10+
type: mcu
11+
arch: arm64
12+
toolchain:
13+
- zephyr
14+
- cross-compile
15+
ram: 1024
16+
supported:
17+
- gpio
18+
- uart
19+
testing:
20+
ignore_tags:
21+
- bluetooth

0 commit comments

Comments
 (0)