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);