Skip to content

Commit 027c66a

Browse files
hiagofrancocfriedt
authored andcommitted
boards: verdin_am62: add initial support
Add initial support for Toradex Verdin AM62. Signed-off-by: Hiago De Franco <[email protected]>
1 parent a584e36 commit 027c66a

File tree

7 files changed

+227
-0
lines changed

7 files changed

+227
-0
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# Toradex Verdin AM62
2+
#
3+
# Copyright (c) 2025 Toradex
4+
#
5+
# SPDX-License-Identifier: Apache-2.0
6+
7+
config BOARD_VERDIN_AM62
8+
select SOC_AM6234_M4 if BOARD_VERDIN_AM62_AM6234_M4
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
board:
2+
name: verdin_am62
3+
full_name: Verdin AM62
4+
vendor: toradex
5+
socs:
6+
- name: am6234
25.8 KB
Loading
Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
.. zephyr:board:: verdin_am62
2+
3+
Overview
4+
********
5+
6+
The Verdin-AM62 board configuration is used by Zephyr applications that run on
7+
the TI AM62x platform. The board configuration provides support for:
8+
9+
- ARM Cortex-M4F MCU core and the following features:
10+
11+
- Nested Vector Interrupt Controller (NVIC)
12+
- System Tick System Clock (SYSTICK)
13+
14+
The board configuration also enables support for the semihosting debugging console.
15+
16+
See the `Toradex Verdin AM62 Product Page`_ for details.
17+
18+
Hardware
19+
********
20+
21+
The Toradex Verdin AM62 is a System on Module (SoM) based on the Texas Instruments AM62x family of
22+
processors. It features up to four Arm® Cortex®-A53 cores, a Cortex®-M4F real-time core, and
23+
dedicated peripherals such as PRU cores.
24+
25+
Zephyr is ported to run on the M4F core. The following listed hardware specifications are used:
26+
27+
- Low-power ARM Cortex-M4F
28+
- Memory
29+
30+
- 256KB of SRAM
31+
- 16MB of DDR4 (can go from 512MB to 2GB maximum)
32+
33+
Supported Features
34+
==================
35+
36+
.. zephyr:board-supported-hw::
37+
38+
Devices
39+
========
40+
System Clock
41+
------------
42+
43+
This board configuration uses a system clock frequency of 400 MHz.
44+
45+
DDR RAM
46+
-------
47+
48+
The board can have from 512MB up to 2GB of DDR RAM. This board configuration allocates approximately
49+
16MB of RAM, which includes the resource table, shared memories for IPC and SRAM to be used by the
50+
cortex-M.
51+
52+
Serial Port
53+
-----------
54+
55+
This board configuration uses a single serial communication channel with the
56+
MCU domain UART (MCU_UART0).
57+
58+
Programming the M4F Core
59+
************************
60+
61+
Cortex-M4F core can be programmed by remoteproc on both Linux Kernel or U-Boot bootloader. For the
62+
Linux kernel, the remoteproc uses the resource table to load the firmware into the Cortex-M4F.
63+
64+
To test the M4F core, build the :zephyr:code-sample:`hello_world` sample with the following command:
65+
66+
.. code-block:: console
67+
68+
# From the root of the Zephyr repository
69+
west build -p -b verdin_am62/am6234/m4 samples/hello_world
70+
71+
This builds the binary, which is located at :file:`build/zephyr` directory as :file:`zephyr.elf`.
72+
73+
This binary needs to be copied to Verdin AN62 (can be copied to the eMMC, use an SD card, usb
74+
stick...) and place it on :file:`/lib/firmware` directory and name it as :file:`am62-mcu-m4f0_0-fw`.
75+
After that, it can be loaded by Linux remoteproc with the following commands:
76+
77+
.. code-block:: console
78+
79+
echo start > /sys/class/remoteproc/remoteproc0/state
80+
81+
The binary will run and print Hello world to the MCU_UART0 port.
82+
83+
If instead it is desired to load it with U-Boot, the following commands can be executed into the
84+
bootloader terminal:
85+
86+
.. code-block:: console
87+
88+
rproc init
89+
rproc list
90+
load mmc 0:2 ${loadaddr} /lib/firmware/am62-mcu-m4f0_0-fw
91+
rproc load ${loadaddr} 0 0x${filesize}
92+
rproc start 0
93+
94+
.. hint::
95+
For both remoteproc examples, check the id of the remote processor to make sure the firmware is
96+
being loaded into the correct core.
97+
98+
When the core starts, in this case with the hello world sample, this will be shown into the UART
99+
from the cortex-m (which will be /dev/ttyUSB2 for both Dahlia and Verdin Development boards):
100+
101+
.. code-block:: console
102+
103+
*** Booting Zephyr OS build v4.2.0-1172-g242870ac3feb ***
104+
Hello World! verdin_am62/am6234/m4
105+
106+
References
107+
**********
108+
109+
.. _Toradex Verdin AM62 Product Page:
110+
https://www.toradex.com/computer-on-modules/verdin-arm-family/ti-am62
111+
112+
.. _Toradex Verdin AM62 Developer Page:
113+
https://developer.toradex.com/hardware/verdin-som-family/modules/verdin-am62/
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
/*
2+
* Copyright (c) 2025 Toradex
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
/dts-v1/;
8+
9+
#include <ti/am62x_m4.dtsi>
10+
11+
/ {
12+
model = "Toradex Verdin AM62";
13+
compatible = "toradex,verdin_am62";
14+
15+
chosen {
16+
zephyr,console = &uart0;
17+
zephyr,ipc = &ipc0;
18+
zephyr,ipc_shm = &ddr0;
19+
zephyr,shell-uart = &uart0;
20+
zephyr,sram = &sram0;
21+
zephyr,sram1 = &ddr1;
22+
};
23+
24+
cpus {
25+
cpu@0 {
26+
clock-frequency = <DT_FREQ_M(400)>;
27+
status = "okay";
28+
};
29+
};
30+
31+
ipc0: ipc {
32+
compatible = "zephyr,mbox-ipm";
33+
mboxes = <&mbox0 0>, <&mbox0 1>;
34+
mbox-names = "tx", "rx";
35+
};
36+
37+
ddr0: memory@9cb00000 {
38+
compatible = "mmio-sram";
39+
reg = <0x9cb00000 DT_SIZE_M(1)>;
40+
};
41+
42+
rsc_table: memory@9cc00000 {
43+
compatible = "zephyr,memory-region", "mmio-sram";
44+
reg = <0x9cc00000 DT_SIZE_K(4)>;
45+
zephyr,memory-region = "RSC_TABLE";
46+
};
47+
48+
ddr1: memory@9cc01000 {
49+
compatible = "zephyr,memory-region", "mmio-sram";
50+
reg = <0x9cc01000 (DT_SIZE_M(15) - DT_SIZE_K(4))>;
51+
zephyr,memory-region = "DDR";
52+
};
53+
};
54+
55+
&mbox0 {
56+
status = "okay";
57+
};
58+
59+
&pinctrl {
60+
mcu_uart0_rx_default: mcu_uart0_rx_default {
61+
pinmux = <K3_PINMUX(0x0014, PIN_INPUT, MUX_MODE_0)>;
62+
};
63+
64+
mcu_uart0_tx_default: mcu_uart0_tx_default {
65+
pinmux = <K3_PINMUX(0x0018, PIN_OUTPUT, MUX_MODE_0)>;
66+
};
67+
};
68+
69+
&uart0 {
70+
current-speed = <115200>;
71+
pinctrl-0 = <&mcu_uart0_rx_default &mcu_uart0_tx_default>;
72+
pinctrl-names = "default";
73+
status = "okay";
74+
};
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
identifier: verdin_am62/am6234/m4
2+
name: Toradex Verdin AM62
3+
type: mcu
4+
arch: arm
5+
toolchain:
6+
- zephyr
7+
ram: 192
8+
vendor: toradex
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Toradex Verdin AM62
2+
#
3+
# Copyright (c) 2025 Toradex
4+
#
5+
# SPDX-License-Identifier: Apache-2.0
6+
7+
# Platform Configuration
8+
CONFIG_CORTEX_M_SYSTICK=y
9+
10+
# Zephyr Kernel Configuration
11+
CONFIG_XIP=n
12+
13+
# Serial Driver
14+
CONFIG_SERIAL=y
15+
16+
# Enable Console
17+
CONFIG_CONSOLE=y
18+
CONFIG_UART_CONSOLE=y

0 commit comments

Comments
 (0)