From 40a3d1e3651ae5fee84ad1f2c340febda4431341 Mon Sep 17 00:00:00 2001 From: Andre Morishita Date: Fri, 24 Jan 2025 16:24:12 -0300 Subject: [PATCH] boards: variscite: Add Variscite VAR-SOM-MX8M-PLUS board Add Variscite VAR-SOM-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 --- .../imx8mp_var_som/Kconfig.imx8mp_var_som | 8 + boards/variscite/imx8mp_var_som/board.cmake | 14 + boards/variscite/imx8mp_var_som/board.yml | 9 + .../imx8mp_var_som/doc/imx8mp_var_som.webp | Bin 0 -> 50788 bytes boards/variscite/imx8mp_var_som/doc/index.rst | 277 ++++++++++++++++++ .../imx8mp_var_som-pinctrl.dtsi | 40 +++ .../imx8mp_var_som_mimx8ml8_a53.dts | 78 +++++ .../imx8mp_var_som_mimx8ml8_a53.yaml | 21 ++ .../imx8mp_var_som_mimx8ml8_a53_defconfig | 26 ++ .../imx8mp_var_som_mimx8ml8_m7.dts | 65 ++++ .../imx8mp_var_som_mimx8ml8_m7.yaml | 17 ++ .../imx8mp_var_som_mimx8ml8_m7_ddr.dts | 83 ++++++ .../imx8mp_var_som_mimx8ml8_m7_ddr.yaml | 17 ++ .../imx8mp_var_som_mimx8ml8_m7_ddr_defconfig | 15 + .../imx8mp_var_som_mimx8ml8_m7_defconfig | 13 + boards/variscite/index.rst | 10 + 16 files changed, 693 insertions(+) create mode 100644 boards/variscite/imx8mp_var_som/Kconfig.imx8mp_var_som create mode 100644 boards/variscite/imx8mp_var_som/board.cmake create mode 100644 boards/variscite/imx8mp_var_som/board.yml create mode 100644 boards/variscite/imx8mp_var_som/doc/imx8mp_var_som.webp create mode 100644 boards/variscite/imx8mp_var_som/doc/index.rst create mode 100644 boards/variscite/imx8mp_var_som/imx8mp_var_som-pinctrl.dtsi create mode 100644 boards/variscite/imx8mp_var_som/imx8mp_var_som_mimx8ml8_a53.dts create mode 100644 boards/variscite/imx8mp_var_som/imx8mp_var_som_mimx8ml8_a53.yaml create mode 100644 boards/variscite/imx8mp_var_som/imx8mp_var_som_mimx8ml8_a53_defconfig create mode 100644 boards/variscite/imx8mp_var_som/imx8mp_var_som_mimx8ml8_m7.dts create mode 100644 boards/variscite/imx8mp_var_som/imx8mp_var_som_mimx8ml8_m7.yaml create mode 100644 boards/variscite/imx8mp_var_som/imx8mp_var_som_mimx8ml8_m7_ddr.dts create mode 100644 boards/variscite/imx8mp_var_som/imx8mp_var_som_mimx8ml8_m7_ddr.yaml create mode 100644 boards/variscite/imx8mp_var_som/imx8mp_var_som_mimx8ml8_m7_ddr_defconfig create mode 100644 boards/variscite/imx8mp_var_som/imx8mp_var_som_mimx8ml8_m7_defconfig create mode 100644 boards/variscite/index.rst diff --git a/boards/variscite/imx8mp_var_som/Kconfig.imx8mp_var_som b/boards/variscite/imx8mp_var_som/Kconfig.imx8mp_var_som new file mode 100644 index 00000000000..ce40f0feab1 --- /dev/null +++ b/boards/variscite/imx8mp_var_som/Kconfig.imx8mp_var_som @@ -0,0 +1,8 @@ +# Copyright 2025 Variscite Ltd. +# Copyright 2021-2022, 2024 NXP +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_IMX8MP_VAR_SOM + select SOC_MIMX8ML8_A53 if BOARD_IMX8MP_VAR_SOM_MIMX8ML8_A53 + select SOC_MIMX8ML8_M7 if BOARD_IMX8MP_VAR_SOM_MIMX8ML8_M7 || BOARD_IMX8MP_VAR_SOM_MIMX8ML8_M7_DDR + select SOC_PART_NUMBER_MIMX8ML8DVNLZ diff --git a/boards/variscite/imx8mp_var_som/board.cmake b/boards/variscite/imx8mp_var_som/board.cmake new file mode 100644 index 00000000000..3ca8045e96f --- /dev/null +++ b/boards/variscite/imx8mp_var_som/board.cmake @@ -0,0 +1,14 @@ +# +# Copyright 2025 Variscite Ltd. +# Copyright (c) 2024 NXP +# +# SPDX-License-Identifier: Apache-2.0 +# + +if(CONFIG_SOC_MIMX8ML8_M7) + board_set_debugger_ifnset(jlink) + board_set_flasher_ifnset(jlink) + + board_runner_args(jlink "--device=MIMX8ML8_M7") + include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake) +endif() diff --git a/boards/variscite/imx8mp_var_som/board.yml b/boards/variscite/imx8mp_var_som/board.yml new file mode 100644 index 00000000000..ea092456615 --- /dev/null +++ b/boards/variscite/imx8mp_var_som/board.yml @@ -0,0 +1,9 @@ +boards: + - name: imx8mp_var_som + full_name: VAR-SOM-MX8M-PLUS + vendor: variscite + socs: + - name: mimx8ml8 + variants: + - name: ddr + cpucluster: m7 diff --git a/boards/variscite/imx8mp_var_som/doc/imx8mp_var_som.webp b/boards/variscite/imx8mp_var_som/doc/imx8mp_var_som.webp new file mode 100644 index 0000000000000000000000000000000000000000..ac3c537f00f5313a8f2260475575f6c26da59d09 GIT binary patch literal 50788 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
    xig- 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 JH*c}V004JVgHr$i literal 0 HcmV?d00001 diff --git a/boards/variscite/imx8mp_var_som/doc/index.rst b/boards/variscite/imx8mp_var_som/doc/index.rst new file mode 100644 index 00000000000..6bd3652e670 --- /dev/null +++ b/boards/variscite/imx8mp_var_som/doc/index.rst @@ -0,0 +1,277 @@ +.. zephyr:board:: imx8mp_var_som + +Overview +******** + +Variscite's VAR-SOM-MX8M-PLUS System on Module (SoM) is based on the i.MX 8M Plus family, +which is a set of NXP products built to achieve both high performance and low power +consumption and relies on a powerful, fully coherent core complex based on a quad Cortex®-A53 +cluster and Cortex®-M7 low-power coprocessor, audio digital signal processor, machine learning +and graphics accelerators. + +Zephyr OS is ported to run on either the Cortex®-A53 or the Cortex®-M7. + +Specs Summary +*************** + + - CPU + + - NXP i.MX8M Plus: + - Up to 4x Cortex®-A53 @ 1.8GHz + - 1x Cortex®-M7 @ 800 MHz + - 1x NPU 2.3 TOPS + - Memory + + - Up to 8GB LPDDR4 RAM @ 2000MHz + - 8-bit up to 128GB eMMC boot and storage + - GPU + + - 3D: Vivante™ GC7000UltraLite (2 shaders) OpenGL ES 3.0, OpenCL1.2, Vulkan + - 2D: Vivante™ GC520L + - NPU (Neural Processing Unit) + + - 2.3 TOPS Neural Network performance + - Display + + - 2x LVDS interface 4-lane each up to 1080p60 + - HDMI 2.0a up to 4Kp30 + - 1x MIPI DSI with up to 4 data lanes 1080p60 + - Network + + - 2x 10/100/1000 Mbit/s Ethernet Interface + - Certified Wi-Fi 6 dual-band 802.11ax/ac/a/b/g/n with optional 802.15.4 + - Bluetooth/BLE 5.4 + - Camera + + - Up to 2x MIPI CSI – CMOS Serial camera Interface 4 lanes + - 375 Mpixel/s HDR ISP (Image Sensor Processor) + - Audio + + - Headphones + - Microphone: Digital, Analog (stereo) + - 6x I2S(SAI), S/PDIF RX TX, PDM 8CH, Line In/Out + - USB + + - 2x USB 3.0/2.0 Host/Device + - Serial interfaces + + - SPI: x3 + - I2C: x5 + - UART: x4, up to 5 Mbps + - CAN: x2 + - Temperature range + + - -40°C to 85°C + +More information about the SoM can be found at the +`Variscite Wiki`_ and +`Variscite website`_. + +Supported Features +================== + +.. zephyr:board-supported-hw:: + +.. note:: + + It is recommended to disable peripherals used by the M7 core on the Linux host. + +Devices +======== +System Clock +------------ + +This board configuration uses a system clock frequency of 8 MHz. + +The M7 core is configured to run at an 800 MHz clock speed. + +Serial Port +----------- + +This board configuration uses a single serial communication channel with the +CPU's UART4. + +Programming and Debugging (A53) +******************************* + +Copy the compiled ``zephyr.bin`` to the boot directory of the SD card and +plug the SD card into the board. Power it up and stop the U-Boot execution at +prompt. + +Use U-Boot to load and run zephyr.bin on the Cortex-A53: + +.. code-block:: console + + load mmc $mmcdev:$mmcpart $loadaddr /boot/zephyr.bin + dcache flush; icache flush; go $loadaddr + +Use this configuration to run basic Zephyr applications and kernel tests, +for example, with the :zephyr:code-sample:`hello_world` sample: + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :host-os: unix + :board: imx8mp_var_som/mimx8ml8/a53 + :goals: build + +This will build an image with the hello_world sample app. When loaded and executed +it will display the following ram console output: + +.. code-block:: console + + *** Booting Zephyr OS build v4.0.0-3113-g5aeda6fe7dfa *** + Hello World! imx8mp_var_som/mimx8ml8/a53 + + +Programming and Debugging (M7) +****************************** + +.. zephyr:board-supported-runners:: + +The VAR-SOM-MX8M-PLUS don't have QSPI flash for the M7, and it needs to be +started by the A53 core. The A53 core is responsible to load the M7 binary +application into the RAM, put the M7 in reset, set the M7 Program Counter and +Stack Pointer, and get the M7 out of reset. The A53 can perform these steps at +bootloader level or after the Linux system has booted. + +The M7 can use up to 3 different RAMs (currently, only two configurations are +supported: ITCM and DDR). These are the memory mapping for A53 and M7: + ++------------+-------------------------+------------------------+-----------------------+----------------------+ +| Region | Cortex-A53 | Cortex-M7 (System Bus) | Cortex-M7 (Code Bus) | Size | ++============+=========================+========================+=======================+======================+ +| OCRAM | 0x00900000-0x0098FFFF | 0x20200000-0x2028FFFF | 0x00900000-0x0098FFFF | 576KB | ++------------+-------------------------+------------------------+-----------------------+----------------------+ +| DTCM | 0x00800000-0x0081FFFF | 0x20000000-0x2001FFFF | | 128KB | ++------------+-------------------------+------------------------+-----------------------+----------------------+ +| ITCM | 0x007E0000-0x007FFFFF | | 0x00000000-0x0001FFFF | 128KB | ++------------+-------------------------+------------------------+-----------------------+----------------------+ +| OCRAM_S | 0x00180000-0x00188FFF | 0x20180000-0x20188FFF | 0x00180000-0x00188FFF | 36KB | ++------------+-------------------------+------------------------+-----------------------+----------------------+ +| DDR | 0x80000000-0x803FFFFF | 0x7E200000-0x7E3FFFFF | 0x7E000000-0x7E1FFFFF | 2MB | ++------------+-------------------------+------------------------+-----------------------+----------------------+ + +For more information about memory mapping see the +`i.MX 8M Applications Processor Reference Manual`_ (section 2.1 to 2.3) + +At compilation time you have to choose which RAM will be used. This +configuration is done based on board name (e.g. imx8mp_var_som/mimx8ml8/m7 +for ITCM and imx8mp_var_som/mimx8ml8/m7/ddr for DDR). + +There are two methods to load M7 Core images: U-Boot command and Linux remoteproc. + +Load and Run M7 Zephyr Image from U-Boot +======================================== + +Load and run Zephyr on M7 from A53 using U-Boot by copying the compiled +``zephyr.bin`` to the boot directory of the SD card and plug the SD +card into the board. Power it up and stop the U-Boot execution at prompt. + +Load the M7 binary onto the desired memory and start its execution using: + +ITCM +==== + +.. code-block:: console + + load mmc 1:1 0x48000000 /boot/zephyr.bin + cp.b 0x48000000 0x7e0000 20000 + bootaux 0x7e0000 + +DDR +=== + +.. code-block:: console + + load mmc 1:1 0x7b000000 /boot/zephyr.bin + dcache flush + bootaux 0x7b000000 + +Load and Run M7 Zephyr Image by using Linux remoteproc +====================================================== + +Transfer built binaries ``zephyr.bin`` and ``zephyr.elf`` to the SoM's ``/boot`` and +``/lib/firmware`` respectively using ``scp`` or through an USB drive. + +It is possible to execute Zephyr binaries using Variscite remoteproc scripts made +for MCUXpresso binaries: + +.. code-block:: console + + root@imx8mp-var-dart:~# /etc/remoteproc/variscite-rproc-linux -f /lib/firmware/zephyr.elf + [ 212.888118] remoteproc remoteproc0: powering up imx-rproc + [ 212.899215] remoteproc remoteproc0: Booting fw image zephyr.elf, size 515836 + [ 212.912070] remoteproc remoteproc0: No resource table in elf + [ 213.444675] remoteproc remoteproc0: remote processor imx-rproc is now up + +Which should yield the following result on the UART4 serial console: + +.. code-block:: console + + *** Booting Zephyr OS build v4.0.0-3113-g5aeda6fe7dfa *** + Hello World! imx8mp_var_som/mimx8ml8/m7 + +If the device tree dedicated to be used with Cortex-M7 applications is not being +currently used, the script will give instructions on how to do so: + +.. code-block:: console + + Error: /sys/class/remoteproc/remoteproc0 not found. + Please enable remoteproc driver. + Most likely you need to use the correct device tree, for example: + fw_setenv fdt_file imx8mp-var-som-symphony-m7.dtb && reboot + +You can also configure U-Boot to load firmware on boot: + +.. code-block:: console + + root@imx8mp-var-dart:~# /etc/remoteproc/variscite-rproc-u-boot -f /boot/zephyr.bin + Configuring for TCM memory + + fw_setenv m7_addr 0x7E0000 + + fw_setenv fdt_file imx8mp-var-som-symphony-m7.dtb + + fw_setenv use_m7 yes + + fw_setenv m7_bin zephyr.bin + + Finished: Please reboot, the m7 firmware will run during U-Boot + +For more information about Variscite remoteproc scripts and general Cortex-M7 +support, visit `Variscite Wiki`_. + +Debugging +========= + +VAR-SOM-MX8M-PLUS board can be debugged by connecting an external +JLink JTAG debugger to the 14-pin header on the top left side of +the SoM and to the PC. Then the application can be debugged using +the usual way. + +Here is an example for the :zephyr:code-sample:`hello_world` application. + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: imx8mp_var_som/mimx8ml8/m7 + :goals: debug + +Open a serial terminal, step through the application in your debugger, and you +should see the following message in the terminal: + +.. code-block:: console + + *** Booting Zephyr OS build v4.0.0-3113-g5aeda6fe7dfa *** + Hello World! imx8mp_var_som/mimx8ml8/m7 + +References +========== + +- `Variscite Wiki`_ +- `Variscite website`_ +- `i.MX 8M Applications Processor Reference Manual`_ + +.. _Variscite Wiki: + https://variwiki.com/index.php?title=VAR-SOM-MX8M-PLUS + +.. _Variscite website: + https://www.variscite.com/product/system-on-module-som/cortex-a53-krait/var-som-mx8m-plus-nxp-i-mx-8m-plus + +.. _i.MX 8M Applications Processor Reference Manual: + https://www.nxp.com/webapp/Download?colCode=IMX8MPRM diff --git a/boards/variscite/imx8mp_var_som/imx8mp_var_som-pinctrl.dtsi b/boards/variscite/imx8mp_var_som/imx8mp_var_som-pinctrl.dtsi new file mode 100644 index 00000000000..20cf2d1bdf4 --- /dev/null +++ b/boards/variscite/imx8mp_var_som/imx8mp_var_som-pinctrl.dtsi @@ -0,0 +1,40 @@ +/* + * Copyright 2025 Variscite Ltd. + * Copyright 2022-2024 NXP + * SPDX-License-Identifier: Apache-2.0 + * + */ + +#include + +&pinctrl { + uart1_default: uart1_default { + group0 { + pinmux = <&iomuxc_uart1_rxd_uart_rx_uart1_rx>, + <&iomuxc_uart1_txd_uart_tx_uart1_tx>; + bias-pull-up; + slew-rate = "slow"; + drive-strength = "x1"; + }; + }; + + uart3_default: uart3_default { + group0 { + pinmux = <&iomuxc_uart3_rxd_uart_rx_uart3_rx>, + <&iomuxc_uart3_txd_uart_tx_uart3_tx>; + bias-pull-up; + slew-rate = "slow"; + drive-strength = "x1"; + }; + }; + + uart4_default: uart4_default { + group0 { + pinmux = <&iomuxc_uart4_rxd_uart_rx_uart4_rx>, + <&iomuxc_uart4_txd_uart_tx_uart4_tx>; + bias-pull-up; + slew-rate = "slow"; + drive-strength = "x1"; + }; + }; +}; diff --git a/boards/variscite/imx8mp_var_som/imx8mp_var_som_mimx8ml8_a53.dts b/boards/variscite/imx8mp_var_som/imx8mp_var_som_mimx8ml8_a53.dts new file mode 100644 index 00000000000..faa6e233c4f --- /dev/null +++ b/boards/variscite/imx8mp_var_som/imx8mp_var_som_mimx8ml8_a53.dts @@ -0,0 +1,78 @@ +/* + * Copyright 2025 Variscite Ltd. + * Copyright 2021-2024 NXP + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; + +#include +#include "imx8mp_var_som-pinctrl.dtsi" +#include +#include + +/ { + model = "Variscite VAR-SOM-MX8M-PLUS A53"; + compatible = "fsl,mimx8mp"; + + chosen { + zephyr,console = &uart4; + zephyr,shell-uart = &uart4; + /* sram node actually locates at DDR DRAM */ + zephyr,sram = &dram; + }; + + cpus { + cpu@0 { + status = "disabled"; + }; + + cpu@1 { + status = "disabled"; + }; + + cpu@2 { + status = "disabled"; + }; + }; + + dram: memory@40480000 { + reg = <0x40480000 DT_SIZE_M(1)>; + }; + + aliases { + led0 = &blinky0; + sw0 = &button0; + }; + + leds { + compatible = "gpio-leds"; + + blinky0: blinky_0 { + gpios = <&gpio3 14 GPIO_ACTIVE_HIGH>; + }; + }; + + keys { + compatible = "gpio-keys"; + + button0: btn_0 { + label = "BTN0"; + gpios = <&gpio3 6 (GPIO_PULL_UP|GPIO_ACTIVE_LOW)>; + zephyr,code = ; + }; + }; +}; + +&uart4 { + status = "okay"; + current-speed = <115200>; + clocks = <&ccm IMX_CCM_UART4_CLK 0x6c 24>; + pinctrl-0 = <&uart4_default>; + pinctrl-names = "default"; +}; + +&gpio3 { + status = "okay"; +}; diff --git a/boards/variscite/imx8mp_var_som/imx8mp_var_som_mimx8ml8_a53.yaml b/boards/variscite/imx8mp_var_som/imx8mp_var_som_mimx8ml8_a53.yaml new file mode 100644 index 00000000000..aa76c5ab71f --- /dev/null +++ b/boards/variscite/imx8mp_var_som/imx8mp_var_som_mimx8ml8_a53.yaml @@ -0,0 +1,21 @@ +# +# Copyright 2025 Variscite Ltd. +# Copyright 2024 NXP +# +# SPDX-License-Identifier: Apache-2.0 +# + +identifier: imx8mp_var_som/mimx8ml8/a53 +name: Variscite VAR-SOM-MX8M-PLUS A53 +type: mcu +arch: arm64 +toolchain: + - zephyr + - cross-compile +ram: 1024 +supported: + - uart + - net +testing: + ignore_tags: + - bluetooth diff --git a/boards/variscite/imx8mp_var_som/imx8mp_var_som_mimx8ml8_a53_defconfig b/boards/variscite/imx8mp_var_som/imx8mp_var_som_mimx8ml8_a53_defconfig new file mode 100644 index 00000000000..75fd5682c60 --- /dev/null +++ b/boards/variscite/imx8mp_var_som/imx8mp_var_som_mimx8ml8_a53_defconfig @@ -0,0 +1,26 @@ +# Copyright 2025 Variscite Ltd. +# SPDX-License-Identifier: Apache-2.0 + +# ARM Options +CONFIG_AARCH64_IMAGE_HEADER=y +CONFIG_ARMV8_A_NS=y +CONFIG_ARM64_VA_BITS_36=y +CONFIG_ARM64_PA_BITS_36=y + +# Cache Options +CONFIG_CACHE_MANAGEMENT=y +CONFIG_DCACHE_LINE_SIZE_DETECT=y +CONFIG_ICACHE_LINE_SIZE_DETECT=y + +# Zephyr Kernel Configuration +CONFIG_XIP=n +CONFIG_KERNEL_DIRECT_MAP=y + +# Serial Drivers +CONFIG_SERIAL=y + +# Enable Console +CONFIG_CONSOLE=y +CONFIG_UART_CONSOLE=y + +CONFIG_CLOCK_CONTROL=y diff --git a/boards/variscite/imx8mp_var_som/imx8mp_var_som_mimx8ml8_m7.dts b/boards/variscite/imx8mp_var_som/imx8mp_var_som_mimx8ml8_m7.dts new file mode 100644 index 00000000000..009ff61298b --- /dev/null +++ b/boards/variscite/imx8mp_var_som/imx8mp_var_som_mimx8ml8_m7.dts @@ -0,0 +1,65 @@ +/* + * Copyright 2025 Variscite Ltd. + * Copyright (c) 2021, Laird Connectivity + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; + +#include +#include "imx8mp_var_som-pinctrl.dtsi" +#include +#include + +/ { + model = "Variscite VAR-SOM-MX8M-PLUS M7"; + compatible = "nxp,imx8mp_var_som"; + + chosen { + /* TCM */ + zephyr,flash = &itcm; + zephyr,sram = &dtcm; + + zephyr,console = &uart4; + zephyr,shell-uart = &uart4; + }; + + aliases { + led0 = &blinky0; + sw0 = &button0; + }; + + leds { + compatible = "gpio-leds"; + + blinky0: blinky_0 { + gpios = <&gpio3 14 GPIO_ACTIVE_HIGH>; + }; + }; + + keys { + compatible = "gpio-keys"; + + button0: btn_0 { + label = "BTN0"; + gpios = <&gpio3 6 (GPIO_PULL_UP|GPIO_ACTIVE_LOW)>; + zephyr,code = ; + }; + }; +}; + +&uart4 { + status = "okay"; + current-speed = <115200>; + pinctrl-0 = <&uart4_default>; + pinctrl-names = "default"; +}; + +&gpio3 { + status = "okay"; +}; + +&mailbox0 { + status = "okay"; +}; diff --git a/boards/variscite/imx8mp_var_som/imx8mp_var_som_mimx8ml8_m7.yaml b/boards/variscite/imx8mp_var_som/imx8mp_var_som_mimx8ml8_m7.yaml new file mode 100644 index 00000000000..8f8435be138 --- /dev/null +++ b/boards/variscite/imx8mp_var_som/imx8mp_var_som_mimx8ml8_m7.yaml @@ -0,0 +1,17 @@ +# +# Copyright 2025 Variscite Ltd. +# +# SPDX-License-Identifier: Apache-2.0 +# + +identifier: imx8mp_var_som/mimx8ml8/m7 +name: Variscite VAR-SOM-MX8M-PLUS M7 +type: mcu +arch: arm +ram: 128 +flash: 128 +toolchain: + - zephyr + - gnuarmemb +supported: + - uart diff --git a/boards/variscite/imx8mp_var_som/imx8mp_var_som_mimx8ml8_m7_ddr.dts b/boards/variscite/imx8mp_var_som/imx8mp_var_som_mimx8ml8_m7_ddr.dts new file mode 100644 index 00000000000..c530902691f --- /dev/null +++ b/boards/variscite/imx8mp_var_som/imx8mp_var_som_mimx8ml8_m7_ddr.dts @@ -0,0 +1,83 @@ +/* + * Copyright 2025 Variscite Ltd. + * Copyright (c) 2021, Laird Connectivity + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; + +#include +#include "imx8mp_var_som-pinctrl.dtsi" +#include +#include + +/delete-node/ &ddr_code; +/delete-node/ &ddr_sys; + +/ { + model = "Variscite VAR-SOM-MX8M-PLUS M7 (DDR)"; + compatible = "nxp,imx8mp_var_som"; + + chosen { + /* DDR */ + zephyr,flash = &ddr_code; + zephyr,sram = &ddr_sys; + + zephyr,console = &uart4; + zephyr,shell-uart = &uart4; + }; + + soc { + ddr_code: code@7b000000 { + device_type = "memory"; + compatible = "nxp,imx-code-bus"; + reg = <0x7b000000 DT_SIZE_M(2)>; + }; + + ddr_sys: memory@7b200000 { + device_type = "memory"; + compatible = "nxp,imx-sys-bus"; + reg = <0x7b200000 DT_SIZE_M(2)>; + }; + }; + + aliases { + led0 = &blinky0; + sw0 = &button0; + }; + + leds { + compatible = "gpio-leds"; + + blinky0: blinky_0 { + gpios = <&gpio3 14 GPIO_ACTIVE_HIGH>; + }; + }; + + keys { + compatible = "gpio-keys"; + + button0: btn_0 { + label = "BTN0"; + gpios = <&gpio3 6 (GPIO_PULL_UP|GPIO_ACTIVE_LOW)>; + zephyr,code = ; + }; + }; + +}; + +&uart4 { + status = "okay"; + current-speed = <115200>; + pinctrl-0 = <&uart4_default>; + pinctrl-names = "default"; +}; + +&gpio3 { + status = "okay"; +}; + +&mailbox0 { + status = "okay"; +}; diff --git a/boards/variscite/imx8mp_var_som/imx8mp_var_som_mimx8ml8_m7_ddr.yaml b/boards/variscite/imx8mp_var_som/imx8mp_var_som_mimx8ml8_m7_ddr.yaml new file mode 100644 index 00000000000..cb0ce35a105 --- /dev/null +++ b/boards/variscite/imx8mp_var_som/imx8mp_var_som_mimx8ml8_m7_ddr.yaml @@ -0,0 +1,17 @@ +# +# Copyright 2025 Variscite Ltd. +# +# SPDX-License-Identifier: Apache-2.0 +# + +identifier: imx8mp_var_som/mimx8ml8/m7/ddr +name: Variscite VAR-SOM-MX8M-PLUS M7 (DDR) +type: mcu +arch: arm +ram: 2048 +flash: 2048 +toolchain: + - zephyr + - gnuarmemb +supported: + - uart diff --git a/boards/variscite/imx8mp_var_som/imx8mp_var_som_mimx8ml8_m7_ddr_defconfig b/boards/variscite/imx8mp_var_som/imx8mp_var_som_mimx8ml8_m7_ddr_defconfig new file mode 100644 index 00000000000..cce273e97fd --- /dev/null +++ b/boards/variscite/imx8mp_var_som/imx8mp_var_som_mimx8ml8_m7_ddr_defconfig @@ -0,0 +1,15 @@ +# +# Copyright 2025 Variscite Ltd. +# Copyright (c) 2021, Laird Connectivity +# +# SPDX-License-Identifier: Apache-2.0 +# + +CONFIG_CLOCK_CONTROL=y +CONFIG_UART_CONSOLE=y +CONFIG_SERIAL=y +CONFIG_CONSOLE=y +CONFIG_XIP=y +CONFIG_CODE_DDR=y +CONFIG_FLASH_BASE_ADDRESS=0x7b000000 +CONFIG_FLASH_SIZE=2048 diff --git a/boards/variscite/imx8mp_var_som/imx8mp_var_som_mimx8ml8_m7_defconfig b/boards/variscite/imx8mp_var_som/imx8mp_var_som_mimx8ml8_m7_defconfig new file mode 100644 index 00000000000..6c7e489b8b5 --- /dev/null +++ b/boards/variscite/imx8mp_var_som/imx8mp_var_som_mimx8ml8_m7_defconfig @@ -0,0 +1,13 @@ +# +# Copyright 2025 Variscite Ltd. +# Copyright (c) 2021, Laird Connectivity +# +# SPDX-License-Identifier: Apache-2.0 +# + +CONFIG_CLOCK_CONTROL=y +CONFIG_UART_CONSOLE=y +CONFIG_SERIAL=y +CONFIG_CONSOLE=y +CONFIG_XIP=y +CONFIG_CODE_ITCM=y diff --git a/boards/variscite/index.rst b/boards/variscite/index.rst new file mode 100644 index 00000000000..9985dab18c8 --- /dev/null +++ b/boards/variscite/index.rst @@ -0,0 +1,10 @@ +.. _boards-variscite: + +Variscite +######### + +.. toctree:: + :maxdepth: 1 + :glob: + + **/*