boards: mm_feather: add board support for Feather
Add new board to support Madmachine Feather.
Signed-off-by: Frank Li <lgl88911@163.com>
diff --git a/boards/arm/mm_feather/CMakeLists.txt b/boards/arm/mm_feather/CMakeLists.txt
new file mode 100644
index 0000000..22e8a9e
--- /dev/null
+++ b/boards/arm/mm_feather/CMakeLists.txt
@@ -0,0 +1,10 @@
+#
+# Copyright (c) 2021 MADMACHINE LIMITED
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+
+zephyr_library()
+zephyr_library_sources(pinmux.c)
+zephyr_sources_ifdef(CONFIG_BOOT_FLEXSPI_NOR flexspi_nor_config.c)
+zephyr_sources_ifdef(CONFIG_DEVICE_CONFIGURATION_DATA mmfeather_sdram_ini_dcd.c)
diff --git a/boards/arm/mm_feather/Kconfig.board b/boards/arm/mm_feather/Kconfig.board
new file mode 100644
index 0000000..c003514
--- /dev/null
+++ b/boards/arm/mm_feather/Kconfig.board
@@ -0,0 +1,10 @@
+#
+# Copyright (c) 2021, MADMACHINE LIMITED
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+
+config BOARD_MM_FEATHER
+ bool "MM MM-FEATHER"
+ depends on SOC_SERIES_IMX_RT
+ select SOC_PART_NUMBER_MIMXRT1062DVL6A
diff --git a/boards/arm/mm_feather/Kconfig.defconfig b/boards/arm/mm_feather/Kconfig.defconfig
new file mode 100644
index 0000000..a0f6910
--- /dev/null
+++ b/boards/arm/mm_feather/Kconfig.defconfig
@@ -0,0 +1,18 @@
+# MM-FEATHER board
+
+# Copyright (c) 2021, MADMACHINE LIMITED
+# SPDX-License-Identifier: Apache-2.0
+
+if BOARD_MM_FEATHER
+
+config BOARD
+ default "mm_feather"
+
+choice CODE_LOCATION
+ default CODE_FLEXSPI
+endchoice
+
+config DISK_DRIVER_SDMMC
+ default y if DISK_DRIVERS
+
+endif # BOARD_MM_FEATHER
diff --git a/boards/arm/mm_feather/board.cmake b/boards/arm/mm_feather/board.cmake
new file mode 100644
index 0000000..573baa5
--- /dev/null
+++ b/boards/arm/mm_feather/board.cmake
@@ -0,0 +1,12 @@
+#
+# Copyright (c) 2021, MADMACHINE LIMITED
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+
+board_set_debugger_ifnset(pyocd)
+board_set_flasher_ifnset(pyocd)
+
+board_runner_args(pyocd "--target=mimxrt1050_quadspi")
+
+include(${ZEPHYR_BASE}/boards/common/pyocd.board.cmake)
diff --git a/boards/arm/mm_feather/doc/index.rst b/boards/arm/mm_feather/doc/index.rst
new file mode 100644
index 0000000..ef70ee0
--- /dev/null
+++ b/boards/arm/mm_feather/doc/index.rst
@@ -0,0 +1,239 @@
+.. _mm_feather:
+
+MadMachine SwiftIO Feather
+##########################
+
+Overview
+********
+
+The SwiftIO Feather board, designed by MadMachine is
+designed with support for the modern `Swift language
+<https://docs.swift.org/swift-book/>`_. Zephyr provides basic
+low-level capabilities for the SwiftIO Feather board. Swift application would
+run on top of Zephyr. More information about the board can be found
+at:
+
+- `MadMachine Homepage`_
+- `SwiftIO API Reference`_
+
+.. image:: ./mm_feather.jpg
+ :width: 720px
+ :align: center
+ :alt: SwiftIO Feather Board
+
+Hardware
+********
+
+- MIMXRT1062DVL6B MCU (Cortex-M7 at 600MHz, 2048KB on-chip memory)
+
+- Memory
+
+ - 8MB QSPI Flash
+ - 32MB SDRAM
+ - TF socket for SD card
+
+- USB
+
+ - USB-C 2.0 OTG connector
+
+- Power
+
+ - 5V USB power
+ - 4.2V DC jack
+
+- Debug
+
+ - SWD connector
+
+
+- RGB LED
+
+
+Supported Features
+==================
+
+The mm_feather board configuration supports the following hardware
+features:
+
++-----------+------------+-------------------------------------+
+| Interface | Controller | Driver/Component |
++===========+============+=====================================+
+| NVIC | on-chip | nested vector interrupt controller |
++-----------+------------+-------------------------------------+
+| SYSTICK | on-chip | systick |
++-----------+------------+-------------------------------------+
+| DISPLAY | on-chip | display |
++-----------+------------+-------------------------------------+
+| GPIO | on-chip | gpio |
++-----------+------------+-------------------------------------+
+| I2C | on-chip | i2c |
++-----------+------------+-------------------------------------+
+| SPI | on-chip | spi |
++-----------+------------+-------------------------------------+
+| UART | on-chip | serial port-polling; |
+| | | serial port-interrupt |
++-----------+------------+-------------------------------------+
+| I2S | on-chip | I2S |
++-----------+------------+-------------------------------------+
+| USB | on-chip | USB device |
++-----------+------------+-------------------------------------+
+
+
+
+Connections and IOs
+===================
+
+Note:
+The following SwiftIO Feather pinout diagram is used for Swift programming.
+The Swift ID is not the same as the Zephyr driver ID.
+
++-----------+---------------+----------+---------------+--------------------------+
+| Name | GPIO | Other peripherals |
++===========+===============+==========+===============+==========+===============+
+| Swift ID | Pin name | Swift ID | Zephyr driver | Swift ID | Zephyr driver |
++-----------+---------------+----------+---------------+----------+---------------+
+| P0 | GPIO_AD_B1_04 | D0 | GPIO1_IO20 | | |
++-----------+---------------+----------+---------------+----------+---------------+
+| P1 | GPIO_AD_B1_08 | D1 | GPIO1_IO24 | | |
++-----------+---------------+----------+---------------+----------+---------------+
+| P2 | GPIO_AD_B1_09 | D2 | GPIO1_IO25 | | |
++-----------+---------------+----------+---------------+----------+---------------+
+| P3 | GPIO_AD_B1_10 | D3 | GPIO1_IO26 | | |
++-----------+---------------+----------+---------------+ UART1 | UART_8 |
+| P4 | GPIO_AD_B1_11 | D4 | GPIO1_IO27 | | |
++-----------+---------------+----------+---------------+----------+---------------+
+| P5 | GPIO_AD_B1_12 | D5 | GPIO1_IO28 | | |
++-----------+---------------+----------+---------------+----------+---------------+
+| P6 | GPIO_AD_B1_15 | D6 | GPIO1_IO31 | | |
++-----------+---------------+----------+---------------+ | |
+| P7 | GPIO_AD_B1_14 | D7 | GPIO1_IO30 | SPI0 | SPI_3 |
++-----------+---------------+----------+---------------+ | |
+| P8 | GPIO_AD_B1_13 | D8 | GPIO1_IO29 | | |
++-----------+---------------+----------+---------------+----------+---------------+
+| P9 | GPIO_AD_B1_03 | D9 | GPIO1_IO19 | | |
++-----------+---------------+----------+---------------+ UART0 | UART_2 |
+| P10 | GPIO_AD_B1_02 | D10 | GPIO1_IO18 | | |
++-----------+---------------+----------+---------------+----------+---------------+
+| P11 | GPIO_AD_B1_05 | D11 | GPIO1_IO21 | | |
++-----------+---------------+----------+---------------+----------+---------------+
+| P12 | GPIO_AD_B0_14 | D12 | GPIO1_IO14 | | |
++-----------+---------------+----------+---------------+ CAN0 | CAN_3 |
+| P13 | GPIO_AD_B0_15 | D13 | GPIO1_IO15 | | |
++-----------+---------------+----------+---------------+----------+---------------+
+| P14 | GPIO_B0_00 | D14 | GPIO2_IO00 | | |
++-----------+---------------+----------+---------------+----------+---------------+
+| P15 | GPIO_B1_03 | D15 | GPIO2_IO19 | | |
++-----------+---------------+----------+---------------+----------+---------------+
+| P16 | GPIO_B1_02 | D16 | GPIO2_IO18 | | |
++-----------+---------------+----------+---------------+----------+---------------+
+| P17 | GPIO_B1_01 | D17 | GPIO2_IO17 | | |
++-----------+---------------+----------+---------------+ UART2 | UART_4 |
+| P18 | GPIO_B1_00 | D18 | GPIO2_IO16 | | |
++-----------+---------------+----------+---------------+----------+---------------+
+| P19 | GPIO_B1_15 | D19 | GPIO2_IO31 | | |
++-----------+---------------+----------+---------------+----------+---------------+
+| P20 | GPIO_B1_14 | D20 | GPIO2_IO30 | | |
++-----------+---------------+----------+---------------+----------+---------------+
+| P21 | GPIO_B0_03 | D21 | GPIO2_IO03 | | |
++-----------+---------------+----------+---------------+ | |
+| P22 | GPIO_B0_02 | D22 | GPIO2_IO02 | SPI1 | SPI_4 |
++-----------+---------------+----------+---------------+ | |
+| P23 | GPIO_B0_01 | D23 | GPIO2_IO01 | | |
++-----------+---------------+----------+---------------+----------+---------------+
+| P24 | GPIO_B0_04 | D24 | GPIO2_IO04 | | |
++-----------+---------------+----------+---------------+----------+---------------+
+| P25 | GPIO_B0_05 | D25 | GPIO2_IO05 | | |
++-----------+---------------+----------+---------------+----------+---------------+
+| P26 | GPIO_B0_06 | D26 | GPIO2_IO06 | | |
++-----------+---------------+----------+---------------+----------+---------------+
+| P27 | GPIO_B0_07 | D27 | GPIO2_IO07 | | |
++-----------+---------------+----------+---------------+----------+---------------+
+| P28 | GPIO_B0_08 | D28 | GPIO2_IO08 | | |
++-----------+---------------+----------+---------------+----------+---------------+
+| P29 | GPIO_B0_09 | D29 | GPIO2_IO09 | | |
++-----------+---------------+----------+---------------+----------+---------------+
+| P30 | GPIO_B0_10 | D30 | GPIO2_IO10 | | |
++-----------+---------------+----------+---------------+----------+---------------+
+| P31 | GPIO_B0_11 | D31 | GPIO2_IO11 | | |
++-----------+---------------+----------+---------------+----------+---------------+
+| P32 | GPIO_B0_12 | D32 | GPIO2_IO12 | | |
++-----------+---------------+----------+---------------+----------+---------------+
+| P33 | GPIO_B0_13 | D33 | GPIO2_IO13 | | |
++-----------+---------------+----------+---------------+----------+---------------+
+| P34 | GPIO_B0_14 | D34 | GPIO2_IO14 | | |
++-----------+---------------+----------+---------------+----------+---------------+
+| P35 | GPIO_B0_15 | D35 | GPIO2_IO15 | | |
++-----------+---------------+----------+---------------+----------+---------------+
+| | GPIO_AD_B1_07 | | GPIO1_IO23 | | |
++-----------+---------------+----------+---------------+ I2C0 | I2C_3 |
+| | GPIO_AD_B1_06 | | GPIO1_IO22 | | |
++-----------+---------------+----------+---------------+----------+---------------+
+| | GPIO_AD_B1_00 | | GPIO1_IO16 | | |
++-----------+---------------+----------+---------------+ I2C1 | I2C_1 |
+| | GPIO_AD_B1_00 | | GPIO1_IO17 | | |
++-----------+---------------+----------+---------------+----------+---------------+
+
+
+Programming and Flash
+*************************
+
+Build and flash applications as usual (see :ref:`build_an_application` and
+:ref:`application_run` for more details).
+
+Configuring a Console
+=====================
+
+Connect a USB-to-serial adapter from your PC to corresponding UART pins of SwiftIO Feather.
+
+Use the following settings with your serial terminal of choice (minicom, putty,
+etc.):
+
+- Speed: 115200
+- Data: 8 bits
+- Parity: None
+- Stop bits: 1
+
+Flashing
+========
+
+Here is an example for the :ref:`hello_world` application.
+
+Connect a DAPLink debuger from your PC to corresponding SWD pins of SwiftIO Feather.
+
+.. zephyr-app-commands::
+ :zephyr-app: samples/hello_world
+ :board: mm_feather
+ :goals: flash
+
+Open a serial terminal, reset the board (press the "reset" button), and you should
+see the following message in the terminal:
+
+.. code-block:: console
+
+ *** Booting Zephyr OS build v2.6.0-rc1-301-gd9c666a5abf8 ***
+ Hello World! mm_feather
+
+Debugging
+=========
+
+Here is an example for the :ref:`hello_world` application.
+
+.. zephyr-app-commands::
+ :zephyr-app: samples/hello_world
+ :board: mm_feather
+ :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 v2.6.0-rc1-301-gd9c666a5abf8 ***
+ Hello World! mm_feather
+
+
+.. _MadMachine Homepage:
+ https://madmachine.io
+
+.. _SwiftIO API Reference:
+ https://swiftioapi.madmachine.io
diff --git a/boards/arm/mm_feather/doc/mm_feather.jpg b/boards/arm/mm_feather/doc/mm_feather.jpg
new file mode 100644
index 0000000..43e2ff4
--- /dev/null
+++ b/boards/arm/mm_feather/doc/mm_feather.jpg
Binary files differ
diff --git a/boards/arm/mm_feather/flexspi_nor_config.c b/boards/arm/mm_feather/flexspi_nor_config.c
new file mode 100644
index 0000000..647dac0
--- /dev/null
+++ b/boards/arm/mm_feather/flexspi_nor_config.c
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2019, MADMACHINE LIMITED
+ *
+ * refer to hal_nxp board file
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+#include <flexspi_nor_config.h>
+
+#ifdef CONFIG_NXP_IMX_RT_BOOT_HEADER
+#if defined(__CC_ARM) || defined(__ARMCC_VERSION) || defined(__GNUC__)
+__attribute__((section(".boot_hdr.conf")))
+#elif defined(__ICCARM__)
+#pragma location = ".boot_hdr.conf"
+#endif
+
+const struct flexspi_nor_config_t Qspiflash_config = {
+ .memConfig = {
+ .tag = FLEXSPI_CFG_BLK_TAG,
+ .version = FLEXSPI_CFG_BLK_VERSION,
+ .readSampleClkSrc =
+ kFlexSPIReadSampleClk_LoopbackFromDqsPad,
+ .csHoldTime = 3u,
+ .csSetupTime = 3u,
+ .sflashPadType = kSerialFlash_4Pads,
+ .serialClkFreq = kFlexSpiSerialClk_100MHz,
+ .sflashA1Size = 8u * 1024u * 1024u,
+ .lookupTable = {
+ FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD,
+ 0xEB, RADDR_SDR,
+ FLEXSPI_4PAD, 0x18),
+ FLEXSPI_LUT_SEQ(DUMMY_SDR, FLEXSPI_4PAD,
+ 0x06, READ_SDR,
+ FLEXSPI_4PAD, 0x04),
+ },
+ },
+ .pageSize = 256u,
+ .sectorSize = 4u * 1024u,
+ .blockSize = 256u * 1024u,
+ .isUniformBlockSize = false,
+};
+#endif /* CONFIG_NXP_IMX_RT_BOOT_HEADER */
diff --git a/boards/arm/mm_feather/mm_feather.dts b/boards/arm/mm_feather/mm_feather.dts
new file mode 100644
index 0000000..60e5c09
--- /dev/null
+++ b/boards/arm/mm_feather/mm_feather.dts
@@ -0,0 +1,159 @@
+/*
+ * Copyright (c) 2021, MADMACHINE LIMITED
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/dts-v1/;
+
+#include <nxp/nxp_rt1060.dtsi>
+
+/ {
+ model = "MM MM-FEATHER board";
+ compatible = "nxp,mimxrt1062";
+
+ aliases {
+ led0 = &green_led;
+ led1 = &red_led;
+ led2 = &blue_led;
+ };
+
+ chosen {
+ zephyr,sram = &sdram0;
+ zephyr,itcm = &itcm;
+ zephyr,dtcm = &dtcm;
+ zephyr,console = &lpuart1;
+ zephyr,shell-uart = &lpuart1;
+ };
+
+ sdram0: memory@80000000 {
+ /* Micron MT48LC16M16A2B4-6AIT:G */
+ device_type = "memory";
+ reg = <0x80000000 DT_SIZE_M(32)>;
+ };
+
+ leds {
+ compatible = "gpio-leds";
+ red_led: led_0 {
+ gpios = <&gpio1 9 0>;
+ label = "RGB R";
+ };
+
+ green_led: led_1 {
+ gpios = <&gpio1 10 0>;
+ label = "RGB G";
+ };
+
+ blue_led: led_2 {
+ gpios = <&gpio1 11 0>;
+ label = "RGB B";
+ };
+ };
+};
+
+
+&flexspi {
+ reg = <0x402a8000 0x4000>, <0x60000000 DT_SIZE_M(8)>;
+ is25wp064: is25wp064@0 {
+ compatible = "nxp,imx-flexspi-nor";
+ size = <67108864>;
+ label = "IS25WP064";
+ reg = <0>;
+ spi-max-frequency = <133000000>;
+ status = "okay";
+ jedec-id = [9d 70 17];
+ };
+};
+
+&lpuart1 {
+ status = "okay";
+ current-speed = <115200>;
+};
+
+&lpuart2 {
+ status = "okay";
+ current-speed = <115200>;
+};
+
+&lpuart3 {
+ status = "okay";
+ current-speed = <115200>;
+};
+
+&lpuart4 {
+ status = "okay";
+ current-speed = <115200>;
+};
+
+&lpuart8 {
+ status = "okay";
+ current-speed = <115200>;
+};
+
+&lpi2c1 {
+ status = "okay";
+};
+
+&lpi2c3 {
+ status = "okay";
+};
+
+&lpspi3 {
+ status = "okay";
+ pcs-sck-delay = <2>;
+ sck-pcs-delay = <2>;
+ transfer-delay = <2>;
+};
+
+&lpspi4 {
+ status = "okay";
+ pcs-sck-delay = <2>;
+ sck-pcs-delay = <2>;
+ transfer-delay = <2>;
+};
+
+&flexpwm1_pwm3 {
+ status = "okay";
+};
+
+&flexpwm2_pwm0 {
+ status = "okay";
+};
+
+&flexpwm2_pwm1 {
+ status = "okay";
+};
+
+&flexpwm2_pwm2 {
+ status = "okay";
+};
+
+&flexpwm2_pwm3 {
+ status = "okay";
+};
+
+&flexpwm4_pwm0 {
+ status = "okay";
+};
+
+&flexpwm4_pwm1 {
+ status = "okay";
+};
+
+&flexpwm4_pwm2 {
+ status = "okay";
+};
+
+&flexpwm4_pwm3 {
+ status = "okay";
+};
+
+&usb1 {
+ status = "okay";
+};
+
+&usdhc1 {
+ status = "okay";
+ cd-gpios = <&gpio2 28 GPIO_ACTIVE_LOW>;
+ no-1-8-v;
+};
diff --git a/boards/arm/mm_feather/mm_feather.yaml b/boards/arm/mm_feather/mm_feather.yaml
new file mode 100644
index 0000000..2645f42
--- /dev/null
+++ b/boards/arm/mm_feather/mm_feather.yaml
@@ -0,0 +1,25 @@
+#
+# Copyright (c) 2021, MADMACHINE LIMITED
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+
+identifier: mm_feather
+name: MM MM-FEATHER
+type: mcu
+arch: arm
+toolchain:
+ - zephyr
+ - gnuarmemb
+ - xtools
+ram: 32768
+flash: 8192
+supported:
+ - counter
+ - sdhc
+ - gpio
+ - i2c
+ - dma
+ - uart
+ - pwm
+ - spi
diff --git a/boards/arm/mm_feather/mm_feather_defconfig b/boards/arm/mm_feather/mm_feather_defconfig
new file mode 100644
index 0000000..5090ec4
--- /dev/null
+++ b/boards/arm/mm_feather/mm_feather_defconfig
@@ -0,0 +1,16 @@
+#
+# Copyright (c) 2021, MADMACHINE LIMITED
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+
+CONFIG_SOC_MIMXRT1062=y
+CONFIG_SOC_SERIES_IMX_RT=y
+CONFIG_CONSOLE=y
+CONFIG_UART_CONSOLE=y
+CONFIG_SERIAL=y
+CONFIG_CORTEX_M_SYSTICK=y
+CONFIG_GPIO=y
+CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=600000000
+CONFIG_ARM_MPU=y
+CONFIG_HW_STACK_PROTECTION=y
diff --git a/boards/arm/mm_feather/mmfeather_sdram_ini_dcd.c b/boards/arm/mm_feather/mmfeather_sdram_ini_dcd.c
new file mode 100644
index 0000000..3bab176
--- /dev/null
+++ b/boards/arm/mm_feather/mmfeather_sdram_ini_dcd.c
@@ -0,0 +1,294 @@
+/*
+ * Copyright (c) 2021, MADMACHINE LIMITED
+ *
+ * refer to hal_nxp board file
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+#include <zephyr/types.h>
+
+#if defined(XIP_BOOT_HEADER_ENABLE) && (XIP_BOOT_HEADER_ENABLE == 1)
+#if defined(XIP_BOOT_HEADER_DCD_ENABLE) && (XIP_BOOT_HEADER_DCD_ENABLE == 1)
+#if defined(__CC_ARM) || defined(__ARMCC_VERSION) || defined(__GNUC__)
+__attribute__((section(".boot_hdr.dcd_data")))
+#elif defined(__ICCARM__)
+#pragma location = ".boot_hdr.dcd_data"
+#endif
+
+const uint8_t dcd_data[] = {
+ 0xD2,
+
+ 0x04, 0x30,
+
+ 0x41,
+
+ 0xCC, 0x03, 0xAC, 0x04,
+
+ 0x40, 0x0F, 0xC0, 0x68, 0xFF, 0xFF, 0xFF, 0xFF,
+
+ 0x40, 0x0F, 0xC0, 0x6C, 0xFF, 0xFF, 0xFF, 0xFF,
+
+ 0x40, 0x0F, 0xC0, 0x70, 0xFF, 0xFF, 0xFF, 0xFF,
+
+ 0x40, 0x0F, 0xC0, 0x74, 0xFF, 0xFF, 0xFF, 0xFF,
+
+ 0x40, 0x0F, 0xC0, 0x78, 0xFF, 0xFF, 0xFF, 0xFF,
+
+ 0x40, 0x0F, 0xC0, 0x7C, 0xFF, 0xFF, 0xFF, 0xFF,
+
+ 0x40, 0x0F, 0xC0, 0x80, 0xFF, 0xFF, 0xFF, 0xFF,
+
+ 0x40, 0x0D, 0x80, 0x30, 0x00, 0x00, 0x20, 0x01,
+
+ 0x40, 0x0D, 0x81, 0x00, 0x00, 0x1D, 0x00, 0x00,
+
+ 0x40, 0x0F, 0xC0, 0x14, 0x00, 0x01, 0x0D, 0x40,
+
+ 0x40, 0x1F, 0x80, 0x14, 0x00, 0x00, 0x00, 0x00,
+
+ 0x40, 0x1F, 0x80, 0x18, 0x00, 0x00, 0x00, 0x00,
+
+ 0x40, 0x1F, 0x80, 0x1C, 0x00, 0x00, 0x00, 0x00,
+
+ 0x40, 0x1F, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00,
+
+ 0x40, 0x1F, 0x80, 0x24, 0x00, 0x00, 0x00, 0x00,
+
+ 0x40, 0x1F, 0x80, 0x28, 0x00, 0x00, 0x00, 0x00,
+
+ 0x40, 0x1F, 0x80, 0x2C, 0x00, 0x00, 0x00, 0x00,
+
+ 0x40, 0x1F, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00,
+
+ 0x40, 0x1F, 0x80, 0x34, 0x00, 0x00, 0x00, 0x00,
+
+ 0x40, 0x1F, 0x80, 0x38, 0x00, 0x00, 0x00, 0x00,
+
+ 0x40, 0x1F, 0x80, 0x3C, 0x00, 0x00, 0x00, 0x00,
+
+ 0x40, 0x1F, 0x80, 0x40, 0x00, 0x00, 0x00, 0x00,
+
+ 0x40, 0x1F, 0x80, 0x44, 0x00, 0x00, 0x00, 0x00,
+
+ 0x40, 0x1F, 0x80, 0x48, 0x00, 0x00, 0x00, 0x00,
+
+ 0x40, 0x1F, 0x80, 0x4C, 0x00, 0x00, 0x00, 0x00,
+
+ 0x40, 0x1F, 0x80, 0x50, 0x00, 0x00, 0x00, 0x00,
+
+ 0x40, 0x1F, 0x80, 0x54, 0x00, 0x00, 0x00, 0x00,
+
+ 0x40, 0x1F, 0x80, 0x58, 0x00, 0x00, 0x00, 0x00,
+ 0x40, 0x1F, 0x80, 0x5C, 0x00, 0x00, 0x00, 0x00,
+ 0x40, 0x1F, 0x80, 0x60, 0x00, 0x00, 0x00, 0x00,
+
+ 0x40, 0x1F, 0x80, 0x64, 0x00, 0x00, 0x00, 0x00,
+
+ 0x40, 0x1F, 0x80, 0x68, 0x00, 0x00, 0x00, 0x00,
+
+ 0x40, 0x1F, 0x80, 0x6C, 0x00, 0x00, 0x00, 0x00,
+
+ 0x40, 0x1F, 0x80, 0x70, 0x00, 0x00, 0x00, 0x00,
+
+ 0x40, 0x1F, 0x80, 0x74, 0x00, 0x00, 0x00, 0x00,
+
+ 0x40, 0x1F, 0x80, 0x78, 0x00, 0x00, 0x00, 0x00,
+
+ 0x40, 0x1F, 0x80, 0x7C, 0x00, 0x00, 0x00, 0x00,
+
+ 0x40, 0x1F, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00,
+
+ 0x40, 0x1F, 0x80, 0x84, 0x00, 0x00, 0x00, 0x00,
+
+ 0x40, 0x1F, 0x80, 0x88, 0x00, 0x00, 0x00, 0x00,
+
+ 0x40, 0x1F, 0x80, 0x8C, 0x00, 0x00, 0x00, 0x00,
+
+ 0x40, 0x1F, 0x80, 0x90, 0x00, 0x00, 0x00, 0x00,
+
+ 0x40, 0x1F, 0x80, 0x94, 0x00, 0x00, 0x00, 0x00,
+
+ 0x40, 0x1F, 0x80, 0x98, 0x00, 0x00, 0x00, 0x00,
+
+ 0x40, 0x1F, 0x80, 0x9C, 0x00, 0x00, 0x00, 0x00,
+
+ 0x40, 0x1F, 0x80, 0xA0, 0x00, 0x00, 0x00, 0x00,
+
+ 0x40, 0x1F, 0x80, 0xA4, 0x00, 0x00, 0x00, 0x00,
+
+ 0x40, 0x1F, 0x80, 0xA8, 0x00, 0x00, 0x00, 0x00,
+
+ 0x40, 0x1F, 0x80, 0xAC, 0x00, 0x00, 0x00, 0x00,
+
+ 0x40, 0x1F, 0x80, 0xB0, 0x00, 0x00, 0x00, 0x10,
+
+ 0x40, 0x1F, 0x80, 0xB4, 0x00, 0x00, 0x00, 0x00,
+
+ 0x40, 0x1F, 0x80, 0xB8, 0x00, 0x00, 0x00, 0x00,
+
+ 0x40, 0x1F, 0x82, 0x04, 0x00, 0x01, 0x10, 0xF9,
+
+ 0x40, 0x1F, 0x82, 0x08, 0x00, 0x01, 0x10, 0xF9,
+
+ 0x40, 0x1F, 0x82, 0x0C, 0x00, 0x01, 0x10, 0xF9,
+
+ 0x40, 0x1F, 0x82, 0x10, 0x00, 0x01, 0x10, 0xF9,
+
+ 0x40, 0x1F, 0x82, 0x14, 0x00, 0x01, 0x10, 0xF9,
+
+ 0x40, 0x1F, 0x82, 0x18, 0x00, 0x01, 0x10, 0xF9,
+
+ 0x40, 0x1F, 0x82, 0x1C, 0x00, 0x01, 0x10, 0xF9,
+
+ 0x40, 0x1F, 0x82, 0x20, 0x00, 0x01, 0x10, 0xF9,
+
+ 0x40, 0x1F, 0x82, 0x24, 0x00, 0x01, 0x10, 0xF9,
+
+ 0x40, 0x1F, 0x82, 0x28, 0x00, 0x01, 0x10, 0xF9,
+
+ 0x40, 0x1F, 0x82, 0x2C, 0x00, 0x01, 0x10, 0xF9,
+
+ 0x40, 0x1F, 0x82, 0x30, 0x00, 0x01, 0x10, 0xF9,
+
+ 0x40, 0x1F, 0x82, 0x34, 0x00, 0x01, 0x10, 0xF9,
+
+ 0x40, 0x1F, 0x82, 0x38, 0x00, 0x01, 0x10, 0xF9,
+
+ 0x40, 0x1F, 0x82, 0x3C, 0x00, 0x01, 0x10, 0xF9,
+
+ 0x40, 0x1F, 0x82, 0x40, 0x00, 0x01, 0x10, 0xF9,
+
+ 0x40, 0x1F, 0x82, 0x44, 0x00, 0x01, 0x10, 0xF9,
+
+ 0x40, 0x1F, 0x82, 0x48, 0x00, 0x01, 0x10, 0xF9,
+
+ 0x40, 0x1F, 0x82, 0x4C, 0x00, 0x01, 0x10, 0xF9,
+
+ 0x40, 0x1F, 0x82, 0x50, 0x00, 0x01, 0x10, 0xF9,
+
+ 0x40, 0x1F, 0x82, 0x54, 0x00, 0x01, 0x10, 0xF9,
+
+ 0x40, 0x1F, 0x82, 0x58, 0x00, 0x01, 0x10, 0xF9,
+
+ 0x40, 0x1F, 0x82, 0x5C, 0x00, 0x01, 0x10, 0xF9,
+
+ 0x40, 0x1F, 0x82, 0x60, 0x00, 0x01, 0x10, 0xF9,
+
+ 0x40, 0x1F, 0x82, 0x64, 0x00, 0x01, 0x10, 0xF9,
+
+ 0x40, 0x1F, 0x82, 0x68, 0x00, 0x01, 0x10, 0xF9,
+
+ 0x40, 0x1F, 0x82, 0x6C, 0x00, 0x01, 0x10, 0xF9,
+
+ 0x40, 0x1F, 0x82, 0x70, 0x00, 0x01, 0x10, 0xF9,
+
+ 0x40, 0x1F, 0x82, 0x74, 0x00, 0x01, 0x10, 0xF9,
+
+ 0x40, 0x1F, 0x82, 0x78, 0x00, 0x01, 0x10, 0xF9,
+
+ 0x40, 0x1F, 0x82, 0x7C, 0x00, 0x01, 0x10, 0xF9,
+
+ 0x40, 0x1F, 0x82, 0x80, 0x00, 0x01, 0x10, 0xF9,
+
+ 0x40, 0x1F, 0x82, 0x84, 0x00, 0x01, 0x10, 0xF9,
+
+ 0x40, 0x1F, 0x82, 0x88, 0x00, 0x01, 0x10, 0xF9,
+
+ 0x40, 0x1F, 0x82, 0x8C, 0x00, 0x01, 0x10, 0xF9,
+
+ 0x40, 0x1F, 0x82, 0x90, 0x00, 0x01, 0x10, 0xF9,
+
+ 0x40, 0x1F, 0x82, 0x94, 0x00, 0x01, 0x10, 0xF9,
+
+ 0x40, 0x1F, 0x82, 0x98, 0x00, 0x01, 0x10, 0xF9,
+
+ 0x40, 0x1F, 0x82, 0x9C, 0x00, 0x01, 0x10, 0xF9,
+
+ 0x40, 0x1F, 0x82, 0xA0, 0x00, 0x01, 0x10, 0xF9,
+
+ 0x40, 0x1F, 0x82, 0xA4, 0x00, 0x01, 0x10, 0xF9,
+
+ 0x40, 0x1F, 0x82, 0xA8, 0x00, 0x01, 0x10, 0xF9,
+
+ 0x40, 0x2F, 0x00, 0x00, 0x10, 0x00, 0x00, 0x04,
+
+ 0x40, 0x2F, 0x00, 0x08, 0x00, 0x03, 0x05, 0x24,
+
+ 0x40, 0x2F, 0x00, 0x0C, 0x06, 0x03, 0x05, 0x24,
+
+ 0x40, 0x2F, 0x00, 0x10, 0x80, 0x00, 0x00, 0x1B,
+
+ 0x40, 0x2F, 0x00, 0x14, 0x82, 0x00, 0x00, 0x1B,
+
+ 0x40, 0x2F, 0x00, 0x18, 0x84, 0x00, 0x00, 0x1B,
+
+ 0x40, 0x2F, 0x00, 0x1C, 0x86, 0x00, 0x00, 0x1B,
+
+ 0x40, 0x2F, 0x00, 0x20, 0x90, 0x00, 0x00, 0x21,
+
+ 0x40, 0x2F, 0x00, 0x24, 0xA0, 0x00, 0x00, 0x19,
+
+ 0x40, 0x2F, 0x00, 0x28, 0xA8, 0x00, 0x00, 0x17,
+
+ 0x40, 0x2F, 0x00, 0x2C, 0xA9, 0x00, 0x00, 0x1B,
+
+ 0x40, 0x2F, 0x00, 0x30, 0x00, 0x00, 0x00, 0x21,
+
+ 0x40, 0x2F, 0x00, 0x04, 0x00, 0x00, 0x79, 0xA8,
+
+ 0x40, 0x2F, 0x00, 0x40, 0x00, 0x00, 0x0F, 0x31,
+
+ 0x40, 0x2F, 0x00, 0x44, 0x00, 0x65, 0x29, 0x22,
+
+ 0x40, 0x2F, 0x00, 0x48, 0x00, 0x01, 0x09, 0x20,
+
+ 0x40, 0x2F, 0x00, 0x4C, 0x50, 0x21, 0x0A, 0x08,
+
+ 0x40, 0x2F, 0x00, 0x80, 0x00, 0x00, 0x00, 0x21,
+
+ 0x40, 0x2F, 0x00, 0x84, 0x00, 0x88, 0x88, 0x88,
+
+ 0x40, 0x2F, 0x00, 0x94, 0x00, 0x00, 0x00, 0x02,
+
+ 0x40, 0x2F, 0x00, 0x98, 0x00, 0x00, 0x00, 0x00,
+
+ 0x40, 0x2F, 0x00, 0x90, 0x80, 0x00, 0x00, 0x00,
+
+ 0x40, 0x2F, 0x00, 0x9C, 0xA5, 0x5A, 0x00, 0x0F,
+
+ 0xCF, 0x00, 0x0C, 0x1C, 0x40, 0x2F, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x01,
+
+ 0xCC, 0x00, 0x14, 0x04,
+
+ 0x40, 0x2F, 0x00, 0x90, 0x80, 0x00, 0x00, 0x00,
+
+ 0x40, 0x2F, 0x00, 0x9C, 0xA5, 0x5A, 0x00, 0x0C,
+
+ 0xCF, 0x00, 0x0C, 0x1C, 0x40, 0x2F, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x01,
+
+ 0xCC, 0x00, 0x14, 0x04,
+
+ 0x40, 0x2F, 0x00, 0x90, 0x80, 0x00, 0x00, 0x00,
+
+ 0x40, 0x2F, 0x00, 0x9C, 0xA5, 0x5A, 0x00, 0x0C,
+
+ 0xCF, 0x00, 0x0C, 0x1C, 0x40, 0x2F, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x01,
+
+ 0xCC, 0x00, 0x1C, 0x04,
+
+ 0x40, 0x2F, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x33,
+
+ 0x40, 0x2F, 0x00, 0x90, 0x80, 0x00, 0x00, 0x00,
+
+ 0x40, 0x2F, 0x00, 0x9C, 0xA5, 0x5A, 0x00, 0x0A,
+
+ 0xCF, 0x00, 0x0C, 0x1C, 0x40, 0x2F, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x01,
+
+ 0xCC, 0x00, 0x0C, 0x04, 0x40, 0x2F, 0x00, 0x4C, 0x50, 0x21, 0x0A, 0x09
+};
+
+#else
+const uint8_t dcd_data[] = { 0x00 };
+#endif
+#endif
diff --git a/boards/arm/mm_feather/pinmux.c b/boards/arm/mm_feather/pinmux.c
new file mode 100644
index 0000000..0429035
--- /dev/null
+++ b/boards/arm/mm_feather/pinmux.c
@@ -0,0 +1,192 @@
+/*
+ * Copyright (c) 2021, MADMACHINE LIMITED
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+#include <init.h>
+#include <fsl_iomuxc.h>
+#include <fsl_gpio.h>
+#include <soc.h>
+
+#if DT_NODE_HAS_STATUS(DT_NODELABEL(enet), okay)
+static gpio_pin_config_t enet_gpio_config = {
+ .direction = kGPIO_DigitalOutput,
+ .outputLogic = 0,
+ .interruptMode = kGPIO_NoIntmode
+};
+#endif
+
+#if DT_NODE_HAS_STATUS(DT_NODELABEL(usdhc1), okay) && CONFIG_DISK_DRIVER_SDMMC
+
+/*Drive Strength Field: R0(260 Ohm @ 3.3V, 150 Ohm@1.8V, 240 Ohm for DDR)
+ *Speed Field: medium(100MHz)
+ *Open Drain Enable Field: Open Drain Disabled
+ *Pull / Keep Enable Field: Pull/Keeper Enabled
+ *Pull / Keep Select Field: Pull
+ *Pull Up / Down Config. Field: 47K Ohm Pull Up
+ *Hyst. Enable Field: Hysteresis Enabled.
+ */
+
+static void mm_feather_usdhc_pinmux(
+ uint16_t nusdhc, bool init,
+ uint32_t speed, uint32_t strength)
+{
+ uint32_t cmd_data = IOMUXC_SW_PAD_CTL_PAD_SPEED(speed) |
+ IOMUXC_SW_PAD_CTL_PAD_SRE_MASK |
+ IOMUXC_SW_PAD_CTL_PAD_PKE_MASK |
+ IOMUXC_SW_PAD_CTL_PAD_PUE_MASK |
+ IOMUXC_SW_PAD_CTL_PAD_HYS_MASK |
+ IOMUXC_SW_PAD_CTL_PAD_PUS(1) |
+ IOMUXC_SW_PAD_CTL_PAD_DSE(strength);
+ uint32_t clk = IOMUXC_SW_PAD_CTL_PAD_SPEED(speed) |
+ IOMUXC_SW_PAD_CTL_PAD_SRE_MASK |
+ IOMUXC_SW_PAD_CTL_PAD_HYS_MASK |
+ IOMUXC_SW_PAD_CTL_PAD_PUS(0) |
+ IOMUXC_SW_PAD_CTL_PAD_DSE(strength);
+
+ if (nusdhc == 0) {
+ if (init) {
+ IOMUXC_SetPinMux(
+ IOMUXC_GPIO_AD_B0_05_GPIO1_IO05,
+ 0U);
+ IOMUXC_SetPinMux(/*SD_CD*/
+ IOMUXC_GPIO_B1_12_GPIO2_IO28,
+ 0U);
+ IOMUXC_SetPinMux(
+ IOMUXC_GPIO_SD_B0_00_USDHC1_CMD,
+ 0U);
+ IOMUXC_SetPinMux(
+ IOMUXC_GPIO_SD_B0_01_USDHC1_CLK,
+ 0U);
+ IOMUXC_SetPinMux(
+ IOMUXC_GPIO_SD_B0_02_USDHC1_DATA0,
+ 0U);
+ IOMUXC_SetPinMux(
+ IOMUXC_GPIO_SD_B0_03_USDHC1_DATA1,
+ 0U);
+ IOMUXC_SetPinMux(
+ IOMUXC_GPIO_SD_B0_04_USDHC1_DATA2,
+ 0U);
+ IOMUXC_SetPinMux(
+ IOMUXC_GPIO_SD_B0_05_USDHC1_DATA3,
+ 0U);
+
+ IOMUXC_SetPinConfig(
+ IOMUXC_GPIO_AD_B0_05_GPIO1_IO05,
+ 0x10B0u);
+ IOMUXC_SetPinConfig(/*SD0_CD_SW*/
+ IOMUXC_GPIO_B1_12_GPIO2_IO28,
+ 0x017089u);
+ }
+
+ IOMUXC_SetPinConfig(IOMUXC_GPIO_SD_B0_00_USDHC1_CMD,
+ cmd_data);
+ IOMUXC_SetPinConfig(IOMUXC_GPIO_SD_B0_01_USDHC1_CLK,
+ clk);
+ IOMUXC_SetPinConfig(IOMUXC_GPIO_SD_B0_02_USDHC1_DATA0,
+ cmd_data);
+ IOMUXC_SetPinConfig(IOMUXC_GPIO_SD_B0_03_USDHC1_DATA1,
+ cmd_data);
+ IOMUXC_SetPinConfig(IOMUXC_GPIO_SD_B0_04_USDHC1_DATA2,
+ cmd_data);
+ IOMUXC_SetPinConfig(IOMUXC_GPIO_SD_B0_05_USDHC1_DATA3,
+ cmd_data);
+ }
+}
+#endif
+
+static int mm_feather_init(const struct device *dev)
+{
+ ARG_UNUSED(dev);
+
+ CLOCK_EnableClock(kCLOCK_Iomuxc);
+ CLOCK_EnableClock(kCLOCK_IomuxcSnvs);
+
+
+ /* LED */
+ IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B0_09_GPIO1_IO09, 0);
+
+ IOMUXC_SetPinConfig(IOMUXC_GPIO_AD_B0_09_GPIO1_IO09,
+ IOMUXC_SW_PAD_CTL_PAD_PKE_MASK |
+ IOMUXC_SW_PAD_CTL_PAD_SPEED(2) |
+ IOMUXC_SW_PAD_CTL_PAD_DSE(6));
+
+ IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B0_10_GPIO1_IO10, 0);
+
+ IOMUXC_SetPinConfig(IOMUXC_GPIO_AD_B0_10_GPIO1_IO10,
+ IOMUXC_SW_PAD_CTL_PAD_PKE_MASK |
+ IOMUXC_SW_PAD_CTL_PAD_SPEED(2) |
+ IOMUXC_SW_PAD_CTL_PAD_DSE(6));
+
+ IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B0_11_GPIO1_IO11, 0);
+
+ IOMUXC_SetPinConfig(IOMUXC_GPIO_AD_B0_11_GPIO1_IO11,
+ IOMUXC_SW_PAD_CTL_PAD_PKE_MASK |
+ IOMUXC_SW_PAD_CTL_PAD_SPEED(2) |
+ IOMUXC_SW_PAD_CTL_PAD_DSE(6));
+
+
+#if DT_NODE_HAS_STATUS(DT_NODELABEL(lpuart1), okay) && CONFIG_SERIAL
+ /* LPUART1 TX/RX */
+ IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B0_12_LPUART1_TX, 0);
+ IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B0_13_LPUART1_RX, 0);
+
+ IOMUXC_SetPinConfig(IOMUXC_GPIO_AD_B0_12_LPUART1_TX,
+ IOMUXC_SW_PAD_CTL_PAD_PKE_MASK |
+ IOMUXC_SW_PAD_CTL_PAD_SPEED(2) |
+ IOMUXC_SW_PAD_CTL_PAD_DSE(6));
+
+ IOMUXC_SetPinConfig(IOMUXC_GPIO_AD_B0_13_LPUART1_RX,
+ IOMUXC_SW_PAD_CTL_PAD_PKE_MASK |
+ IOMUXC_SW_PAD_CTL_PAD_SPEED(2) |
+ IOMUXC_SW_PAD_CTL_PAD_DSE(6));
+#endif
+
+#if DT_NODE_HAS_STATUS(DT_NODELABEL(lpi2c1), okay) && CONFIG_I2C
+ IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B1_00_LPI2C1_SCL, 1);
+ IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B1_01_LPI2C1_SDA, 1);
+
+ IOMUXC_SetPinConfig(IOMUXC_GPIO_AD_B1_00_LPI2C1_SCL,
+ IOMUXC_SW_PAD_CTL_PAD_PUS(3) |
+ IOMUXC_SW_PAD_CTL_PAD_PKE_MASK |
+ IOMUXC_SW_PAD_CTL_PAD_ODE_MASK |
+ IOMUXC_SW_PAD_CTL_PAD_SPEED(2) |
+ IOMUXC_SW_PAD_CTL_PAD_DSE(6));
+
+ IOMUXC_SetPinConfig(IOMUXC_GPIO_AD_B1_01_LPI2C1_SDA,
+ IOMUXC_SW_PAD_CTL_PAD_PUS(3) |
+ IOMUXC_SW_PAD_CTL_PAD_PKE_MASK |
+ IOMUXC_SW_PAD_CTL_PAD_ODE_MASK |
+ IOMUXC_SW_PAD_CTL_PAD_SPEED(2) |
+ IOMUXC_SW_PAD_CTL_PAD_DSE(6));
+#endif
+
+#if DT_NODE_HAS_STATUS(DT_NODELABEL(lpi2c3), okay) && CONFIG_I2C
+ IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B1_07_LPI2C3_SCL, 1);
+ IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B1_06_LPI2C3_SDA, 1);
+
+ IOMUXC_SetPinConfig(IOMUXC_GPIO_AD_B1_07_LPI2C3_SCL,
+ IOMUXC_SW_PAD_CTL_PAD_PUS(3) |
+ IOMUXC_SW_PAD_CTL_PAD_PKE_MASK |
+ IOMUXC_SW_PAD_CTL_PAD_ODE_MASK |
+ IOMUXC_SW_PAD_CTL_PAD_SPEED(2) |
+ IOMUXC_SW_PAD_CTL_PAD_DSE(6));
+
+ IOMUXC_SetPinConfig(IOMUXC_GPIO_AD_B1_06_LPI2C3_SDA,
+ IOMUXC_SW_PAD_CTL_PAD_PUS(3) |
+ IOMUXC_SW_PAD_CTL_PAD_PKE_MASK |
+ IOMUXC_SW_PAD_CTL_PAD_ODE_MASK |
+ IOMUXC_SW_PAD_CTL_PAD_SPEED(2) |
+ IOMUXC_SW_PAD_CTL_PAD_DSE(6));
+#endif
+
+#if DT_NODE_HAS_STATUS(DT_NODELABEL(usdhc1), okay) && CONFIG_DISK_DRIVER_SDMMC
+ mm_feather_usdhc_pinmux(0, true, 2, 1);
+ imxrt_usdhc_pinmux_cb_register(mm_feather_usdhc_pinmux);
+#endif
+
+ return 0;
+}
+
+SYS_INIT(mm_feather_init, PRE_KERNEL_1, 0);