You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by da...@apache.org on 2021/04/14 21:57:37 UTC

[incubator-nuttx] 01/11: MIMXRT1064-EVK support

This is an automated email from the ASF dual-hosted git repository.

davids5 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git

commit 33b071ecb9c998521d390c46cf194f5049cfeae0
Author: jturnsek <je...@gmail.com>
AuthorDate: Tue Apr 6 21:19:41 2021 +0200

    MIMXRT1064-EVK support
---
 arch/arm/include/imxrt/chip.h                      |    6 +-
 arch/arm/src/imxrt/Kconfig                         |   10 +
 boards/Kconfig                                     |   14 +
 .../imxrt1020-evk/src/imxrt_flexspi_nor_flash.c    |    3 +-
 .../imxrt1020-evk/src/imxrt_flexspi_nor_flash.h    |    2 +-
 .../imxrt1050-evk/src/imxrt_flexspi_nor_flash.c    |    2 +-
 .../imxrt1050-evk/src/imxrt_flexspi_nor_flash.h    |    2 +-
 .../imxrt1060-evk/src/imxrt_flexspi_nor_flash.c    |    2 +-
 .../imxrt1060-evk/src/imxrt_flexspi_nor_flash.h    |    2 +-
 boards/arm/imxrt/imxrt1064-evk/Kconfig             |   27 +
 boards/arm/imxrt/imxrt1064-evk/README.txt          |  363 ++++++
 .../arm/imxrt/imxrt1064-evk/configs/can/defconfig  |   79 ++
 .../imxrt/imxrt1064-evk/configs/canfd/defconfig    |   80 ++
 .../arm/imxrt/imxrt1064-evk/configs/knsh/Make.defs |   77 ++
 .../arm/imxrt/imxrt1064-evk/configs/knsh/defconfig |   45 +
 .../imxrt1064-evk/configs/libcxxtest/Make.defs     |  104 ++
 .../imxrt1064-evk/configs/libcxxtest/defconfig     |   41 +
 .../arm/imxrt/imxrt1064-evk/configs/lvgl/defconfig |   63 +
 .../imxrt/imxrt1064-evk/configs/netnsh/defconfig   |   73 ++
 .../arm/imxrt/imxrt1064-evk/configs/nsh/defconfig  |   42 +
 .../imxrt/imxrt1064-evk/configs/nshocram/defconfig |   44 +
 boards/arm/imxrt/imxrt1064-evk/include/board.h     |  372 ++++++
 boards/arm/imxrt/imxrt1064-evk/kernel/Makefile     |  103 ++
 .../imxrt/imxrt1064-evk/kernel/imxrt_userspace.c   |  131 ++
 boards/arm/imxrt/imxrt1064-evk/scripts/Make.defs   |   83 ++
 .../arm/imxrt/imxrt1064-evk/scripts/flash-ocram.ld |  202 +++
 boards/arm/imxrt/imxrt1064-evk/scripts/flash.ld    |  139 ++
 .../imxrt/imxrt1064-evk/scripts/kernel-space.ld    |  120 ++
 boards/arm/imxrt/imxrt1064-evk/scripts/memory.ld   |   83 ++
 .../arm/imxrt/imxrt1064-evk/scripts/user-space.ld  |  136 ++
 boards/arm/imxrt/imxrt1064-evk/src/Makefile        |   85 ++
 boards/arm/imxrt/imxrt1064-evk/src/imxrt1064-evk.h |  337 +++++
 boards/arm/imxrt/imxrt1064-evk/src/imxrt_adc.c     |  167 +++
 boards/arm/imxrt/imxrt1064-evk/src/imxrt_appinit.c |  107 ++
 .../arm/imxrt/imxrt1064-evk/src/imxrt_autoleds.c   |  181 +++
 boards/arm/imxrt/imxrt1064-evk/src/imxrt_boot.c    |  133 ++
 boards/arm/imxrt/imxrt1064-evk/src/imxrt_bringup.c |  307 +++++
 boards/arm/imxrt/imxrt1064-evk/src/imxrt_buttons.c |  177 +++
 .../arm/imxrt/imxrt1064-evk/src/imxrt_ethernet.c   |  291 +++++
 boards/arm/imxrt/imxrt1064-evk/src/imxrt_flexcan.c |   83 ++
 .../imxrt1064-evk/src/imxrt_flexspi_nor_boot.c     |   73 ++
 .../imxrt1064-evk/src/imxrt_flexspi_nor_boot.h     |  184 +++
 .../imxrt1064-evk/src/imxrt_flexspi_nor_flash.c    |  136 ++
 .../src/imxrt_flexspi_nor_flash.h                  |  102 +-
 boards/arm/imxrt/imxrt1064-evk/src/imxrt_ft5x06.c  |  258 ++++
 boards/arm/imxrt/imxrt1064-evk/src/imxrt_gpio.c    |  236 ++++
 boards/arm/imxrt/imxrt1064-evk/src/imxrt_lcd.c     |  108 ++
 .../arm/imxrt/imxrt1064-evk/src/imxrt_mmcsd_spi.c  |  138 ++
 .../imxrt/imxrt1064-evk/src/imxrt_sdram_ini_dcd.c  | 1326 ++++++++++++++++++++
 boards/arm/imxrt/imxrt1064-evk/src/imxrt_spi.c     |  229 ++++
 boards/arm/imxrt/imxrt1064-evk/src/imxrt_usbhost.c |  314 +++++
 .../arm/imxrt/imxrt1064-evk/src/imxrt_userleds.c   |  100 ++
 52 files changed, 7473 insertions(+), 49 deletions(-)

diff --git a/arch/arm/include/imxrt/chip.h b/arch/arm/include/imxrt/chip.h
index 6c3422d..66d6148 100644
--- a/arch/arm/include/imxrt/chip.h
+++ b/arch/arm/include/imxrt/chip.h
@@ -64,11 +64,15 @@
 #elif defined(CONFIG_ARCH_CHIP_MIMXRT1061DVL6A) || \
       defined(CONFIG_ARCH_CHIP_MIMXRT1061CVL5A) || \
       defined(CONFIG_ARCH_CHIP_MIMXRT1062DVL6A) || \
-      defined(CONFIG_ARCH_CHIP_MIMXRT1062CVL5A)
+      defined(CONFIG_ARCH_CHIP_MIMXRT1062CVL5A) || \
+      defined(CONFIG_ARCH_CHIP_MIMXRT1064DVL6A) || \
+      defined(CONFIG_ARCH_CHIP_MIMXRT1064CVL5A)
 /* MIMXRT1061CVL5A - Industrial, Reduced Features, 528MHz
  * MIMXRT1061DVL6A - Consumer, Reduced Features, 600MHz
  * MIMXRT1062CVL5A - Industrial, Full Feature, 528MHz
  * MIMXRT1062DVL6A - Consumer, Full Feature, 600MHz
+ * MIMXRT1064CVL5A - Industrial, Full Feature, 528MHz
+ * MIMXRT1064DVL6A - Consumer, Full Feature, 600MHz
  */
 
 #  define IMXRT_OCRAM_SIZE            (1024 * 1024) /* 1024Kb OCRAM */
diff --git a/arch/arm/src/imxrt/Kconfig b/arch/arm/src/imxrt/Kconfig
index f7e026b..4cff2b4 100644
--- a/arch/arm/src/imxrt/Kconfig
+++ b/arch/arm/src/imxrt/Kconfig
@@ -64,6 +64,16 @@ config ARCH_CHIP_MIMXRT1062CVL5A
 	select ARCH_FAMILY_MIMXRT106xCVL5A
 	select IMXRT_HAVE_LCD
 
+config ARCH_CHIP_MIMXRT1064DVL6A
+	bool "MIMXRT1064DVL6A"
+	select ARCH_FAMILY_MXRT106xDVL6A
+	select IMXRT_HAVE_LCD
+
+config ARCH_CHIP_MIMXRT1064CVL5A
+	bool "MIMXRT1064DVL6A"
+	select ARCH_FAMILY_MIMXRT106xCVL5A
+	select IMXRT_HAVE_LCD
+
 endchoice # i.MX RT Chip Selection
 
 # i.MX RT Families
diff --git a/boards/Kconfig b/boards/Kconfig
index e229027..643ccaa 100644
--- a/boards/Kconfig
+++ b/boards/Kconfig
@@ -401,6 +401,16 @@ config ARCH_BOARD_IMXRT1060_EVK
 		This is the board configuration for the port of NuttX to the NXP i.MXRT
 		evaluation kit, MIMXRT1060-EVK.  This board features the MIMXRT1062DVL6A MCU.
 
+config ARCH_BOARD_IMXRT1064_EVK
+	bool "NXP i.MX RT 1064 EVK"
+	depends on ARCH_CHIP_MIMXRT1064DVL6A
+	select ARCH_HAVE_LEDS
+	select ARCH_HAVE_BUTTONS
+	select ARCH_HAVE_IRQBUTTONS
+	---help---
+		This is the board configuration for the port of NuttX to the NXP i.MXRT
+		evaluation kit, MIMXRT1064-EVK.  This board features the MIMXRT1064DVL6A MCU.
+
 config ARCH_BOARD_LC823450_XGEVK
 	bool "ON Semiconductor LC823450-XGEVK development board"
 	depends on ARCH_CHIP_LC823450
@@ -2281,6 +2291,7 @@ config ARCH_BOARD
 	default "imxrt1020-evk"            if ARCH_BOARD_IMXRT1020_EVK
 	default "imxrt1050-evk"            if ARCH_BOARD_IMXRT1050_EVK
 	default "imxrt1060-evk"            if ARCH_BOARD_IMXRT1060_EVK
+	default "imxrt1064-evk"            if ARCH_BOARD_IMXRT1064_EVK
 	default "kwikstik-k40"             if ARCH_BOARD_KWIKSTIK_K40
 	default "launchxl-cc1310"          if ARCH_BOARD_LAUNCHXL_CC1310
 	default "launchxl-cc1312r1"        if ARCH_BOARD_LAUNCHXL_CC1312R1
@@ -2558,6 +2569,9 @@ endif
 if ARCH_BOARD_IMXRT1060_EVK
 source "boards/arm/imxrt/imxrt1060-evk/Kconfig"
 endif
+if ARCH_BOARD_IMXRT1064_EVK
+source "boards/arm/imxrt/imxrt1064-evk/Kconfig"
+endif
 if ARCH_BOARD_TEENSY_4X
 source "boards/arm/imxrt/teensy-4.x/Kconfig"
 endif
diff --git a/boards/arm/imxrt/imxrt1020-evk/src/imxrt_flexspi_nor_flash.c b/boards/arm/imxrt/imxrt1020-evk/src/imxrt_flexspi_nor_flash.c
index f916b22..e19673d 100644
--- a/boards/arm/imxrt/imxrt1020-evk/src/imxrt_flexspi_nor_flash.c
+++ b/boards/arm/imxrt/imxrt1020-evk/src/imxrt_flexspi_nor_flash.c
@@ -65,8 +65,7 @@ const struct flexspi_nor_config_s g_flash_config =
   {
     .tag                     = FLEXSPI_CFG_BLK_TAG,
     .version                 = FLEXSPI_CFG_BLK_VERSION,
-    .read_sample_clksrc      =
-                    FLASH_READ_SAMPLE_CLK_EXTERNALINPUT_FROM_DQSPAD,
+    .read_sample_clksrc      = FLASH_READ_SAMPLE_CLK_EXT_INPUT_FROM_DQSPAD,
     .cs_hold_time            = 3u,
     .cs_setup_time           = 3u,
     .column_address_width    = 3u,
diff --git a/boards/arm/imxrt/imxrt1020-evk/src/imxrt_flexspi_nor_flash.h b/boards/arm/imxrt/imxrt1020-evk/src/imxrt_flexspi_nor_flash.h
index c7987da..1ccc4f8 100644
--- a/boards/arm/imxrt/imxrt1020-evk/src/imxrt_flexspi_nor_flash.h
+++ b/boards/arm/imxrt/imxrt1020-evk/src/imxrt_flexspi_nor_flash.h
@@ -224,7 +224,7 @@ enum flash_read_sample_clk_e
   FLASH_READ_SAMPLE_CLK_LOOPBACK_INTERNELLY = 0,
   FLASH_READ_SAMPLE_CLK_LOOPBACK_FROM_DQSPAD = 1,
   FLASH_READ_SAMPLE_CLK_LOOPBACK_FROM_SCKPAD = 2,
-  FLASH_READ_SAMPLE_CLK_EXTERNALINPUT_FROM_DQSPAD = 3,
+  FLASH_READ_SAMPLE_CLK_EXT_INPUT_FROM_DQSPAD = 3,
 };
 
 /*  Misc feature bit definitions */
diff --git a/boards/arm/imxrt/imxrt1050-evk/src/imxrt_flexspi_nor_flash.c b/boards/arm/imxrt/imxrt1050-evk/src/imxrt_flexspi_nor_flash.c
index 524dfd1..0851358 100644
--- a/boards/arm/imxrt/imxrt1050-evk/src/imxrt_flexspi_nor_flash.c
+++ b/boards/arm/imxrt/imxrt1050-evk/src/imxrt_flexspi_nor_flash.c
@@ -36,7 +36,7 @@ const struct flexspi_nor_config_s g_flash_config =
   {
     .tag                   = FLEXSPI_CFG_BLK_TAG,
     .version               = FLEXSPI_CFG_BLK_VERSION,
-    .read_sample_clksrc    = FLASH_READ_SAMPLE_CLK_EXTERNALINPUT_FROM_DQSPAD,
+    .read_sample_clksrc    = FLASH_READ_SAMPLE_CLK_EXT_INPUT_FROM_DQSPAD,
     .cs_hold_time          = 3u,
     .cs_setup_time         = 3u,
     .column_address_width  = 3u,
diff --git a/boards/arm/imxrt/imxrt1050-evk/src/imxrt_flexspi_nor_flash.h b/boards/arm/imxrt/imxrt1050-evk/src/imxrt_flexspi_nor_flash.h
index 3f31942..71dc5b4 100644
--- a/boards/arm/imxrt/imxrt1050-evk/src/imxrt_flexspi_nor_flash.h
+++ b/boards/arm/imxrt/imxrt1050-evk/src/imxrt_flexspi_nor_flash.h
@@ -222,7 +222,7 @@ enum flash_read_sample_clk_e
   FLASH_READ_SAMPLE_CLK_LOOPBACK_INTERNELLY = 0,
   FLASH_READ_SAMPLE_CLK_LOOPBACK_FROM_DQSPAD = 1,
   FLASH_READ_SAMPLE_CLK_LOOPBACK_FROM_SCKPAD = 2,
-  FLASH_READ_SAMPLE_CLK_EXTERNALINPUT_FROM_DQSPAD = 3,
+  FLASH_READ_SAMPLE_CLK_EXT_INPUT_FROM_DQSPAD = 3,
 };
 
 /*  Misc feature bit definitions */
diff --git a/boards/arm/imxrt/imxrt1060-evk/src/imxrt_flexspi_nor_flash.c b/boards/arm/imxrt/imxrt1060-evk/src/imxrt_flexspi_nor_flash.c
index c051bc8..801c131 100644
--- a/boards/arm/imxrt/imxrt1060-evk/src/imxrt_flexspi_nor_flash.c
+++ b/boards/arm/imxrt/imxrt1060-evk/src/imxrt_flexspi_nor_flash.c
@@ -36,7 +36,7 @@ const struct flexspi_nor_config_s g_flash_config =
   {
     .tag                   = FLEXSPI_CFG_BLK_TAG,
     .version               = FLEXSPI_CFG_BLK_VERSION,
-    .read_sample_clksrc    = FLASH_READ_SAMPLE_CLK_EXTERNALINPUT_FROM_DQSPAD,
+    .read_sample_clksrc    = FLASH_READ_SAMPLE_CLK_EXT_INPUT_FROM_DQSPAD,
     .cs_hold_time          = 3u,
     .cs_setup_time         = 3u,
     .column_address_width  = 3u,
diff --git a/boards/arm/imxrt/imxrt1060-evk/src/imxrt_flexspi_nor_flash.h b/boards/arm/imxrt/imxrt1060-evk/src/imxrt_flexspi_nor_flash.h
index ded676e..45a5b1d 100644
--- a/boards/arm/imxrt/imxrt1060-evk/src/imxrt_flexspi_nor_flash.h
+++ b/boards/arm/imxrt/imxrt1060-evk/src/imxrt_flexspi_nor_flash.h
@@ -224,7 +224,7 @@ enum flash_read_sample_clk_e
   FLASH_READ_SAMPLE_CLK_LOOPBACK_INTERNELLY = 0,
   FLASH_READ_SAMPLE_CLK_LOOPBACK_FROM_DQSPAD = 1,
   FLASH_READ_SAMPLE_CLK_LOOPBACK_FROM_SCKPAD = 2,
-  FLASH_READ_SAMPLE_CLK_EXTERNALINPUT_FROM_DQSPAD = 3,
+  FLASH_READ_SAMPLE_CLK_EXT_INPUT_FROM_DQSPAD = 3,
 };
 
 /*  Misc feature bit definitions */
diff --git a/boards/arm/imxrt/imxrt1064-evk/Kconfig b/boards/arm/imxrt/imxrt1064-evk/Kconfig
new file mode 100644
index 0000000..119d7a7
--- /dev/null
+++ b/boards/arm/imxrt/imxrt1064-evk/Kconfig
@@ -0,0 +1,27 @@
+#
+# For a description of the syntax of this configuration file,
+# see the file kconfig-language.txt in the NuttX tools repository.
+#
+
+if ARCH_BOARD_IMXRT1064_EVK
+
+choice
+	prompt "Boot Flash"
+	default IMXRT1064_EVK_QSPI_FLASH
+
+config IMXRT1064_EVK_HYPER_FLASH
+	bool "HYPER Flash"
+
+config IMXRT1064_EVK_QSPI_FLASH
+	bool "QSPI Flash"
+
+endchoice # Boot Flash
+
+config IMXRT1064_EVK_SDRAM
+	bool "Enable SDRAM"
+	default n
+	select IMXRT_SEMC_INIT_DONE
+	---help---
+		Activate DCD configuration of SDRAM
+
+endif
diff --git a/boards/arm/imxrt/imxrt1064-evk/README.txt b/boards/arm/imxrt/imxrt1064-evk/README.txt
new file mode 100644
index 0000000..0947793
--- /dev/null
+++ b/boards/arm/imxrt/imxrt1064-evk/README.txt
@@ -0,0 +1,363 @@
+README
+======
+
+  This README file provides information about the port of NuttX to the NXP
+  i.MXRT evaluation kit, MIMXRT1064-EVK.  This board features the
+  MIMXRT1064DVL6A MCU.  Some of the features of this board include:
+
+    o Processor
+
+      - MIMXRT1066DVL6A processor
+
+    o Memory
+
+      - 1 Mb OCRAM memory
+      - 256 Mb SDRAM memory
+      - 512 Mb Hyper Flash - Populated but 0 ohm DNP
+      - 64 Mb QSPI Flash
+      - TF socket for SD card
+
+    o Display and Audio
+
+      - Parallel LCD connector
+      - Camera connector
+      - Audio CODEC
+      - 4-pole audio headphone jack
+      - External speaker connection
+      - Microphone
+      - SPDIF connector
+
+    o Connectivity
+
+      - Micro USB host and OTG connectors
+      - Ethernet (10/100T) connector
+      - CAN transceivers
+      - Arduino® interface
+
+    o Sensors
+
+      - FXOS8700CQ 6-Axis Ecompass (3-Axis Mag, 3-Axis Accel)
+
+Contents
+========
+
+  o Serial Console
+  o LEDs and buttons
+  o J-Link External Debug Probe
+  o Configurations
+    - Configuration sub-directories
+
+Serial Console
+==============
+
+  Virtual console port provided by OpenSDA:
+
+           UART1_TXD   GPIO_AD_B0_12  LPUART1_TX
+           UART1_RXD   GPIO_AD_B0_13  LPUART1_RX
+
+  Arduino RS-232 Shield:
+
+    J22 D0 UART_RX/D0  GPIO_AD_B1_07  LPUART3_RX
+    J22 D1 UART_TX/D1  GPIO_AD_B1_06  LPUART3_TX
+
+LEDs and buttons
+================
+
+  LEDs
+  ----
+
+  There are four LED status indicators located on the EVK Board.  The
+  functions of these LEDs include:
+
+    - Main Power Supply(D3)
+      Green: DC 5V main supply is normal.
+      Red:   J2 input voltage is over 5.6V.
+      Off:   The board is not powered.
+    - Reset RED LED(D21)
+    - OpenSDA LED(D20)
+    - USER LED(D18)
+
+  Only a single LED, D18, is under software control.  It connects to
+  GPIO_AD_B0_09 which is shared with JTAG_TDI and ENET_RST
+
+  This LED is not used by the board port unless CONFIG_ARCH_LEDS is
+  defined.  In that case, the usage by the board port is defined in
+  include/board.h and src/imxrt_autoleds.c. The LED is used to encode
+  OS-related events as follows:
+
+    ------------------- ----------------------- ------
+    SYMBOL              Meaning                 LED
+    ------------------- ----------------------- ------
+    LED_STARTED         NuttX has been started  OFF
+    LED_HEAPALLOCATE    Heap has been allocated OFF
+    LED_IRQSENABLED     Interrupts enabled      OFF
+    LED_STACKCREATED    Idle stack created      ON
+    LED_INIRQ           In an interrupt         N/C
+    LED_SIGNAL          In a signal handler     N/C
+    LED_ASSERTION       An assertion failed     N/C
+    LED_PANIC           The system has crashed  FLASH
+
+  Thus if the LED is statically on, NuttX has successfully  booted and is,
+  apparently, running normally.  If the LED is flashing at approximately
+  2Hz, then a fatal error has been detected and the system has halted.
+
+  Buttons
+  -------
+
+  There are four user interface switches on the MIMXRT1050 EVK Board:
+
+    - SW1: Power Switch (slide switch fir power from J2)
+    - SW2: ON/OFF Button
+    - SW3: Power-on Reset button state forces to reset the system power except
+           SNVS domain
+    - SW9: Reset button
+    - SW8: User button GPIO5-00
+
+  Only the user button is available to the software.  It is sensed on the
+  WAKEUP pin which will be pulled low when the button is pressed.
+
+
+J-Link External Debug Probe
+===========================
+
+  Install the J-Link Debug Host Tools and make sure they are in your search path.
+
+  Attach a J-Link 20-pin connector to J21. Check that jumpers J47 and J48 are
+  off (they are on by default when boards ship from the factory) to ensure SWD
+  signals are disconnected from the OpenSDA microcontroller.
+
+Configurations
+==============
+
+  Information Common to All Configurations
+  ----------------------------------------
+  Each i.MX RT 1064 configuration is maintained in a sub-directory and
+  can be selected as follow:
+
+    tools/configure.sh [OPTIONS] imxrt1064-evk:<subdir>
+
+  Where typical options are -l to configure to build on Linux or -c to
+  configure for Cygwin under Linux.  'tools/configure.sh -h' will show
+  you all of the options.
+
+  Before building, make sure the PATH environment variable include the
+  correct path to the directory than holds your toolchain binaries.
+
+  And then build NuttX by simply typing the following.  At the conclusion of
+  the make, the nuttx binary will reside in an ELF file called, simply, nuttx.
+
+    make
+
+  The <subdir> that is provided above as an argument to the tools/configure.sh
+  must be is one of the following.
+
+  NOTES:
+
+  1. These configurations use the mconf-based configuration tool.  To
+    change any of these configurations using that tool, you should:
+
+    a. Build and install the kconfig-mconf tool.  See nuttx/README.txt
+       see additional README.txt files in the NuttX tools repository.
+
+    b. Execute 'make menuconfig' in nuttx/ in order to start the
+       reconfiguration process.
+
+  2. Unless stated otherwise, all configurations generate console
+     output on UART3 (i.e., for the Arduino serial shield).
+
+  3. All of these configurations are set up to build under Windows using the
+     "GNU Tools for ARM Embedded Processors" that is maintained by ARM
+     (unless stated otherwise in the description of the configuration).
+
+       https://developer.arm.com/open-source/gnu-toolchain/gnu-rm
+
+     That toolchain selection can easily be reconfigured using
+     'make menuconfig'.  Here are the relevant current settings:
+
+     Build Setup:
+       CONFIG_HOST_WINDOWS=y               : Window environment
+       CONFIG_WINDOWS_CYGWIN=y             : Cywin under Windows
+
+     System Type -> Toolchain:
+       CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIW=y : GNU ARM EABI toolchain
+
+Configuration sub-directories
+-----------------------------
+
+  can:
+
+    This is an nsh configuration (see below) with added support of CAN driver.
+    FlexCAN3 is chosen as default, the change can be made at System type peripheral
+    selection. Please note that only FlexCAN3 and FlexCAN2 is available on this board.
+
+    Bitrate and sample point can be also changed at System type peripheral selection,
+    basic values are 1 MHz for bitrate and 0.80 for sample point. The FlexCAN driver
+    for imxrt runs at 80 MHz clock frequency.
+
+    The configuration also includes CAN utilities as candump and cansend.
+
+  canfd:
+
+    This is an nsh configuration (see below) with added support of CAN_FD driver.
+    FlexCAN3 is chosen as default, please note that only FlexCAN3 is capable of
+    providing CAN_FD support.
+
+    Bitrate and sample point can be also changed at System type peripheral selection,
+    basic values are 1 MHz for bitrate and 0.80 for sample point for arbitration phase
+    and 4 MHz (bitrate) and 0.90 (sample point) for data phase. The FlexCAN driver
+    for imxrt runs at 80 MHz clock frequency.
+
+    The configuration also includes CAN utilities as candump and cansend.
+
+  knsh:
+
+    This is identical to the nsh configuration below except that NuttX
+    is built as a protected mode, monolithic module and the user applications
+    are built separately.  It is recommends to use a special make command;
+    not just 'make' but make with the following two arguments:
+
+        make pass1 pass2
+
+    In the normal case (just 'make'), make will attempt to build both user-
+    and kernel-mode blobs more or less interleaved.  This actual works!
+    However, for me it is very confusing so I prefer the above make command:
+    Make the user-space binaries first (pass1), then make the kernel-space
+    binaries (pass2)
+
+    NOTES:
+
+    1. At the end of the build, there will be several files in the top-level
+       NuttX build directory:
+
+       PASS1:
+         nuttx_user.elf    - The pass1 user-space ELF file
+         nuttx_user.hex    - The pass1 Intel HEX format file (selected in defconfig)
+         User.map          - Symbols in the user-space ELF file
+
+       PASS2:
+         nuttx             - The pass2 kernel-space ELF file
+         nuttx.hex         - The pass2 Intel HEX file (selected in defconfig)
+         System.map        - Symbols in the kernel-space ELF file
+
+       The J-Link programmer will except files in .hex, .mot, .srec, and .bin
+       formats.
+
+    2. Combining .hex files.  If you plan to use the .hex files with your
+       debugger or FLASH utility, then you may need to combine the two hex
+       files into a single .hex file.  Here is how you can do that.
+
+       a. The 'tail' of the nuttx.hex file should look something like this
+          (with my comments added beginning with #):
+
+            $ tail nuttx.hex
+            #xx xxxx 00 data records
+            ...
+            :10 C93C 00 000000000040184000C2010000000000 90
+            :10 C94C 00 2400080000801B4000C01B4000001C40 5D
+            :10 C95C 00 00401C4000000C4050BF0060FF000100 74
+            #xx xxxx 05 Start Linear Address Record
+            :04 0000 05 6000 02C1 D4
+            #xx xxxx 01 End Of File record
+            :00 0000 01 FF
+
+          Use an editor such as vi to remove the 05 and 01 records.
+
+       b. The 'head' of the nuttx_user.hex file should look something like
+          this (again with my comments added beginning with #):
+
+            $ head nuttx_user.hex
+            #xx xxxx 04 Extended Linear Address Record
+            :02 0000 04 6020 7A
+            #xx xxxx 00 data records
+            :10 0000 00 8905206030002060F2622060FC622060 80
+            :10 0010 00 0000242008002420080024205C012420 63
+            :10 0020 00 140024203D0020603100206071052060 14
+            ...
+
+          Nothing needs to be done here.  The nuttx_user.hex file should
+          be fine.
+
+       c. Combine the edited nuttx.hex and un-edited nuttx_user.hex
+          file to produce a single combined hex file:
+
+          $ cat nuttx.hex nuttx_user.hex >combined.hex
+
+       Then use the combined.hex file with the to write the FLASH image.
+       If you do this a lot, you will probably want to invest a little time
+       to develop a tool to automate these steps.
+
+    STATUS:  This configuration was added on 8 June 2018 primarily to assure
+    that all of the components are in place to support the PROTECTED mode
+    build.  This configuration, however, has not been verified as of this
+    writing.
+
+  netnsh:
+
+    This configuration is similar to the nsh configuration except that is
+    has networking enabled, both IPv4 and IPv6.  This NSH configuration is
+    focused on network-related testing.
+
+    NOTES:
+
+    1. LED support is disabled because there is a conflict between the LED
+       GPIO and PHY pin usage.
+
+    2. Telnet is enabled.  But since both IPv4 and IPv6 are enabled, it
+       will default to IPv6.  That means that to connect a Telnet session
+       from a PC, you will need to use the IPv6 address which by defaault
+       is:
+
+         telnet fc00::2
+
+       Or, disable IPv4 support so that only IPv4 addressing is used.
+
+    3. The network monitor is not enabled in this configuration.  As a
+       result, the Ethernet cable must be connected when the board is
+       powered up.  Otherwise, it will stall for a long period of time
+       before the NSH prompt appears and you will not be able to used
+       the board.
+
+       The following configuration options should be added to your
+       configuration in order to use the network monitor:
+
+         CONFIG_IMXRT_ENET_PHYINIT=y
+         CONFIG_IMXRT_GPIO1_0_15_IRQ=y
+         CONFIG_IMXRT_GPIO_IRQ=y
+         CONFIG_NETDEV_IOCTL=y
+         CONFIG_NETDEV_PHY_IOCTL=y
+         CONFIG_NSH_NETINIT_MONITOR=y
+         CONFIG_NSH_NETINIT_RETRYMSEC=2000
+         CONFIG_NSH_NETINIT_SIGNO=18
+         CONFIG_NSH_NETINIT_THREAD=y
+         CONFIG_NSH_NETINIT_THREAD_PRIORITY=80
+         CONFIG_NSH_NETINIT_THREAD_STACKSIZE=1568
+
+  nsh:
+
+    Configures the NuttShell (nsh) located at examples/nsh.  This NSH
+    configuration is focused on low level, command-line driver testing.
+    Built-in applications are supported, but none are enabled.  This
+    configuration does not support a network.
+
+  lvgl:
+
+    Configures the Littlev graphic library (lvgl) demo located under
+    examples/lvgldemo. This configuration needs the optional LCD model
+    RK043FN02H-CT from NXP. The LCD panel comes with the integrated
+    capacitive touchscreen sensor FT5336GQQ connected to the LPI2C1 bus,
+    address 0x38. NuttX support such touchscreen device via the driver
+    ft5x06 (drivers/input/ft5x06.c). At the moment only the polling
+    method is available, the board features an interrupt line connected
+    to the touchscreen sensor IC.
+
+    IMXRT1062 MCU provides the integrated LCD driver.
+
+    The LCD panel features:
+    - size 4.3"
+    - resolution 480×272 RGB
+    - backlight driver
+    - dimensions [mm]: 105.5 (W) x 67.2(H) x 4.35(D) Max.
+
+    To run the lvgl demo please type "lvgldemo" at nsh prompt:
+
+    nsh> lvgldemo
diff --git a/boards/arm/imxrt/imxrt1064-evk/configs/can/defconfig b/boards/arm/imxrt/imxrt1064-evk/configs/can/defconfig
new file mode 100644
index 0000000..c6e6981
--- /dev/null
+++ b/boards/arm/imxrt/imxrt1064-evk/configs/can/defconfig
@@ -0,0 +1,79 @@
+#
+# This file is autogenerated: PLEASE DO NOT EDIT IT.
+#
+# You can use "make menuconfig" to make any modifications to the installed .config file.
+# You can then do "make savedefconfig" to generate a new defconfig file that includes your
+# modifications.
+#
+# CONFIG_NET_CAN_CANFD is not set
+# CONFIG_NET_ETHERNET is not set
+# CONFIG_NET_IPv4 is not set
+CONFIG_ARCH="arm"
+CONFIG_ARCH_BOARD="imxrt1064-evk"
+CONFIG_ARCH_BOARD_IMXRT1064_EVK=y
+CONFIG_ARCH_CHIP="imxrt"
+CONFIG_ARCH_CHIP_IMXRT=y
+CONFIG_ARCH_CHIP_MIMXRT1064DVL6A=y
+CONFIG_ARCH_STACKDUMP=y
+CONFIG_ARMV7M_DCACHE=y
+CONFIG_ARMV7M_DCACHE_WRITETHROUGH=y
+CONFIG_ARMV7M_ICACHE=y
+CONFIG_ARMV7M_USEBASEPRI=y
+CONFIG_BOARD_LOOPSPERMSEC=104926
+CONFIG_BUILTIN=y
+CONFIG_CAN=y
+CONFIG_CANUTILS_CANDUMP=y
+CONFIG_CANUTILS_CANSEND=y
+CONFIG_DEBUG_BINFMT=y
+CONFIG_DEBUG_BINFMT_ERROR=y
+CONFIG_DEBUG_BINFMT_INFO=y
+CONFIG_DEBUG_BINFMT_WARN=y
+CONFIG_DEBUG_CAN=y
+CONFIG_DEBUG_CAN_ERROR=y
+CONFIG_DEBUG_CAN_INFO=y
+CONFIG_DEBUG_CAN_WARN=y
+CONFIG_DEBUG_ERROR=y
+CONFIG_DEBUG_FEATURES=y
+CONFIG_DEBUG_FULLOPT=y
+CONFIG_DEBUG_INFO=y
+CONFIG_DEBUG_IRQ=y
+CONFIG_DEBUG_IRQ_ERROR=y
+CONFIG_DEBUG_IRQ_INFO=y
+CONFIG_DEBUG_IRQ_WARN=y
+CONFIG_DEBUG_NET=y
+CONFIG_DEBUG_NET_ERROR=y
+CONFIG_DEBUG_NET_INFO=y
+CONFIG_DEBUG_NET_WARN=y
+CONFIG_DEBUG_SYMBOLS=y
+CONFIG_DEBUG_WARN=y
+CONFIG_FS_PROCFS=y
+CONFIG_IDLETHREAD_STACKSIZE=2048
+CONFIG_IMXRT_FLEXCAN3=y
+CONFIG_IMXRT_LPUART1=y
+CONFIG_INTELHEX_BINARY=y
+CONFIG_LPUART1_SERIAL_CONSOLE=y
+CONFIG_MAX_TASKS=16
+CONFIG_NET=y
+CONFIG_NETDEVICES=y
+CONFIG_NETDEV_IFINDEX=y
+CONFIG_NETDEV_LATEINIT=y
+CONFIG_NETDEV_STATISTICS=y
+CONFIG_NET_CAN=y
+CONFIG_NET_CAN_NOTIFIER=y
+CONFIG_NET_SOCKOPTS=y
+CONFIG_NET_STATISTICS=y
+CONFIG_NET_TIMESTAMP=y
+CONFIG_NFILE_DESCRIPTORS=8
+CONFIG_NSH_ARCHINIT=y
+CONFIG_NSH_BUILTIN_APPS=y
+CONFIG_NSH_FILEIOSIZE=512
+CONFIG_NSH_LINELEN=64
+CONFIG_NSH_READLINE=y
+CONFIG_RAM_SIZE=1048576
+CONFIG_RAM_START=0x20200000
+CONFIG_SCHED_HPWORK=y
+CONFIG_SIG_DEFAULT=y
+CONFIG_START_DAY=14
+CONFIG_START_MONTH=3
+CONFIG_SYSTEM_NSH=y
+CONFIG_USER_ENTRYPOINT="nsh_main"
diff --git a/boards/arm/imxrt/imxrt1064-evk/configs/canfd/defconfig b/boards/arm/imxrt/imxrt1064-evk/configs/canfd/defconfig
new file mode 100644
index 0000000..6f431f0
--- /dev/null
+++ b/boards/arm/imxrt/imxrt1064-evk/configs/canfd/defconfig
@@ -0,0 +1,80 @@
+#
+# This file is autogenerated: PLEASE DO NOT EDIT IT.
+#
+# You can use "make menuconfig" to make any modifications to the installed .config file.
+# You can then do "make savedefconfig" to generate a new defconfig file that includes your
+# modifications.
+#
+# CONFIG_NET_ETHERNET is not set
+# CONFIG_NET_IPv4 is not set
+CONFIG_ARCH="arm"
+CONFIG_ARCH_BOARD="imxrt1064-evk"
+CONFIG_ARCH_BOARD_IMXRT1064_EVK=y
+CONFIG_ARCH_CHIP="imxrt"
+CONFIG_ARCH_CHIP_IMXRT=y
+CONFIG_ARCH_CHIP_MIMXRT1064DVL6A=y
+CONFIG_ARCH_STACKDUMP=y
+CONFIG_ARMV7M_DCACHE=y
+CONFIG_ARMV7M_DCACHE_WRITETHROUGH=y
+CONFIG_ARMV7M_ICACHE=y
+CONFIG_ARMV7M_USEBASEPRI=y
+CONFIG_BOARD_LOOPSPERMSEC=104926
+CONFIG_BUILTIN=y
+CONFIG_CAN=y
+CONFIG_CANUTILS_CANDUMP=y
+CONFIG_CANUTILS_CANSEND=y
+CONFIG_CAN_EXTID=y
+CONFIG_CAN_FD=y
+CONFIG_DEBUG_BINFMT=y
+CONFIG_DEBUG_BINFMT_ERROR=y
+CONFIG_DEBUG_BINFMT_INFO=y
+CONFIG_DEBUG_BINFMT_WARN=y
+CONFIG_DEBUG_CAN=y
+CONFIG_DEBUG_CAN_ERROR=y
+CONFIG_DEBUG_CAN_INFO=y
+CONFIG_DEBUG_CAN_WARN=y
+CONFIG_DEBUG_ERROR=y
+CONFIG_DEBUG_FEATURES=y
+CONFIG_DEBUG_FULLOPT=y
+CONFIG_DEBUG_INFO=y
+CONFIG_DEBUG_IRQ=y
+CONFIG_DEBUG_IRQ_ERROR=y
+CONFIG_DEBUG_IRQ_INFO=y
+CONFIG_DEBUG_IRQ_WARN=y
+CONFIG_DEBUG_NET=y
+CONFIG_DEBUG_NET_ERROR=y
+CONFIG_DEBUG_NET_INFO=y
+CONFIG_DEBUG_NET_WARN=y
+CONFIG_DEBUG_SYMBOLS=y
+CONFIG_DEBUG_WARN=y
+CONFIG_FS_PROCFS=y
+CONFIG_IDLETHREAD_STACKSIZE=2048
+CONFIG_IMXRT_FLEXCAN3=y
+CONFIG_IMXRT_LPUART1=y
+CONFIG_INTELHEX_BINARY=y
+CONFIG_LPUART1_SERIAL_CONSOLE=y
+CONFIG_MAX_TASKS=16
+CONFIG_NET=y
+CONFIG_NETDEVICES=y
+CONFIG_NETDEV_IFINDEX=y
+CONFIG_NETDEV_LATEINIT=y
+CONFIG_NETDEV_STATISTICS=y
+CONFIG_NET_CAN=y
+CONFIG_NET_CAN_NOTIFIER=y
+CONFIG_NET_CAN_SOCK_OPTS=y
+CONFIG_NET_STATISTICS=y
+CONFIG_NET_TIMESTAMP=y
+CONFIG_NFILE_DESCRIPTORS=8
+CONFIG_NSH_ARCHINIT=y
+CONFIG_NSH_BUILTIN_APPS=y
+CONFIG_NSH_FILEIOSIZE=512
+CONFIG_NSH_LINELEN=64
+CONFIG_NSH_READLINE=y
+CONFIG_RAM_SIZE=1048576
+CONFIG_RAM_START=0x20200000
+CONFIG_SCHED_HPWORK=y
+CONFIG_SIG_DEFAULT=y
+CONFIG_START_DAY=14
+CONFIG_START_MONTH=3
+CONFIG_SYSTEM_NSH=y
+CONFIG_USER_ENTRYPOINT="nsh_main"
diff --git a/boards/arm/imxrt/imxrt1064-evk/configs/knsh/Make.defs b/boards/arm/imxrt/imxrt1064-evk/configs/knsh/Make.defs
new file mode 100644
index 0000000..c1a94e7
--- /dev/null
+++ b/boards/arm/imxrt/imxrt1064-evk/configs/knsh/Make.defs
@@ -0,0 +1,77 @@
+############################################################################
+# boards/arm/imxrt/imxrt1060-evk/configs/knsh/Make.defs
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.  The
+# ASF licenses this file to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance with the
+# License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+############################################################################
+
+include $(TOPDIR)/.config
+include $(TOPDIR)/tools/Config.mk
+include $(TOPDIR)/arch/arm/src/armv7-m/Toolchain.defs
+
+LDSCRIPT1 = memory.ld
+LDSCRIPT2 = kernel-space.ld
+
+ifeq ($(CONFIG_CYGWIN_WINTOOL),y)
+  ARCHSCRIPT = -T "${shell cygpath -w $(BOARD_DIR)$(DELIM)scripts$(DELIM)$(LDSCRIPT1)}"
+  ARCHSCRIPT += -T "${shell cygpath -w $(BOARD_DIR)$(DELIM)scripts$(DELIM)$(LDSCRIPT2)}"
+else
+  ARCHSCRIPT = -T$(BOARD_DIR)$(DELIM)scripts$(DELIM)$(LDSCRIPT1)
+  ARCHSCRIPT += -T$(BOARD_DIR)$(DELIM)scripts$(DELIM)$(LDSCRIPT2)
+endif
+
+ifeq ($(CONFIG_DEBUG_SYMBOLS),y)
+  ARCHOPTIMIZATION = -g
+endif
+
+ifneq ($(CONFIG_DEBUG_NOOPT),y)
+  ARCHOPTIMIZATION += $(MAXOPTIMIZATION)
+endif
+
+ARCHCFLAGS = -fno-builtin
+ARCHCXXFLAGS = -fno-builtin -fno-exceptions -fcheck-new -fno-rtti
+ARCHWARNINGS = -Wall -Wstrict-prototypes -Wshadow -Wundef -fno-strict-aliasing
+ARCHWARNINGSXX = -Wall -Wshadow -Wundef
+ARCHPICFLAGS = -fpic -msingle-pic-base -mpic-register=r10
+
+CFLAGS := $(ARCHCFLAGS) $(ARCHWARNINGS) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRAFLAGS) -pipe
+CPICFLAGS = $(ARCHPICFLAGS) $(CFLAGS)
+CXXFLAGS := $(ARCHCXXFLAGS) $(ARCHWARNINGSXX) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHXXINCLUDES) $(ARCHDEFINES) $(EXTRAFLAGS) -pipe
+CXXPICFLAGS = $(ARCHPICFLAGS) $(CXXFLAGS)
+CPPFLAGS := $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRAFLAGS)
+AFLAGS := $(CFLAGS) -D__ASSEMBLY__
+
+NXFLATLDFLAGS1 = -r -d -warn-common
+NXFLATLDFLAGS2 = $(NXFLATLDFLAGS1) -T$(TOPDIR)/binfmt/libnxflat/gnu-nxflat-pcrel.ld -no-check-sections
+LDNXFLATFLAGS = -e main -s 2048
+
+# Loadable module definitions
+
+CMODULEFLAGS = $(CFLAGS) -mlong-calls # --target1-abs
+
+LDMODULEFLAGS = -r -e module_initialize
+ifeq ($(CONFIG_CYGWIN_WINTOOL),y)
+  LDMODULEFLAGS += -T "${shell cygpath -w $(TOPDIR)/libs/libc/modlib/gnu-elf.ld}"
+else
+  LDMODULEFLAGS += -T $(TOPDIR)/libs/libc/modlib/gnu-elf.ld
+endif
+
+ifneq ($(CROSSDEV),arm-nuttx-elf-)
+  LDFLAGS += -nostartfiles -nodefaultlibs
+endif
+ifeq ($(CONFIG_DEBUG_SYMBOLS),y)
+  LDFLAGS += -g
+endif
diff --git a/boards/arm/imxrt/imxrt1064-evk/configs/knsh/defconfig b/boards/arm/imxrt/imxrt1064-evk/configs/knsh/defconfig
new file mode 100644
index 0000000..f914c66
--- /dev/null
+++ b/boards/arm/imxrt/imxrt1064-evk/configs/knsh/defconfig
@@ -0,0 +1,45 @@
+#
+# This file is autogenerated: PLEASE DO NOT EDIT IT.
+#
+# You can use "make menuconfig" to make any modifications to the installed .config file.
+# You can then do "make savedefconfig" to generate a new defconfig file that includes your
+# modifications.
+#
+# CONFIG_ARCH_RAMFUNCS is not set
+CONFIG_ARCH="arm"
+CONFIG_ARCH_BOARD="imxrt1064-evk"
+CONFIG_ARCH_BOARD_IMXRT1064_EVK=y
+CONFIG_ARCH_CHIP="imxrt"
+CONFIG_ARCH_CHIP_IMXRT=y
+CONFIG_ARCH_CHIP_MIMXRT1064DVL6A=y
+CONFIG_ARCH_STACKDUMP=y
+CONFIG_ARMV7M_DCACHE=y
+CONFIG_ARMV7M_DCACHE_WRITETHROUGH=y
+CONFIG_ARMV7M_ICACHE=y
+CONFIG_ARMV7M_LAZYFPU=y
+CONFIG_ARMV7M_USEBASEPRI=y
+CONFIG_ARM_MPU=y
+CONFIG_BOARD_LOOPSPERMSEC=104926
+CONFIG_BUILD_PROTECTED=y
+CONFIG_FS_PROCFS=y
+CONFIG_IDLETHREAD_STACKSIZE=2048
+CONFIG_IMXRT_LPUART1=y
+CONFIG_INTELHEX_BINARY=y
+CONFIG_LPUART1_SERIAL_CONSOLE=y
+CONFIG_MAX_TASKS=16
+CONFIG_NFILE_DESCRIPTORS=8
+CONFIG_NSH_ARCHINIT=y
+CONFIG_NSH_DISABLE_MKRD=y
+CONFIG_NSH_FILEIOSIZE=512
+CONFIG_NSH_LINELEN=64
+CONFIG_NSH_READLINE=y
+CONFIG_NUTTX_USERSPACE=0x60200000
+CONFIG_PASS1_BUILDIR="boards/arm/imxrt/imxrt1060-evk/kernel"
+CONFIG_RAM_SIZE=1048576
+CONFIG_RAM_START=0x20200000
+CONFIG_SCHED_WAITPID=y
+CONFIG_START_DAY=8
+CONFIG_START_MONTH=6
+CONFIG_SYSTEM_NSH=y
+CONFIG_SYS_RESERVED=8
+CONFIG_USER_ENTRYPOINT="nsh_main"
diff --git a/boards/arm/imxrt/imxrt1064-evk/configs/libcxxtest/Make.defs b/boards/arm/imxrt/imxrt1064-evk/configs/libcxxtest/Make.defs
new file mode 100644
index 0000000..c4c2110
--- /dev/null
+++ b/boards/arm/imxrt/imxrt1064-evk/configs/libcxxtest/Make.defs
@@ -0,0 +1,104 @@
+############################################################################
+# boards/arm/imxrt/imxrt1060-evk/configs/libcxxtest/Make.defs
+#
+#   Copyright (C) 2018 Gregory Nutt. All rights reserved.
+#   Author: Gregory Nutt <gn...@nuttx.org>
+#           Daniel Pereira Volpato <dp...@certi.org.br>
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in
+#    the documentation and/or other materials provided with the
+#    distribution.
+# 3. Neither the name NuttX nor the names of its contributors may be
+#    used to endorse or promote products derived from this software
+#    without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+############################################################################
+
+include $(TOPDIR)/.config
+include $(TOPDIR)/tools/Config.mk
+include $(TOPDIR)/arch/arm/src/armv7-m/Toolchain.defs
+
+ifeq ($(CONFIG_ARMV7M_DTCM),y)
+  LDSCRIPT = flash-dtcm.ld
+else
+  LDSCRIPT = flash-ocram.ld
+endif
+
+ifeq ($(CONFIG_CYGWIN_WINTOOL),y)
+  ARCHSCRIPT = -T "${shell cygpath -w $(BOARD_DIR)$(DELIM)scripts$(DELIM)$(LDSCRIPT)}"
+else
+  ARCHSCRIPT = -T$(BOARD_DIR)$(DELIM)scripts$(DELIM)$(LDSCRIPT)
+endif
+
+ifeq ($(CONFIG_DEBUG_SYMBOLS),y)
+  ARCHOPTIMIZATION = -g
+endif
+
+ifneq ($(CONFIG_DEBUG_NOOPT),y)
+  ARCHOPTIMIZATION += $(MAXOPTIMIZATION) -fno-strict-aliasing \
+                      -fno-strength-reduce -fomit-frame-pointer
+endif
+
+ARCHCFLAGS = -fno-builtin
+ifeq ($(CONFIG_CXX_EXCEPTION),y)
+  ARCHCPUFLAGSXX = -fno-builtin
+else
+  ARCHCPUFLAGSXX = -fno-builtin -fno-exceptions -fcheck-new
+endif
+ARCHWARNINGS = -Wall -Wstrict-prototypes -Wshadow -Wundef #-fno-strict-aliasing
+ARCHWARNINGSXX = -Wall -Wshadow -Wundef
+ARCHPICFLAGS = -fpic -msingle-pic-base -mpic-register=r10
+
+
+CFLAGS := $(ARCHCFLAGS) $(ARCHWARNINGS) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRAFLAGS) -pipe
+CPICFLAGS = $(ARCHPICFLAGS) $(CFLAGS)
+CXXFLAGS  = $(ARCHCXXFLAGS) $(ARCHWARNINGSXX) $(ARCHOPTIMIZATION) \
+            $(ARCHCPUFLAGS) $(ARCHXXINCLUDES)
+CXXFLAGS += $(ARCHDEFINES) $(EXTRAFLAGS) -pipe -std=c++11
+CXXFLAGS += -fno-builtin -fno-exceptions -fcheck-new -fno-rtti
+CXXFLAGS += -pedantic -D_DEBUG -D_LIBCPP_BUILD_STATIC -D_LIBCPP_NO_EXCEPTIONS
+CXXPICFLAGS = $(ARCHPICFLAGS) $(CXXFLAGS)
+CPPFLAGS := $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRAFLAGS)
+AFLAGS := $(CFLAGS) -D__ASSEMBLY__
+
+NXFLATLDFLAGS1 = -r -d -warn-common
+NXFLATLDFLAGS2 = $(NXFLATLDFLAGS1) -T$(TOPDIR)/binfmt/libnxflat/gnu-nxflat-pcrel.ld -no-check-sections
+LDNXFLATFLAGS = -e main -s 2048
+
+# Loadable module definitions
+
+CMODULEFLAGS = $(CFLAGS) -mlong-calls # --target1-abs
+
+LDMODULEFLAGS = -r -e module_initialize
+ifeq ($(CONFIG_CYGWIN_WINTOOL),y)
+  LDMODULEFLAGS += -T "${shell cygpath -w $(TOPDIR)/libs/libc/modlib/gnu-elf.ld}"
+else
+  LDMODULEFLAGS += -T $(TOPDIR)/libs/libc/modlib/gnu-elf.ld
+endif
+
+ifneq ($(CROSSDEV),arm-nuttx-elf-)
+  LDFLAGS += -nostartfiles -nodefaultlibs
+endif
+ifeq ($(CONFIG_DEBUG_SYMBOLS),y)
+  LDFLAGS += -g
+endif
diff --git a/boards/arm/imxrt/imxrt1064-evk/configs/libcxxtest/defconfig b/boards/arm/imxrt/imxrt1064-evk/configs/libcxxtest/defconfig
new file mode 100644
index 0000000..c2f0fb8
--- /dev/null
+++ b/boards/arm/imxrt/imxrt1064-evk/configs/libcxxtest/defconfig
@@ -0,0 +1,41 @@
+#
+# This file is autogenerated: PLEASE DO NOT EDIT IT.
+#
+# You can use "make menuconfig" to make any modifications to the installed .config file.
+# You can then do "make savedefconfig" to generate a new defconfig file that includes your
+# modifications.
+#
+CONFIG_ARCH="arm"
+CONFIG_ARCH_BOARD="imxrt1064-evk"
+CONFIG_ARCH_BOARD_IMXRT1064_EVK=y
+CONFIG_ARCH_CHIP="imxrt"
+CONFIG_ARCH_CHIP_IMXRT=y
+CONFIG_ARCH_CHIP_MIMXRT1064DVL6A=y
+CONFIG_ARCH_STACKDUMP=y
+CONFIG_BOARD_LATE_INITIALIZE=y
+CONFIG_BOARD_LOOPSPERMSEC=20000
+CONFIG_BUILTIN=y
+CONFIG_C99_BOOL8=y
+CONFIG_FS_PROCFS=y
+CONFIG_HAVE_CXX=y
+CONFIG_IDLETHREAD_STACKSIZE=2048
+CONFIG_IMXRT_LPUART1=y
+CONFIG_INTELHEX_BINARY=y
+CONFIG_LIBCXX=y
+CONFIG_LIBC_FLOATINGPOINT=y
+CONFIG_LIBC_LOCALTIME=y
+CONFIG_LIBM=y
+CONFIG_LPUART1_SERIAL_CONSOLE=y
+CONFIG_MAX_TASKS=16
+CONFIG_NFILE_DESCRIPTORS=8
+CONFIG_NSH_BUILTIN_APPS=y
+CONFIG_NSH_FILEIOSIZE=512
+CONFIG_NSH_LINELEN=64
+CONFIG_NSH_READLINE=y
+CONFIG_RAM_SIZE=1048576
+CONFIG_RAM_START=0x20200000
+CONFIG_SCHED_CPULOAD=y
+CONFIG_START_DAY=14
+CONFIG_START_MONTH=3
+CONFIG_SYSTEM_NSH=y
+CONFIG_USER_ENTRYPOINT="nsh_main"
diff --git a/boards/arm/imxrt/imxrt1064-evk/configs/lvgl/defconfig b/boards/arm/imxrt/imxrt1064-evk/configs/lvgl/defconfig
new file mode 100644
index 0000000..ab54b01
--- /dev/null
+++ b/boards/arm/imxrt/imxrt1064-evk/configs/lvgl/defconfig
@@ -0,0 +1,63 @@
+#
+# This file is autogenerated: PLEASE DO NOT EDIT IT.
+#
+# You can use "make menuconfig" to make any modifications to the installed .config file.
+# You can then do "make savedefconfig" to generate a new defconfig file that includes your
+# modifications.
+#
+CONFIG_ARCH="arm"
+CONFIG_ARCH_BOARD="imxrt1064-evk"
+CONFIG_ARCH_BOARD_IMXRT1064_EVK=y
+CONFIG_ARCH_CHIP="imxrt"
+CONFIG_ARCH_CHIP_IMXRT=y
+CONFIG_ARCH_CHIP_MIMXRT1064DVL6A=y
+CONFIG_ARCH_STACKDUMP=y
+CONFIG_ARMV7M_DCACHE=y
+CONFIG_ARMV7M_DCACHE_WRITETHROUGH=y
+CONFIG_ARMV7M_ICACHE=y
+CONFIG_ARMV7M_USEBASEPRI=y
+CONFIG_BOARD_LOOPSPERMSEC=104926
+CONFIG_BUILTIN=y
+CONFIG_DRIVERS_VIDEO=y
+CONFIG_EXAMPLES_LVGLDEMO=y
+CONFIG_FS_PROCFS=y
+CONFIG_FT5X06_NPOLLWAITERS=8
+CONFIG_FT5X06_POLLMODE=y
+CONFIG_FT5X06_SINGLEPOINT=y
+CONFIG_FT5X06_SWAPXY=y
+CONFIG_FT5X06_THRESHX=9
+CONFIG_FT5X06_THRESHY=15
+CONFIG_GRAPHICS_LVGL=y
+CONFIG_IDLETHREAD_STACKSIZE=2048
+CONFIG_IMXRT_GPIO1_0_15_IRQ=y
+CONFIG_IMXRT_GPIO_IRQ=y
+CONFIG_IMXRT_LCD=y
+CONFIG_IMXRT_LCD_HBACKPORCH=43
+CONFIG_IMXRT_LCD_HFRONTPORCH=8
+CONFIG_IMXRT_LCD_VBACKPORCH=12
+CONFIG_IMXRT_LCD_VRAMBASE=0x20240000
+CONFIG_IMXRT_LPI2C1=y
+CONFIG_IMXRT_LPUART1=y
+CONFIG_INPUT=y
+CONFIG_INPUT_FT5X06=y
+CONFIG_INTELHEX_BINARY=y
+CONFIG_LPUART1_SERIAL_CONSOLE=y
+CONFIG_LV_HOR_RES=480
+CONFIG_LV_VER_RES=272
+CONFIG_MAX_TASKS=16
+CONFIG_MOTOROLA_SREC=y
+CONFIG_NFILE_DESCRIPTORS=8
+CONFIG_NSH_ARCHINIT=y
+CONFIG_NSH_BUILTIN_APPS=y
+CONFIG_NSH_DISABLE_IFUPDOWN=y
+CONFIG_NSH_FILEIOSIZE=512
+CONFIG_NSH_LINELEN=64
+CONFIG_NSH_READLINE=y
+CONFIG_RAM_SIZE=1048576
+CONFIG_RAM_START=0x20200000
+CONFIG_SCHED_HPWORK=y
+CONFIG_START_DAY=14
+CONFIG_START_MONTH=3
+CONFIG_SYSTEM_NSH=y
+CONFIG_USER_ENTRYPOINT="nsh_main"
+CONFIG_VIDEO_FB=y
diff --git a/boards/arm/imxrt/imxrt1064-evk/configs/netnsh/defconfig b/boards/arm/imxrt/imxrt1064-evk/configs/netnsh/defconfig
new file mode 100644
index 0000000..d4726bf
--- /dev/null
+++ b/boards/arm/imxrt/imxrt1064-evk/configs/netnsh/defconfig
@@ -0,0 +1,73 @@
+#
+# This file is autogenerated: PLEASE DO NOT EDIT IT.
+#
+# You can use "make menuconfig" to make any modifications to the installed .config file.
+# You can then do "make savedefconfig" to generate a new defconfig file that includes your
+# modifications.
+#
+# CONFIG_ARCH_LEDS is not set
+CONFIG_ARCH="arm"
+CONFIG_ARCH_BOARD="imxrt1064-evk"
+CONFIG_ARCH_BOARD_IMXRT1064_EVK=y
+CONFIG_ARCH_CHIP="imxrt"
+CONFIG_ARCH_CHIP_IMXRT=y
+CONFIG_ARCH_CHIP_MIMXRT1064DVL6A=y
+CONFIG_ARCH_STACKDUMP=y
+CONFIG_ARMV7M_DCACHE=y
+CONFIG_ARMV7M_DCACHE_WRITETHROUGH=y
+CONFIG_ARMV7M_ICACHE=y
+CONFIG_ARMV7M_USEBASEPRI=y
+CONFIG_BOARD_LOOPSPERMSEC=104926
+CONFIG_BUILTIN=y
+CONFIG_ETH0_PHY_KSZ8081=y
+CONFIG_EXAMPLES_IPERF=y
+CONFIG_EXAMPLES_IPERFTEST_DEVNAME="eth0"
+CONFIG_FS_PROCFS=y
+CONFIG_IDLETHREAD_STACKSIZE=2048
+CONFIG_IMXRT_ENET=y
+CONFIG_IMXRT_LPUART1=y
+CONFIG_INTELHEX_BINARY=y
+CONFIG_IOB_NBUFFERS=128
+CONFIG_LIB_HOSTNAME="i.MXRT1060 EVK"
+CONFIG_LPUART1_SERIAL_CONSOLE=y
+CONFIG_MAX_TASKS=16
+CONFIG_NET=y
+CONFIG_NETDB_DNSCLIENT=y
+CONFIG_NETDEV_STATISTICS=y
+CONFIG_NETINIT_NOMAC=y
+CONFIG_NETUTILS_TELNETD=y
+CONFIG_NET_ARP_SEND=y
+CONFIG_NET_BROADCAST=y
+CONFIG_NET_ETH_PKTSIZE=1514
+CONFIG_NET_GUARDSIZE=4
+CONFIG_NET_ICMP=y
+CONFIG_NET_ICMP_SOCKET=y
+CONFIG_NET_ICMPv6=y
+CONFIG_NET_ICMPv6_NEIGHBOR=y
+CONFIG_NET_ICMPv6_SOCKET=y
+CONFIG_NET_IPv6=y
+CONFIG_NET_SOCKOPTS=y
+CONFIG_NET_STATISTICS=y
+CONFIG_NET_TCP=y
+CONFIG_NET_TCPBACKLOG=y
+CONFIG_NET_TCP_WRITE_BUFFERS=y
+CONFIG_NET_UDP=y
+CONFIG_NET_UDP_WRITE_BUFFERS=y
+CONFIG_NFILE_DESCRIPTORS=8
+CONFIG_NSH_ARCHINIT=y
+CONFIG_NSH_BUILTIN_APPS=y
+CONFIG_NSH_FILEIOSIZE=512
+CONFIG_NSH_LINELEN=64
+CONFIG_NSH_READLINE=y
+CONFIG_RAM_SIZE=1048576
+CONFIG_RAM_START=0x20200000
+CONFIG_READLINE_CMD_HISTORY=y
+CONFIG_RR_INTERVAL=200
+CONFIG_SCHED_LPWORK=y
+CONFIG_START_DAY=14
+CONFIG_START_MONTH=3
+CONFIG_SYSTEM_DHCPC_RENEW=y
+CONFIG_SYSTEM_NSH=y
+CONFIG_SYSTEM_PING6=y
+CONFIG_SYSTEM_PING=y
+CONFIG_USER_ENTRYPOINT="nsh_main"
diff --git a/boards/arm/imxrt/imxrt1064-evk/configs/nsh/defconfig b/boards/arm/imxrt/imxrt1064-evk/configs/nsh/defconfig
new file mode 100644
index 0000000..e748f20
--- /dev/null
+++ b/boards/arm/imxrt/imxrt1064-evk/configs/nsh/defconfig
@@ -0,0 +1,42 @@
+#
+# This file is autogenerated: PLEASE DO NOT EDIT IT.
+#
+# You can use "make menuconfig" to make any modifications to the installed .config file.
+# You can then do "make savedefconfig" to generate a new defconfig file that includes your
+# modifications.
+#
+CONFIG_ARCH="arm"
+CONFIG_ARCH_BOARD="imxrt1064-evk"
+CONFIG_ARCH_BOARD_IMXRT1064_EVK=y
+CONFIG_ARCH_CHIP="imxrt"
+CONFIG_ARCH_CHIP_IMXRT=y
+CONFIG_ARCH_CHIP_MIMXRT1064DVL6A=y
+CONFIG_ARCH_STACKDUMP=y
+CONFIG_ARMV7M_DCACHE=y
+CONFIG_ARMV7M_DCACHE_WRITETHROUGH=y
+CONFIG_ARMV7M_ICACHE=y
+CONFIG_ARMV7M_USEBASEPRI=y
+CONFIG_BOARD_LOOPSPERMSEC=104926
+CONFIG_BUILTIN=y
+CONFIG_FS_PROCFS=y
+CONFIG_IDLETHREAD_STACKSIZE=2048
+CONFIG_IMXRT_LPUART1=y
+CONFIG_INTELHEX_BINARY=y
+CONFIG_LPUART1_SERIAL_CONSOLE=y
+CONFIG_MAX_TASKS=16
+CONFIG_NFILE_DESCRIPTORS=8
+CONFIG_NSH_ARCHINIT=y
+CONFIG_NSH_BUILTIN_APPS=y
+CONFIG_NSH_DISABLE_IFUPDOWN=y
+CONFIG_NSH_FILEIOSIZE=512
+CONFIG_NSH_LINELEN=64
+CONFIG_NSH_READLINE=y
+CONFIG_RAM_SIZE=1048576
+CONFIG_RAM_START=0x20200000
+CONFIG_START_DAY=14
+CONFIG_START_MONTH=3
+CONFIG_SYSTEM_NSH=y
+CONFIG_USER_ENTRYPOINT="nsh_main"
+CONFIG_IMXRT_FLEXSPI1=y
+CONFIG_MTD=y
+CONFIG_MTD_FLEXSPI_NOR=y
diff --git a/boards/arm/imxrt/imxrt1064-evk/configs/nshocram/defconfig b/boards/arm/imxrt/imxrt1064-evk/configs/nshocram/defconfig
new file mode 100644
index 0000000..b5a5ca4
--- /dev/null
+++ b/boards/arm/imxrt/imxrt1064-evk/configs/nshocram/defconfig
@@ -0,0 +1,44 @@
+#
+# This file is autogenerated: PLEASE DO NOT EDIT IT.
+#
+# You can use "make menuconfig" to make any modifications to the installed .config file.
+# You can then do "make savedefconfig" to generate a new defconfig file that includes your
+# modifications.
+#
+CONFIG_ARCH="arm"
+CONFIG_ARCH_BOARD="imxrt1064-evk"
+CONFIG_ARCH_BOARD_IMXRT1064_EVK=y
+CONFIG_ARCH_CHIP="imxrt"
+CONFIG_ARCH_CHIP_IMXRT=y
+CONFIG_ARCH_CHIP_MIMXRT1064DVL6A=y
+CONFIG_ARCH_STACKDUMP=y
+CONFIG_ARMV7M_DCACHE=y
+CONFIG_ARMV7M_DCACHE_WRITETHROUGH=y
+CONFIG_ARMV7M_DTCM=y
+CONFIG_ARMV7M_ICACHE=y
+CONFIG_ARMV7M_USEBASEPRI=y
+CONFIG_BOARD_LOOPSPERMSEC=104926
+CONFIG_BOOT_RUNFROMISRAM=y
+CONFIG_BUILTIN=y
+CONFIG_FS_PROCFS=y
+CONFIG_IDLETHREAD_STACKSIZE=2048
+CONFIG_IMXRT_BOOTLOADER_HEAP=y
+CONFIG_IMXRT_DTCM_HEAP=y
+CONFIG_IMXRT_LPUART1=y
+CONFIG_INTELHEX_BINARY=y
+CONFIG_LPUART1_SERIAL_CONSOLE=y
+CONFIG_MAX_TASKS=16
+CONFIG_MM_REGIONS=3
+CONFIG_NFILE_DESCRIPTORS=8
+CONFIG_NSH_ARCHINIT=y
+CONFIG_NSH_BUILTIN_APPS=y
+CONFIG_NSH_DISABLE_IFUPDOWN=y
+CONFIG_NSH_FILEIOSIZE=512
+CONFIG_NSH_LINELEN=64
+CONFIG_NSH_READLINE=y
+CONFIG_RAM_SIZE=786432
+CONFIG_RAM_START=0x20200000
+CONFIG_START_DAY=14
+CONFIG_START_MONTH=3
+CONFIG_SYSTEM_NSH=y
+CONFIG_USER_ENTRYPOINT="nsh_main"
diff --git a/boards/arm/imxrt/imxrt1064-evk/include/board.h b/boards/arm/imxrt/imxrt1064-evk/include/board.h
new file mode 100644
index 0000000..d318b31
--- /dev/null
+++ b/boards/arm/imxrt/imxrt1064-evk/include/board.h
@@ -0,0 +1,372 @@
+/****************************************************************************
+ * boards/arm/imxrt/imxrt1064-evk/include/board.h
+ *
+ *   Copyright (C) 2018-2019 Gregory Nutt. All rights reserved.
+ *   Authors: Gregory Nutt <gn...@nuttx.org>
+ *            David Sidrane <da...@nscdg.com>
+ *            Dave Marples <da...@marples.net>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ *    used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+#ifndef __BOARDS_ARM_IMXRT_IMXRT1064_EVK_INCLUDE_BOARD_H
+#define __BOARDS_ARM_IMXRT_IMXRT1064_EVK_INCLUDE_BOARD_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+/* Do not include i.MXRT header files here. */
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+/* Clocking *****************************************************************/
+
+/* Set VDD_SOC to 1.25V */
+
+#define IMXRT_VDD_SOC (0x12)
+
+/* Set Arm PLL (PLL1) to  fOut    = (24Mhz * ARM_PLL_DIV_SELECT/2) /
+ *                                  ARM_PODF_DIVISOR
+ *                        600Mhz  = (24Mhz * ARM_PLL_DIV_SELECT/2) /
+ *                                  ARM_PODF_DIVISOR
+ *                        ARM_PLL_DIV_SELECT = 100
+ *                        ARM_PODF_DIVISOR   = 2
+ *                        600Mhz  = (24Mhz * 100/2) / 2
+ *
+ *     AHB_CLOCK_ROOT             = PLL1fOut / IMXRT_AHB_PODF_DIVIDER
+ *     1Hz to 600 MHz             = 600Mhz / IMXRT_ARM_CLOCK_DIVIDER
+ *                        IMXRT_ARM_CLOCK_DIVIDER = 1
+ *                        600Mhz  = 600Mhz / 1
+ *
+ *     PRE_PERIPH_CLK_SEL         = PRE_PERIPH_CLK_SEL_PLL1
+ *     PERIPH_CLK_SEL             = 1 (0 select PERIPH_CLK2_PODF,
+ *                                     1 select PRE_PERIPH_CLK_SEL_PLL1)
+ *     PERIPH_CLK                 = 600Mhz
+ *
+ *     IPG_CLOCK_ROOT             = AHB_CLOCK_ROOT / IMXRT_IPG_PODF_DIVIDER
+ *                       IMXRT_IPG_PODF_DIVIDER = 4
+ *                       150Mhz = 600Mhz / 4
+ *
+ *     PRECLK_CLOCK_ROOT          = IPG_CLOCK_ROOT /
+ *                                  IMXRT_PERCLK_PODF_DIVIDER
+ *                       IMXRT_PERCLK_PODF_DIVIDER = 9
+ *                       16.6Mhz  = 150Mhz / 9
+ *
+ *     SEMC_CLK_ROOT              = 600Mhz / IMXRT_SEMC_PODF_DIVIDER
+ *                                  (labeled AIX_PODF in 18.2)
+ *                       IMXRT_SEMC_PODF_DIVIDER = 8
+ *                       75Mhz    = 600Mhz / 8
+ *
+ * Set Sys PLL (PLL2) to  fOut    = (24Mhz * (20+(2*(DIV_SELECT)))
+ *                        528Mhz  = (24Mhz * (20+(2*(1)))
+ *
+ * Set USB1 PLL (PLL3) to fOut    = (24Mhz * 20)
+ *                         480Mhz = (24Mhz * 20)
+ *
+ * Set LPSPI PLL3 PFD0 to fOut    = (480Mhz / 12 * 18)
+ *                        720Mhz  = (480Mhz / 12 * 18)
+ *                         90Mhz  = (720Mhz / LSPI_PODF_DIVIDER)
+ *
+ * Set LPI2C PLL3 / 8 to   fOut   = (480Mhz / 8)
+ *                         60Mhz  = (480Mhz / 8)
+ *                         12Mhz  = (60Mhz / LSPI_PODF_DIVIDER)
+ *
+ * These clock frequencies can be verified via the CCM_CLKO1 pin and sending
+ * the appropriate clock to it with something like;
+ *
+ *   putreg32( <Clk number> | CCM_CCOSR_CLKO1_EN ,   IMXRT_CCM_CCOSR);
+ *   imxrt_config_gpio(GPIO_CCM_CLKO1);
+ */
+
+#define BOARD_XTAL_FREQUENCY       24000000
+#define IMXRT_PRE_PERIPH_CLK_SEL   CCM_CBCMR_PRE_PERIPH_CLK_SEL_PLL1
+#define IMXRT_PERIPH_CLK_SEL       CCM_CBCDR_PERIPH_CLK_SEL_PRE_PERIPH
+#define IMXRT_ARM_PLL_DIV_SELECT   100
+#define IMXRT_ARM_PODF_DIVIDER     2
+#define IMXRT_AHB_PODF_DIVIDER     1
+#define IMXRT_IPG_PODF_DIVIDER     4
+#define IMXRT_PERCLK_CLK_SEL       CCM_CSCMR1_PERCLK_CLK_SEL_IPG_CLK_ROOT
+#define IMXRT_PERCLK_PODF_DIVIDER  9
+#define IMXRT_SEMC_PODF_DIVIDER    8
+
+#define IMXRT_LPSPI_CLK_SELECT     CCM_CBCMR_LPSPI_CLK_SEL_PLL3_PFD0
+#define IMXRT_LSPI_PODF_DIVIDER    8
+
+#define IMXRT_LPI2C_CLK_SELECT     CCM_CSCDR2_LPI2C_CLK_SEL_PLL3_60M
+#define IMXRT_LSI2C_PODF_DIVIDER   5
+
+#define IMXRT_CAN_CLK_SELECT       CCM_CSCMR2_CAN_CLK_SEL_PLL3_SW_80
+#define IMXRT_CAN_PODF_DIVIDER     1
+
+#define IMXRT_SYS_PLL_SELECT       CCM_ANALOG_PLL_SYS_DIV_SELECT_22
+
+#define IMXRT_USB1_PLL_DIV_SELECT  CCM_ANALOG_PLL_USB1_DIV_SELECT_20
+
+#define BOARD_CPU_FREQUENCY \
+  (BOARD_XTAL_FREQUENCY * (IMXRT_ARM_PLL_DIV_SELECT / 2)) / IMXRT_ARM_PODF_DIVIDER
+
+/* Define this to enable tracing */
+
+#if 0
+#  define IMXRT_TRACE_PODF_DIVIDER 1
+#  define IMXRT_TRACE_CLK_SELECT   CCM_CBCMR_TRACE_CLK_SEL_PLL2_PFD0
+#endif
+
+/* LED definitions **********************************************************/
+
+/* There are four LED status indicators located on the EVK Board.
+ * The functions of these LEDs include:
+ *
+ *   - Main Power Supply(D3)
+ *     Green: DC 5V main supply is normal.
+ *     Red:   J2 input voltage is over 5.6V.
+ *     Off:   The board is not powered.
+ *   - Reset RED LED(D15)
+ *   - OpenSDA LED(D16)
+ *   - USER LED(D18)
+ *
+ * Only a single LED, D18, is under software control.
+ */
+
+/* LED index values for use with board_userled() */
+
+#define BOARD_USERLED     0
+#define BOARD_NLEDS       1
+
+/* LED bits for use with board_userled_all() */
+
+#define BOARD_USERLED_BIT (1 << BOARD_USERLED)
+
+/* This LED is not used by the board port unless CONFIG_ARCH_LEDS is
+ * defined.  In that case, the usage by the board port is defined in
+ * include/board.h and src/imxrt_autoleds.c. The LED is used to encode
+ * OS-related events as follows:
+ *
+ *   -------------------- ----------------------------- ------
+ *   SYMBOL                   Meaning                   LED
+ *   -------------------- ----------------------------- ------
+ */
+
+#define LED_STARTED       0  /* NuttX has been started  OFF    */
+#define LED_HEAPALLOCATE  0  /* Heap has been allocated OFF    */
+#define LED_IRQSENABLED   0  /* Interrupts enabled      OFF    */
+#define LED_STACKCREATED  1  /* Idle stack created      ON     */
+#define LED_INIRQ         2  /* In an interrupt         N/C    */
+#define LED_SIGNAL        2  /* In a signal handler     N/C    */
+#define LED_ASSERTION     2  /* An assertion failed     N/C    */
+#define LED_PANIC         3  /* The system has crashed  FLASH  */
+#undef  LED_IDLE             /* Not used                       */
+
+/* Thus if the LED is statically on, NuttX has successfully  booted and is,
+ * apparently, running normally.  If the LED is flashing at approximately
+ * 2Hz, then a fatal error has been detected and the system has halted.
+ */
+
+/* Button definitions *******************************************************/
+
+/* The IMXRT board has one external user button
+ *
+ * 1. SW8 (IRQ88)   GPIO5-00
+ */
+
+#define BUTTON_SW8        0
+#define NUM_BUTTONS       1
+
+#define BUTTON_SW8_BIT    (1 << BUTTON_SW8)
+
+/* SDIO *********************************************************************/
+
+/* Pin drive characteristics - drive strength in particular may need tuning
+ * for specific boards, but has been checked by scope on the EVKB to make
+ * sure shapes are square with minimal ringing.
+ */
+
+#define PIN_USDHC1_D0     (GPIO_USDHC1_DATA0_1 | IOMUX_USDHC1_DATAX_DEFAULT)
+#define PIN_USDHC1_D1     (GPIO_USDHC1_DATA1_1 | IOMUX_USDHC1_DATAX_DEFAULT)
+#define PIN_USDHC1_D2     (GPIO_USDHC1_DATA2_1 | IOMUX_USDHC1_DATAX_DEFAULT)
+#define PIN_USDHC1_D3     (GPIO_USDHC1_DATA3_1 | IOMUX_USDHC1_DATAX_DEFAULT)
+#define PIN_USDHC1_DCLK   (GPIO_USDHC1_CLK_1   | IOMUX_USDHC1_CLK_DEFAULT)
+#define PIN_USDHC1_CMD    (GPIO_USDHC1_CMD_1   | IOMUX_USDHC1_CMD_DEFAULT)
+#define PIN_USDHC1_CD     (GPIO_USDHC1_CD_2    | IOMUX_USDHC1_CLK_DEFAULT)
+
+/* 386 KHz for initial inquiry stuff */
+
+#define BOARD_USDHC_IDMODE_PRESCALER    USDHC_SYSCTL_SDCLKFS_DIV256
+#define BOARD_USDHC_IDMODE_DIVISOR      USDHC_SYSCTL_DVS_DIV(2)
+
+/* 24.8MHz for other modes */
+
+#define BOARD_USDHC_MMCMODE_PRESCALER   USDHC_SYSCTL_SDCLKFS_DIV8
+#define BOARD_USDHC_MMCMODE_DIVISOR     USDHC_SYSCTL_DVS_DIV(1)
+
+#define BOARD_USDHC_SD1MODE_PRESCALER   USDHC_SYSCTL_SDCLKFS_DIV8
+#define BOARD_USDHC_SD1MODE_DIVISOR     USDHC_SYSCTL_DVS_DIV(1)
+
+#define BOARD_USDHC_SD4MODE_PRESCALER   USDHC_SYSCTL_SDCLKFS_DIV8
+#define BOARD_USDHC_SD4MODE_DIVISOR     USDHC_SYSCTL_DVS_DIV(1)
+
+/* LCD **********************************************************************/
+
+#ifdef CONFIG_IMXRT_LCD
+/* LCD controller */
+
+#  define GPIO_LCD_DATA23    (GPIO_LCD_DATA23_1 | IOMUX_LCD_DEFAULT)
+#  define GPIO_LCD_DATA22    (GPIO_LCD_DATA22_1 | IOMUX_LCD_DEFAULT)
+#  define GPIO_LCD_DATA21    (GPIO_LCD_DATA21_1 | IOMUX_LCD_DEFAULT)
+#  define GPIO_LCD_DATA20    (GPIO_LCD_DATA20_1 | IOMUX_LCD_DEFAULT)
+#  define GPIO_LCD_DATA19    (GPIO_LCD_DATA19_1 | IOMUX_LCD_DEFAULT)
+#  define GPIO_LCD_DATA18    (GPIO_LCD_DATA18_1 | IOMUX_LCD_DEFAULT)
+#  define GPIO_LCD_DATA17    (GPIO_LCD_DATA17_1 | IOMUX_LCD_DEFAULT)
+#  define GPIO_LCD_DATA16    (GPIO_LCD_DATA16_1 | IOMUX_LCD_DEFAULT)
+#  define GPIO_LCD_DATA15    (GPIO_LCD_DATA15_1 | IOMUX_LCD_DEFAULT)
+#  define GPIO_LCD_DATA14    (GPIO_LCD_DATA14_1 | IOMUX_LCD_DEFAULT)
+#  define GPIO_LCD_DATA13    (GPIO_LCD_DATA13_1 | IOMUX_LCD_DEFAULT)
+#  define GPIO_LCD_DATA12    (GPIO_LCD_DATA12_1 | IOMUX_LCD_DEFAULT)
+#  define GPIO_LCD_DATA11    (GPIO_LCD_DATA11_1 | IOMUX_LCD_DEFAULT)
+#  define GPIO_LCD_DATA10    (GPIO_LCD_DATA10_1 | IOMUX_LCD_DEFAULT)
+#  define GPIO_LCD_DATA09    (GPIO_LCD_DATA09_1 | IOMUX_LCD_DEFAULT)
+#  define GPIO_LCD_DATA08    (GPIO_LCD_DATA08_1 | IOMUX_LCD_DEFAULT)
+#  define GPIO_LCD_DATA07    (GPIO_LCD_DATA07_1 | IOMUX_LCD_DEFAULT)
+#  define GPIO_LCD_DATA06    (GPIO_LCD_DATA06_1 | IOMUX_LCD_DEFAULT)
+#  define GPIO_LCD_DATA05    (GPIO_LCD_DATA05_1 | IOMUX_LCD_DEFAULT)
+#  define GPIO_LCD_DATA04    (GPIO_LCD_DATA04_1 | IOMUX_LCD_DEFAULT)
+#  define GPIO_LCD_DATA03    (GPIO_LCD_DATA03_1 | IOMUX_LCD_DEFAULT)
+#  define GPIO_LCD_DATA02    (GPIO_LCD_DATA02_1 | IOMUX_LCD_DEFAULT)
+#  define GPIO_LCD_DATA01    (GPIO_LCD_DATA01_1 | IOMUX_LCD_DEFAULT)
+#  define GPIO_LCD_DATA00    (GPIO_LCD_DATA00_1 | IOMUX_LCD_DEFAULT)
+#  define GPIO_LCD_ENABLE    (GPIO_LCD_ENABLE_1 | IOMUX_LCD_DEFAULT)
+#  define GPIO_LCD_HSYNC     (GPIO_LCD_HSYNC_1 | IOMUX_LCD_DEFAULT)
+#  define GPIO_LCD_VSYNC     (GPIO_LCD_VSYNC_1 | IOMUX_LCD_DEFAULT)
+#  define GPIO_LCD_CLK       (GPIO_LCD_CLK_1 | IOMUX_LCD_DEFAULT)
+#endif
+
+/* ETH Disambiguation *******************************************************/
+
+#define GPIO_ENET_TX_DATA00  (GPIO_ENET_TX_DATA00_1| \
+                              IOMUX_ENET_DATA_DEFAULT)                    /* GPIO_B1_07 */
+#define GPIO_ENET_TX_DATA01  (GPIO_ENET_TX_DATA01_1| \
+                              IOMUX_ENET_DATA_DEFAULT)                    /* GPIO_B1_08 */
+#define GPIO_ENET_RX_DATA00  (GPIO_ENET_RX_DATA00_1| \
+                              IOMUX_ENET_DATA_DEFAULT)                    /* GPIO_B1_04 */
+#define GPIO_ENET_RX_DATA01  (GPIO_ENET_RX_DATA01_1| \
+                              IOMUX_ENET_DATA_DEFAULT)                    /* GPIO_B1_05 */
+#define GPIO_ENET_MDIO       (GPIO_ENET_MDIO_3|IOMUX_ENET_MDIO_DEFAULT)   /* GPIO_EMC_41 */
+#define GPIO_ENET_MDC        (GPIO_ENET_MDC_3|IOMUX_ENET_MDC_DEFAULT)     /* GPIO_EMC_40 */
+#define GPIO_ENET_RX_EN      (GPIO_ENET_RX_EN_1|IOMUX_ENET_EN_DEFAULT)    /* GPIO_B1_06 */
+#define GPIO_ENET_RX_ER      (GPIO_ENET_RX_ER_1|IOMUX_ENET_RXERR_DEFAULT) /* GPIO_B1_11 */
+#define GPIO_ENET_TX_CLK     (GPIO_ENET_REF_CLK_2|\
+                              IOMUX_ENET_TX_CLK_DEFAULT)                  /* GPIO_B1_10 */
+#define GPIO_ENET_TX_EN      (GPIO_ENET_TX_EN_1|IOMUX_ENET_EN_DEFAULT)    /* GPIO_B1_09 */
+
+/* PIO Disambiguation *******************************************************/
+
+/* LPUARTs
+ *
+ * Virtual console port provided by OpenSDA on UART1 and
+ * Arduino RS-232 Shield on UART3.
+ *
+ */
+
+#define GPIO_LPUART1_RX      (GPIO_LPUART1_RX_1|IOMUX_UART_DEFAULT) /* GPIO_AD_B0_13 */
+#define GPIO_LPUART1_TX      (GPIO_LPUART1_TX_1|IOMUX_UART_DEFAULT) /* GPIO_AD_B0_12 */
+#define GPIO_LPUART3_RX      (GPIO_LPUART3_RX_1|IOMUX_UART_DEFAULT) /* GPIO_AD_B1_07 */
+#define GPIO_LPUART3_TX      (GPIO_LPUART3_TX_1|IOMUX_UART_DEFAULT) /* GPIO_AD_B1_06 */
+
+/* LPI2Cs
+ *
+ * Arduino Connector LPI2C1 and audio/gyro IO on LPI2C3.
+ */
+
+#define GPIO_LPI2C1_SDA      (GPIO_LPI2C1_SDA_2|IOMUX_LPI2C_DEFAULT) /* GPIO_AD_B1_01 */
+#define GPIO_LPI2C1_SCL      (GPIO_LPI2C1_SCL_2|IOMUX_LPI2C_DEFAULT) /* GPIO_AD_B1_00 */
+#define GPIO_LPI2C3_SDA      (GPIO_LPI2C3_SDA_2|IOMUX_LPI2C_DEFAULT) /* GPIO_AD_B1_01 */
+#define GPIO_LPI2C3_SCL      (GPIO_LPI2C3_SCL_2|IOMUX_LPI2C_DEFAULT) /* GPIO_AD_B1_00 */
+
+/* LPSPI
+ *
+ * Arduino Connector
+ *
+ *   J24 D09   GPIO_AD_B0_02  LPSPI3_SDI
+ *   J24 D14   GPIO_AD_B0_01  LPSPI3_SDO
+ *   J24 D15   GPIO_AD_B0_00  LPSPI3_SCK
+ */
+
+#define GPIO_LPSPI3_SCK      (GPIO_LPSPI3_SCK_2|IOMUX_LPSPI_DEFAULT) /* GPIO_AD_B0_00 */
+#define GPIO_LPSPI3_MISO     (GPIO_LPSPI3_SDI_2|IOMUX_LPSPI_DEFAULT) /* GPIO_AD_B0_02 */
+#define GPIO_LPSPI3_MOSI     (GPIO_LPSPI3_SDO_2|IOMUX_LPSPI_DEFAULT) /* GPIO_AD_B0_01 */
+
+/* FlexCAN */
+
+#define GPIO_FLEXCAN2_TX     (GPIO_FLEXCAN2_TX_3|IOMUX_CAN_DEFAULT)
+#define GPIO_FLEXCAN2_RX     (GPIO_FLEXCAN2_RX_3|IOMUX_CAN_DEFAULT)
+
+#define GPIO_FLEXCAN3_TX     (GPIO_FLEXCAN3_TX_2|IOMUX_CAN_DEFAULT)
+#define GPIO_FLEXCAN3_RX     (GPIO_FLEXCAN3_RX_2|IOMUX_CAN_DEFAULT)
+
+/* FLEXSPI */
+
+#define GPIO_FLEXSPI_DQS     (GPIO_FLEXSPIA_DQS_2|IOMUX_FLEXSPI_DEFAULT)
+#define GPIO_FLEXSPI_CS      (GPIO_FLEXSPIA_SS0_2|IOMUX_FLEXSPI_DEFAULT)
+#define GPIO_FLEXSPI_IO0     (GPIO_FLEXSPIA_DATA00_2|IOMUX_FLEXSPI_DEFAULT)
+#define GPIO_FLEXSPI_IO1     (GPIO_FLEXSPIA_DATA01_2|IOMUX_FLEXSPI_DEFAULT)
+#define GPIO_FLEXSPI_IO2     (GPIO_FLEXSPIA_DATA02_2|IOMUX_FLEXSPI_DEFAULT)
+#define GPIO_FLEXSPI_IO3     (GPIO_FLEXSPIA_DATA03_2|IOMUX_FLEXSPI_DEFAULT)
+#define GPIO_FLEXSPI_SCK     (GPIO_FLEXSPIA_SCLK_2|IOMUX_FLEXSPI_DEFAULT)
+
+/****************************************************************************
+ * Public Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+#ifndef __ASSEMBLY__
+
+#undef EXTERN
+#if defined(__cplusplus)
+#define EXTERN extern "C"
+extern "C"
+{
+#else
+#define EXTERN extern
+#endif
+
+#undef EXTERN
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* __ASSEMBLY__ */
+#endif /* __BOARDS_ARM_IMXRT_IMXRT1064_EVK_INCLUDE_BOARD_H */
diff --git a/boards/arm/imxrt/imxrt1064-evk/kernel/Makefile b/boards/arm/imxrt/imxrt1064-evk/kernel/Makefile
new file mode 100644
index 0000000..301e7d5
--- /dev/null
+++ b/boards/arm/imxrt/imxrt1064-evk/kernel/Makefile
@@ -0,0 +1,103 @@
+############################################################################
+# boards/arm/imxrt/imxrt1064-evk/kernel/Makefile
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.  The
+# ASF licenses this file to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance with the
+# License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+############################################################################
+
+include $(TOPDIR)/Make.defs
+
+# The entry point name (if none is provided in the .config file)
+
+CONFIG_USER_ENTRYPOINT ?= user_start
+ENTRYPT = $(patsubst "%",%,$(CONFIG_USER_ENTRYPOINT))
+
+# Get the paths to the libraries and the links script path in format that
+# is appropriate for the host OS
+
+ifeq ($(CONFIG_CYGWIN_WINTOOL),y)
+  # Windows-native toolchains
+  USER_LIBPATHS = ${shell for path in $(USERLIBS); do dir=`dirname $(TOPDIR)$(DELIM)$$path`;echo "-L\"`cygpath -w $$dir`\"";done}
+  USER_LDSCRIPT = -T "${shell cygpath -w $(BOARD_DIR)$(DELIM)scripts$(DELIM)memory.ld}"
+  USER_LDSCRIPT += -T "${shell cygpath -w $(BOARD_DIR)$(DELIM)scripts$(DELIM)user-space.ld}"
+  USER_HEXFILE += "${shell cygpath -w $(TOPDIR)$(DELIM)nuttx_user.hex}"
+  USER_SRECFILE += "${shell cygpath -w $(TOPDIR)$(DELIM)nuttx_user.srec}"
+  USER_BINFILE += "${shell cygpath -w $(TOPDIR)$(DELIM)nuttx_user.bin}"
+else
+  # Linux/Cygwin-native toolchain
+  USER_LIBPATHS = $(addprefix -L$(TOPDIR)$(DELIM),$(dir $(USERLIBS)))
+  USER_LDSCRIPT = -T$(BOARD_DIR)$(DELIM)scripts$(DELIM)memory.ld
+  USER_LDSCRIPT += -T$(BOARD_DIR)$(DELIM)scripts$(DELIM)user-space.ld
+  USER_HEXFILE += "$(TOPDIR)$(DELIM)nuttx_user.hex"
+  USER_SRECFILE += "$(TOPDIR)$(DELIM)nuttx_user.srec"
+  USER_BINFILE += "$(TOPDIR)$(DELIM)nuttx_user.bin"
+endif
+
+USER_LDFLAGS = --undefined=$(ENTRYPT) --entry=$(ENTRYPT) $(USER_LDSCRIPT)
+USER_LDLIBS = $(patsubst lib%,-l%,$(basename $(notdir $(USERLIBS))))
+USER_LIBGCC = "${shell "$(CC)" $(ARCHCPUFLAGS) -print-libgcc-file-name}"
+
+# Source files
+
+CSRCS = imxrt_userspace.c
+COBJS = $(CSRCS:.c=$(OBJEXT))
+OBJS  = $(COBJS)
+
+# Targets:
+
+all: $(TOPDIR)$(DELIM)nuttx_user.elf $(TOPDIR)$(DELIM)User.map
+.PHONY: nuttx_user.elf depend clean distclean
+
+$(COBJS): %$(OBJEXT): %.c
+	$(call COMPILE, $<, $@)
+
+# Create the nuttx_user.elf file containing all of the user-mode code
+
+nuttx_user.elf: $(OBJS)
+	$(Q) $(LD) -o $@ $(USER_LDFLAGS) $(USER_LIBPATHS) $(OBJS) --start-group $(USER_LDLIBS) --end-group $(USER_LIBGCC)
+
+$(TOPDIR)$(DELIM)nuttx_user.elf: nuttx_user.elf
+	@echo "LD: nuttx_user.elf"
+	$(Q) cp -a nuttx_user.elf $(TOPDIR)$(DELIM)nuttx_user.elf
+ifeq ($(CONFIG_INTELHEX_BINARY),y)
+	@echo "CP: nuttx_user.hex"
+	$(Q) $(OBJCOPY) $(OBJCOPYARGS) -O ihex nuttx_user.elf $(USER_HEXFILE)
+endif
+ifeq ($(CONFIG_MOTOROLA_SREC),y)
+	@echo "CP: nuttx_user.srec"
+	$(Q) $(OBJCOPY) $(OBJCOPYARGS) -O srec nuttx_user.elf $(USER_SRECFILE)
+endif
+ifeq ($(CONFIG_RAW_BINARY),y)
+	@echo "CP: nuttx_user.bin"
+	$(Q) $(OBJCOPY) $(OBJCOPYARGS) -O binary nuttx_user.elf $(USER_BINFILE)
+endif
+
+$(TOPDIR)$(DELIM)User.map: nuttx_user.elf
+	@echo "MK: User.map"
+	$(Q) $(NM) nuttx_user.elf >$(TOPDIR)$(DELIM)User.map
+	$(Q) $(CROSSDEV)size nuttx_user.elf
+
+.depend:
+
+depend: .depend
+
+clean:
+	$(call DELFILE, nuttx_user.elf)
+	$(call DELFILE, "$(TOPDIR)$(DELIM)nuttx_user.*")
+	$(call DELFILE, "$(TOPDIR)$(DELIM)User.map")
+	$(call CLEAN)
+
+distclean: clean
diff --git a/boards/arm/imxrt/imxrt1064-evk/kernel/imxrt_userspace.c b/boards/arm/imxrt/imxrt1064-evk/kernel/imxrt_userspace.c
new file mode 100644
index 0000000..7486a8e
--- /dev/null
+++ b/boards/arm/imxrt/imxrt1064-evk/kernel/imxrt_userspace.c
@@ -0,0 +1,131 @@
+/****************************************************************************
+ * boards/arm/imxrt/imxrt1064-evk/kernel/imxrt_userspace.c
+ *
+ *   Copyright (C) 2018 Gregory Nutt. All rights reserved.
+ *   Author: Gregory Nutt <gn...@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ *    used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdlib.h>
+
+#include <nuttx/userspace.h>
+#include <nuttx/wqueue.h>
+#include <nuttx/mm/mm.h>
+
+#if defined(CONFIG_BUILD_PROTECTED) && !defined(__KERNEL__)
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+/* Configuration ************************************************************/
+
+#ifndef CONFIG_NUTTX_USERSPACE
+#  error "CONFIG_NUTTX_USERSPACE not defined"
+#endif
+
+#if CONFIG_NUTTX_USERSPACE != 0x60200000
+#  error "CONFIG_NUTTX_USERSPACE must be 0x60200000 to match user-space.ld"
+#endif
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/* These 'addresses' of these values are setup by the linker script.
+ * They are not actual uint32_t storage locations!
+ * They are only used meaningfully in the following way:
+ *
+ *  - The linker script defines, for example, the symbol_sdata.
+ *  - The declareion extern uint32_t _sdata; makes C happy.  C will believe
+ *    that the value _sdata is the address of a uint32_t variable _data (it
+ *    is not!).
+ *  - We can recoved the linker value then by simply taking the address of
+ *    of _data.  like:  uint32_t *pdata = &_sdata;
+ */
+
+extern uint32_t _stext;           /* Start of .text */
+extern uint32_t _etext;           /* End_1 of .text + .rodata */
+extern const uint32_t _eronly;    /* End+1 of read only section (.text + .rodata) */
+extern uint32_t _sdata;           /* Start of .data */
+extern uint32_t _edata;           /* End+1 of .data */
+extern uint32_t _sbss;            /* Start of .bss */
+extern uint32_t _ebss;            /* End+1 of .bss */
+
+/* This is the user space entry point */
+
+int CONFIG_USER_ENTRYPOINT(int argc, char *argv[]);
+
+const struct userspace_s userspace __attribute__ ((section (".userspace"))) =
+{
+  /* General memory map */
+
+  .us_entrypoint    = (main_t)CONFIG_USER_ENTRYPOINT,
+  .us_textstart     = (uintptr_t)&_stext,
+  .us_textend       = (uintptr_t)&_etext,
+  .us_datasource    = (uintptr_t)&_eronly,
+  .us_datastart     = (uintptr_t)&_sdata,
+  .us_dataend       = (uintptr_t)&_edata,
+  .us_bssstart      = (uintptr_t)&_sbss,
+  .us_bssend        = (uintptr_t)&_ebss,
+
+  /* Memory manager heap structure */
+
+  .us_heap          = &g_mmheap,
+
+  /* Task/thread startup routines */
+
+  .task_startup     = nxtask_startup,
+#ifndef CONFIG_DISABLE_PTHREAD
+  .pthread_startup  = pthread_startup,
+#endif
+
+  /* Signal handler trampoline */
+
+  .signal_handler   = up_signal_handler,
+
+  /* User-space work queue support (declared in include/nuttx/wqueue.h) */
+
+#ifdef CONFIG_LIB_USRWORK
+  .work_usrstart    = work_usrstart,
+#endif
+};
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+#endif /* CONFIG_BUILD_PROTECTED && !__KERNEL__ */
diff --git a/boards/arm/imxrt/imxrt1064-evk/scripts/Make.defs b/boards/arm/imxrt/imxrt1064-evk/scripts/Make.defs
new file mode 100644
index 0000000..576e034
--- /dev/null
+++ b/boards/arm/imxrt/imxrt1064-evk/scripts/Make.defs
@@ -0,0 +1,83 @@
+############################################################################
+# boards/arm/imxrt/imxrt1064-evk/scripts/Make.defs
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.  The
+# ASF licenses this file to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance with the
+# License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+############################################################################
+
+include $(TOPDIR)/.config
+include $(TOPDIR)/tools/Config.mk
+include $(TOPDIR)/arch/arm/src/armv7-m/Toolchain.defs
+
+ifeq ($(CONFIG_BOOT_RUNFROMFLASH),y)
+  LDSCRIPT = flash.ld
+else ifeq ($(CONFIG_BOOT_RUNFROMISRAM),y)
+  LDSCRIPT = flash-ocram.ld
+endif
+
+ifeq ($(CONFIG_CYGWIN_WINTOOL),y)
+  ARCHSCRIPT = -T "${shell cygpath -w $(BOARD_DIR)$(DELIM)scripts$(DELIM)$(LDSCRIPT)}"
+else
+  ARCHSCRIPT = -T$(BOARD_DIR)$(DELIM)scripts$(DELIM)$(LDSCRIPT)
+endif
+
+ifeq ($(CONFIG_DEBUG_SYMBOLS),y)
+  ARCHOPTIMIZATION = -g
+endif
+
+ifneq ($(CONFIG_DEBUG_NOOPT),y)
+  ARCHOPTIMIZATION += $(MAXOPTIMIZATION)
+endif
+
+ARCHCFLAGS = -fno-builtin
+ARCHCXXFLAGS = -fno-builtin -fno-exceptions -fcheck-new -fno-rtti
+ARCHWARNINGS = -Wall -Wstrict-prototypes -Wshadow -Wundef -fno-strict-aliasing
+ARCHWARNINGSXX = -Wall -Wshadow -Wundef
+ARCHPICFLAGS = -fpic -msingle-pic-base -mpic-register=r10
+
+CFLAGS := $(ARCHCFLAGS) $(ARCHWARNINGS) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRAFLAGS) -pipe
+CPICFLAGS = $(ARCHPICFLAGS) $(CFLAGS)
+CXXFLAGS := $(ARCHCXXFLAGS) $(ARCHWARNINGSXX) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHXXINCLUDES) $(ARCHDEFINES) $(EXTRAFLAGS) -pipe
+CXXPICFLAGS = $(ARCHPICFLAGS) $(CXXFLAGS)
+CPPFLAGS := $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRAFLAGS)
+AFLAGS := $(CFLAGS) -D__ASSEMBLY__
+
+NXFLATLDFLAGS1 = -r -d -warn-common
+NXFLATLDFLAGS2 = $(NXFLATLDFLAGS1) -T$(TOPDIR)/binfmt/libnxflat/gnu-nxflat-pcrel.ld -no-check-sections
+LDNXFLATFLAGS = -e main -s 2048
+
+# Loadable module definitions
+
+CMODULEFLAGS = $(CFLAGS) -mlong-calls # --target1-abs
+
+LDMODULEFLAGS = -r -e module_initialize
+ifeq ($(CONFIG_CYGWIN_WINTOOL),y)
+  LDMODULEFLAGS += -T "${shell cygpath -w $(TOPDIR)/libs/libc/modlib/gnu-elf.ld}"
+else
+  LDMODULEFLAGS += -T $(TOPDIR)/libs/libc/modlib/gnu-elf.ld
+endif
+
+ifneq ($(CROSSDEV),arm-nuttx-elf-)
+  LDFLAGS += -nostartfiles -nodefaultlibs
+ifeq ($(CONFIG_CYGWIN_WINTOOL),y)
+  LDFLAGS += -Map="${shell cygpath -w $(TOPDIR)/nuttx.map}"
+else
+  LDFLAGS += -Map=$(TOPDIR)/nuttx.map
+endif
+endif
+ifeq ($(CONFIG_DEBUG_SYMBOLS),y)
+  LDFLAGS += -g
+endif
diff --git a/boards/arm/imxrt/imxrt1064-evk/scripts/flash-ocram.ld b/boards/arm/imxrt/imxrt1064-evk/scripts/flash-ocram.ld
new file mode 100644
index 0000000..81bb550
--- /dev/null
+++ b/boards/arm/imxrt/imxrt1064-evk/scripts/flash-ocram.ld
@@ -0,0 +1,202 @@
+/****************************************************************************
+ * boards/arm/imxrt/imxrt1064-evk/scripts/flash-ocram.ld
+ *
+ *   Copyright (C) 2018, 2020 Gregory Nutt. All rights reserved.
+ *   Authors: Ivan Ucherdzhiev <iv...@gmail.com>
+ *            David Sidrane <da...@nscdg.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ *    used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/* Specify the memory areas */
+
+/* The imxrt1064-evk has 8MiB of QSPI FLASH beginning at address,
+ * 0x0060:0000, Upto 512Kb of DTCM RAM beginning at 0x2000:0000, and 1MiB OCRAM
+ * beginning at 0x2020:0000.  Neither DTCM or SDRAM are used in this
+ * configuration.
+ *
+ * The default flexram setting on the iMXRT 1064 is
+ * 256Kib to OCRRAM, 128Kib ITCM and 128Kib DTCM.
+ * This can be changed by using a dcd by minipulating
+ * IOMUX GPR16 and GPR17.
+ * The configuartion we will use is 384Kib to OCRRAM, 0Kib ITCM and
+ * 128Kib DTCM.
+ *
+ * This is the OCRAM inker script.
+ * The NXP ROM bootloader will move the FLASH image to OCRAM.
+ * We must reserve 32K for the bootloader' OCRAM usage from  the OCRAM Size
+ * and an additinal 8K for the ivt_s which is IVT_SIZE(8K) This 40K can be
+ * reused once the application is running.
+ *
+ *      0x2020:A000 to 0x202d:ffff - The application Image's vector table
+ *      0x2020:8000 to 0x2020:A000 - IVT
+ *      0x2020:0000 to 0x2020:7fff - NXP ROM bootloader.
+ *
+ * We artificially split the FLASH to allow locating sections that we do not
+ * want loaded inoto OCRAM. This is to save on OCRAM where the speen of the
+ * code does not matter.
+ *
+ */
+
+MEMORY
+{
+  flash    (rx)  : ORIGIN = 0x70000000, LENGTH = 3M
+  flashxip (rx)  : ORIGIN = 0x70300000, LENGTH = 1M
+  /*                     Vectors @ boot+ivt   OCRAM2   Flex RAM     Boot  IVT */
+  sram     (rwx) : ORIGIN = 0x2020A000, LENGTH = 512K + 256K + 128K - (32K + 8K)
+  itcm     (rwx) : ORIGIN = 0x00000000, LENGTH = 0K
+  dtcm     (rwx) : ORIGIN = 0x20000000, LENGTH = 128K
+}
+
+OUTPUT_ARCH(arm)
+EXTERN(_vectors)
+EXTERN(g_flash_config)
+EXTERN(g_image_vector_table)
+EXTERN(g_boot_data)
+EXTERN(g_dcd_data)
+
+ENTRY(_stext)
+
+SECTIONS
+{
+    /* Image Vector Table and Boot Data for booting from external flash */
+
+    .boot_hdr : ALIGN(4)
+    {
+        FILL(0xff)
+        __boot_hdr_start__ = ABSOLUTE(.) ;
+        KEEP(*(.boot_hdr.conf))
+        . = 0x1000 ;
+        KEEP(*(.boot_hdr.ivt))
+        . = 0x1020 ;
+        KEEP(*(.boot_hdr.boot_data))
+        . = 0x1030 ;
+        KEEP(*(.boot_hdr.dcd_data))
+        __boot_hdr_end__ = ABSOLUTE(.) ;
+        . = 0x2000 ;
+    } > flash
+
+	/* Catch all the section we want not in OCRAM so that the *(.text .text.*) in flash does not */
+
+    .flashxip : ALIGN(4)
+	{
+		FILL(0xff)
+
+		/* Order matters */
+
+		imxrt_start.o(.text)
+		imxrt_boot.o(.text)
+
+		*(.slow_memory)
+		*(.rodata .rodata.*)
+		KEEP(*(__param*))
+		*(.fixup)
+		*(.gnu.warning)
+		*(.gnu.linkonce.t.*)
+		*(.glue_7)
+		*(.glue_7t)
+		*(.got)
+		*(.gcc_except_table)
+		*(.gnu.linkonce.r.*)
+
+    } > flashxip
+
+    .text :
+    {
+        _stext = ABSOLUTE(.);
+        *(.vectors)
+        *(.text .text.*)
+        _etext = ABSOLUTE(.);
+    } > sram AT > flash
+
+    .init_section :
+    {
+        _sinit = ABSOLUTE(.);
+        *(.init_array .init_array.*)
+        _einit = ABSOLUTE(.);
+    } > flash
+
+    .ARM.extab :
+    {
+        *(.ARM.extab*)
+    } > flash
+
+    .ARM.exidx :
+    {
+        __exidx_start = ABSOLUTE(.);
+        *(.ARM.exidx*)
+        __exidx_end = ABSOLUTE(.);
+    } > flash
+
+    _eronly = ABSOLUTE(.);
+
+    .data :
+    {
+        _sdata = ABSOLUTE(.);
+        *(.data .data.*)
+        *(.gnu.linkonce.d.*)
+        CONSTRUCTORS
+        . = ALIGN(4);
+        _edata = ABSOLUTE(.);
+    } > sram AT > flash
+
+    .ramfunc ALIGN(4):
+    {
+        _sramfuncs = ABSOLUTE(.);
+        *(.ramfunc  .ramfunc.*)
+        _eramfuncs = ABSOLUTE(.);
+    } > sram AT > flash
+
+    _framfuncs = LOADADDR(.ramfunc);
+
+    .bss :
+    {
+        _sbss = ABSOLUTE(.);
+        *(.bss .bss.*)
+        *(.gnu.linkonce.b.*)
+        *(COMMON)
+        . = ALIGN(4);
+        _ebss = ABSOLUTE(.);
+    } > sram
+
+    /* Stabs debugging sections. */
+
+    .stab 0 : { *(.stab) }
+    .stabstr 0 : { *(.stabstr) }
+    .stab.excl 0 : { *(.stab.excl) }
+    .stab.exclstr 0 : { *(.stab.exclstr) }
+    .stab.index 0 : { *(.stab.index) }
+    .stab.indexstr 0 : { *(.stab.indexstr) }
+    .comment 0 : { *(.comment) }
+    .debug_abbrev 0 : { *(.debug_abbrev) }
+    .debug_info 0 : { *(.debug_info) }
+    .debug_line 0 : { *(.debug_line) }
+    .debug_pubnames 0 : { *(.debug_pubnames) }
+    .debug_aranges 0 : { *(.debug_aranges) }
+}
diff --git a/boards/arm/imxrt/imxrt1064-evk/scripts/flash.ld b/boards/arm/imxrt/imxrt1064-evk/scripts/flash.ld
new file mode 100644
index 0000000..d233d15
--- /dev/null
+++ b/boards/arm/imxrt/imxrt1064-evk/scripts/flash.ld
@@ -0,0 +1,139 @@
+/****************************************************************************
+ * boards/arm/imxrt/imxrt1064-evk/scripts/flash.ld
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.  The
+ * ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the
+ * License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ ****************************************************************************/
+
+/* Specify the memory areas */
+
+MEMORY
+{
+  flash (rx)  : ORIGIN = 0x70000000, LENGTH = 4M
+  sram  (rwx) : ORIGIN = 0x20200000, LENGTH = 512M
+  itcm  (rwx) : ORIGIN = 0x00000000, LENGTH = 128K
+  dtcm  (rwx) : ORIGIN = 0x20000000, LENGTH = 128K
+}
+
+OUTPUT_ARCH(arm)
+EXTERN(_vectors)
+EXTERN(g_flash_config)
+EXTERN(g_image_vector_table)
+EXTERN(g_boot_data)
+
+ENTRY(_stext)
+
+SECTIONS
+{
+    /* Image Vector Table and Boot Data for booting from external flash */
+
+    .boot_hdr : ALIGN(4)
+    {
+        FILL(0xff)
+        __boot_hdr_start__ = ABSOLUTE(.) ;
+        KEEP(*(.boot_hdr.conf))
+        . = 0x1000 ;
+        KEEP(*(.boot_hdr.ivt))
+        . = 0x1020 ;
+        KEEP(*(.boot_hdr.boot_data))
+        . = 0x1030 ;
+        KEEP(*(.boot_hdr.dcd_data))
+        __boot_hdr_end__ = ABSOLUTE(.) ;
+        . = 0x2000 ;
+    } >flash
+
+    .text :
+    {
+        _stext = ABSOLUTE(.);
+        *(.vectors)
+        *(.text .text.*)
+        *(.fixup)
+        *(.gnu.warning)
+        *(.rodata .rodata.*)
+        *(.gnu.linkonce.t.*)
+        *(.glue_7)
+        *(.glue_7t)
+        *(.got)
+        *(.gcc_except_table)
+        *(.gnu.linkonce.r.*)
+        _etext = ABSOLUTE(.);
+    } > flash
+
+    .init_section :
+    {
+        _sinit = ABSOLUTE(.);
+        *(.init_array .init_array.*)
+        _einit = ABSOLUTE(.);
+    } > flash
+
+    .ARM.extab :
+    {
+        *(.ARM.extab*)
+    } > flash
+
+    .ARM.exidx :
+    {
+        __exidx_start = ABSOLUTE(.);
+        *(.ARM.exidx*)
+        __exidx_end = ABSOLUTE(.);
+    } > flash
+
+    _eronly = ABSOLUTE(.);
+
+    .data :
+    {
+        _sdata = ABSOLUTE(.);
+        *(.data .data.*)
+        *(.gnu.linkonce.d.*)
+        CONSTRUCTORS
+        . = ALIGN(4);
+        _edata = ABSOLUTE(.);
+    } > sram AT > flash
+
+    .ramfunc ALIGN(4):
+    {
+        _sramfuncs = ABSOLUTE(.);
+        *(.ramfunc  .ramfunc.*)
+        _eramfuncs = ABSOLUTE(.);
+    } > sram AT > flash
+
+    _framfuncs = LOADADDR(.ramfunc);
+
+    .bss :
+    {
+        _sbss = ABSOLUTE(.);
+        *(.bss .bss.*)
+        *(.gnu.linkonce.b.*)
+        *(COMMON)
+        . = ALIGN(4);
+        _ebss = ABSOLUTE(.);
+    } > sram
+
+    /* Stabs debugging sections. */
+
+    .stab 0 : { *(.stab) }
+    .stabstr 0 : { *(.stabstr) }
+    .stab.excl 0 : { *(.stab.excl) }
+    .stab.exclstr 0 : { *(.stab.exclstr) }
+    .stab.index 0 : { *(.stab.index) }
+    .stab.indexstr 0 : { *(.stab.indexstr) }
+    .comment 0 : { *(.comment) }
+    .debug_abbrev 0 : { *(.debug_abbrev) }
+    .debug_info 0 : { *(.debug_info) }
+    .debug_line 0 : { *(.debug_line) }
+    .debug_pubnames 0 : { *(.debug_pubnames) }
+    .debug_aranges 0 : { *(.debug_aranges) }
+}
diff --git a/boards/arm/imxrt/imxrt1064-evk/scripts/kernel-space.ld b/boards/arm/imxrt/imxrt1064-evk/scripts/kernel-space.ld
new file mode 100644
index 0000000..d6f04d2
--- /dev/null
+++ b/boards/arm/imxrt/imxrt1064-evk/scripts/kernel-space.ld
@@ -0,0 +1,120 @@
+/****************************************************************************
+ * boards/arm/imxrt/imxrt1064-evk/scripts/kernel-space.ld
+ *
+ *   Copyright (C) 2018 Gregory Nutt. All rights reserved.
+ *   Authors: Gregory Nutt <gn...@nuttx.org>
+ *            David Sidrane <da...@nscdg.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ *    used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/* NOTE:  This depends on the memory.ld script having been included prior to
+ * this script.
+ */
+
+OUTPUT_ARCH(arm)
+EXTERN(_vectors)
+ENTRY(_stext)
+
+SECTIONS
+{
+  .text :
+  {
+    _stext = ABSOLUTE(.);
+    *(.vectors)
+    *(.text .text.*)
+    *(.fixup)
+    *(.gnu.warning)
+    *(.rodata .rodata.*)
+    *(.gnu.linkonce.t.*)
+    *(.glue_7)
+    *(.glue_7t)
+    *(.got)
+    *(.gcc_except_table)
+    *(.gnu.linkonce.r.*)
+    _etext = ABSOLUTE(.);
+  } > kflash
+
+  .init_section :
+  {
+    _sinit = ABSOLUTE(.);
+    KEEP(*(.init_array .init_array.*))
+    _einit = ABSOLUTE(.);
+  } > kflash
+
+  .ARM.extab :
+  {
+    *(.ARM.extab*)
+  } > kflash
+
+  __exidx_start = ABSOLUTE(.);
+  .ARM.exidx :
+  {
+    *(.ARM.exidx*)
+  } > kflash
+
+  __exidx_end = ABSOLUTE(.);
+
+  _eronly = ABSOLUTE(.);
+
+  .data :
+  {
+    _sdata = ABSOLUTE(.);
+    *(.data .data.*)
+    *(.gnu.linkonce.d.*)
+    CONSTRUCTORS
+    . = ALIGN(4);
+    _edata = ABSOLUTE(.);
+  } > kocram AT > kflash
+
+  .bss :
+  {
+    _sbss = ABSOLUTE(.);
+    *(.bss .bss.*)
+    *(.gnu.linkonce.b.*)
+    *(COMMON)
+    . = ALIGN(4);
+    _ebss = ABSOLUTE(.);
+  } > kocram
+
+  /* Stabs debugging sections */
+
+  .stab 0 : { *(.stab) }
+  .stabstr 0 : { *(.stabstr) }
+  .stab.excl 0 : { *(.stab.excl) }
+  .stab.exclstr 0 : { *(.stab.exclstr) }
+  .stab.index 0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment 0 : { *(.comment) }
+  .debug_abbrev 0 : { *(.debug_abbrev) }
+  .debug_info 0 : { *(.debug_info) }
+  .debug_line 0 : { *(.debug_line) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  .debug_aranges 0 : { *(.debug_aranges) }
+}
diff --git a/boards/arm/imxrt/imxrt1064-evk/scripts/memory.ld b/boards/arm/imxrt/imxrt1064-evk/scripts/memory.ld
new file mode 100644
index 0000000..bf053f1
--- /dev/null
+++ b/boards/arm/imxrt/imxrt1064-evk/scripts/memory.ld
@@ -0,0 +1,83 @@
+/****************************************************************************
+ * boards/arm/imxrt/imxrt1064-evk/scripts/memory.ld
+ *
+ *   Copyright (C) 2018 Gregory Nutt. All rights reserved.
+ *   Authors: Gregory Nutt <gn...@nuttx.org>
+ *            David Sidrane <da...@nscdg.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ *    used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/* The i.MXRT1064-EVK has 8MiB of Hyper FLASH beginning at address,
+ * 0x0060:0000, Up to 512Kb of DTCM RAM beginning at 0x2000:0000, and 1MiB OCRAM
+ * beginning at 0x2020:0000.  Neither DTCM or SDRAM are used in this
+ * configuration.
+ *
+ * The user and kernel space partitions will be spanned with a single
+ * region of size 2**n bytes.  As a consequence, as the partitions increase
+ * in size, the alignment requirement also increases.  The sizes below give
+ * the largest possible user address spaces (but leave far too much for the
+ * OS).
+ *
+ * The solution to this wasted memory is to (1) use more than one region to
+ * span the user spaces, or (2) poke holes in a larger region (via sub-
+ * regions) to trim it to fit better.
+ *
+ * A detailed memory map for the 512KB SRAM region is as follows:
+ *
+ *   0x2020 0000:  Kernel .data region.  Typical size: 0.1KB
+ *   ------ ----   Kernel .bss  region.  Typical size: 1.8KB
+ *   0x2020 0800:  Kernel IDLE thread stack (approximate).  Size is
+ *                 determined by CONFIG_IDLETHREAD_STACKSIZE and
+ *                 adjustments for alignment.  Typical is 1KB.
+ *   ------ ----   Padded to 4KB
+ *   0x2040 0000:  User .data region.  Size is variable.
+ *   ------- ----  User .bss region  Size is variable.
+ *   0x2042 0000:  Beginning of kernel heap.  Size determined by
+ *                 CONFIG_MM_KERNEL_HEAPSIZE.
+ *   ------ ----   Beginning of user heap.  Can vary with other settings.
+ *   0x2080 0000:  End+1 of mappable OCRAM
+ */
+
+/* Specify the memory areas */
+
+MEMORY
+{
+  /* 8MiB of HyperFLASH */
+
+  kflash (rx)  : ORIGIN = 0x60000000, LENGTH = 1M
+  uflash (rx)  : ORIGIN = 0x60200000, LENGTH = 1M
+  flash  (rx)  : ORIGIN = 0x60400000, LENGTH = 6M
+
+  /* 1MiB of OCRAM */
+
+  dtcm   (rwx) : ORIGIN = 0x20000000, LENGTH = 512K
+  kocram (rwx) : ORIGIN = 0x20200000, LENGTH = 512K
+  uocram (rwx) : ORIGIN = 0x20240000, LENGTH = 512K
+}
diff --git a/boards/arm/imxrt/imxrt1064-evk/scripts/user-space.ld b/boards/arm/imxrt/imxrt1064-evk/scripts/user-space.ld
new file mode 100644
index 0000000..c4d8428
--- /dev/null
+++ b/boards/arm/imxrt/imxrt1064-evk/scripts/user-space.ld
@@ -0,0 +1,136 @@
+/****************************************************************************
+ * boards/arm/imxrt/imxrt1064-evk/scripts/user-space.ld
+ *
+ *   Copyright (C) 2018 Gregory Nutt. All rights reserved.
+ *   Authors: Gregory Nutt <gn...@nuttx.org>
+ *            David Sidrane <da...@nscdg.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ *    used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/* NOTE:  This depends on the memory.ld script having been included prior to
+ * this script.
+ */
+
+/* Make sure that the critical memory management functions are in user-space.
+ * the user heap memory manager will reside in user-space but be usable both
+ * by kernel- and user-space code
+ */
+
+EXTERN(umm_initialize)
+EXTERN(umm_addregion)
+EXTERN(umm_trysemaphore)
+EXTERN(umm_givesemaphore)
+
+EXTERN(malloc)
+EXTERN(realloc)
+EXTERN(zalloc)
+EXTERN(free)
+
+OUTPUT_ARCH(arm)
+SECTIONS
+{
+  .userspace :
+  {
+    *(.userspace)
+  } > uflash
+
+  .text :
+  {
+    _stext = ABSOLUTE(.);
+    *(.text .text.*)
+    *(.fixup)
+    *(.gnu.warning)
+    *(.rodata .rodata.*)
+    *(.gnu.linkonce.t.*)
+    *(.glue_7)
+    *(.glue_7t)
+    *(.got)
+    *(.gcc_except_table)
+    *(.gnu.linkonce.r.*)
+    _etext = ABSOLUTE(.);
+  } > uflash
+
+  .init_section :
+  {
+    _sinit = ABSOLUTE(.);
+    KEEP(*(.init_array .init_array.*))
+    _einit = ABSOLUTE(.);
+  } > uflash
+
+  .ARM.extab :
+  {
+    *(.ARM.extab*)
+  } > uflash
+
+  __exidx_start = ABSOLUTE(.);
+  .ARM.exidx :
+  {
+    *(.ARM.exidx*)
+  } > uflash
+
+  __exidx_end = ABSOLUTE(.);
+
+  _eronly = ABSOLUTE(.);
+
+  .data :
+  {
+    _sdata = ABSOLUTE(.);
+    *(.data .data.*)
+    *(.gnu.linkonce.d.*)
+    CONSTRUCTORS
+    . = ALIGN(4);
+    _edata = ABSOLUTE(.);
+  } > uocram AT > uflash
+
+  .bss :
+  {
+    _sbss = ABSOLUTE(.);
+    *(.bss .bss.*)
+    *(.gnu.linkonce.b.*)
+    *(COMMON)
+    . = ALIGN(4);
+    _ebss = ABSOLUTE(.);
+  } > uocram
+
+  /* Stabs debugging sections */
+
+  .stab 0 : { *(.stab) }
+  .stabstr 0 : { *(.stabstr) }
+  .stab.excl 0 : { *(.stab.excl) }
+  .stab.exclstr 0 : { *(.stab.exclstr) }
+  .stab.index 0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment 0 : { *(.comment) }
+  .debug_abbrev 0 : { *(.debug_abbrev) }
+  .debug_info 0 : { *(.debug_info) }
+  .debug_line 0 : { *(.debug_line) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  .debug_aranges 0 : { *(.debug_aranges) }
+}
diff --git a/boards/arm/imxrt/imxrt1064-evk/src/Makefile b/boards/arm/imxrt/imxrt1064-evk/src/Makefile
new file mode 100644
index 0000000..87d012d
--- /dev/null
+++ b/boards/arm/imxrt/imxrt1064-evk/src/Makefile
@@ -0,0 +1,85 @@
+############################################################################
+# boards/arm/imxrt/imxrt1064-evk/src/Makefile
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.  The
+# ASF licenses this file to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance with the
+# License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+############################################################################
+
+include $(TOPDIR)/Make.defs
+
+CSRCS = imxrt_boot.c imxrt_flexspi_nor_boot.c imxrt_flexspi_nor_flash.c
+
+ifeq ($(CONFIG_IMXRT_SDRAMC),y)
+CSRCS += imxrt_sdram.c
+endif
+
+ifeq ($(CONFIG_LIB_BOARDCTL),y)
+CSRCS += imxrt_appinit.c imxrt_bringup.c
+else ifeq ($(CONFIG_BOARD_LATE_INITIALIZE),y)
+CSRCS += imxrt_bringup.c
+endif
+
+ifeq ($(CONFIG_ARCH_LEDS),y)
+CSRCS += imxrt_autoleds.c
+else
+CSRCS += imxrt_userleds.c
+endif
+
+ifeq ($(CONFIG_ARCH_BUTTONS),y)
+CSRCS += imxrt_buttons.c
+endif
+
+ifeq ($(CONFIG_IMXRT_ENET),y)
+CSRCS += imxrt_ethernet.c
+endif
+
+ifeq ($(CONFIG_IMXRT_LPSPI),y)
+CSRCS += imxrt_spi.c
+endif
+
+ifeq ($(CONFIG_MMCSD_SPI),y)
+CSRCS += imxrt_mmcsd_spi.c
+endif
+
+ifeq ($(CONFIG_DEV_GPIO),y)
+CSRCS += imxrt_gpio.c
+endif
+
+ifeq ($(CONFIG_IMXRT_ADC),y)
+CSRCS += imxrt_adc.c
+endif
+
+ifeq ($(CONFIG_INPUT_FT5X06),y)
+CSRCS += imxrt_ft5x06.c
+endif
+
+ifeq ($(CONFIG_IMXRT_LCD),y)
+CSRCS += imxrt_lcd.c
+endif
+
+ifeq ($(CONFIG_IMXRT_USBOTG),y)
+CSRCS += imxrt_usbhost.c
+endif
+
+ifeq ($(CONFIG_IMXRT_FLEXCAN),y)
+CSRCS += imxrt_flexcan.c
+endif
+
+ifeq ($(CONFIG_IMXRT1064_EVK_SDRAM),y)
+CSRCS += imxrt_sdram_ini_dcd.c
+endif
+
+include $(TOPDIR)/boards/Board.mk
diff --git a/boards/arm/imxrt/imxrt1064-evk/src/imxrt1064-evk.h b/boards/arm/imxrt/imxrt1064-evk/src/imxrt1064-evk.h
new file mode 100644
index 0000000..a2dd519
--- /dev/null
+++ b/boards/arm/imxrt/imxrt1064-evk/src/imxrt1064-evk.h
@@ -0,0 +1,337 @@
+/****************************************************************************
+ * boards/arm/imxrt/imxrt1064-evk/src/imxrt1064-evk.h
+ *
+ *   Copyright (C) 2018 Gregory Nutt. All rights reserved.
+ *   Authors: Gregory Nutt <gn...@nuttx.org>
+ *            David Sidrane <da...@nscdg.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ *    used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+#ifndef __BOARDS_ARM_IMXRT_IMXRT1064_EVK_SRC_IMXRT1064_EVK_H
+#define __BOARDS_ARM_IMXRT_IMXRT1064_EVK_SRC_IMXRT1064_EVK_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdint.h>
+#include <stdbool.h>
+
+#include <arch/irq.h>
+#include <nuttx/irq.h>
+
+#include "imxrt_gpio.h"
+#include "imxrt_iomuxc.h"
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+/* Touchscreen definitions **************************************************/
+
+/* The IMXRT 1050/1060 have connectors for the LCD model RK043FN02H-CT.
+ * It comes with the FT5336GQQ (FT5X06) touchscreen chip integrated.
+ * FT5X06 is connected to the LPI2C1 bus.
+ */
+
+/* LPI2C address of the FT5336GQQ touchscreen chip */
+
+#define FT5X06_I2C_ADDRESS  0x38
+
+/* i.MX RT 1060 GPIO Pin Definitions ****************************************/
+
+/* LEDs */
+
+/* There are four LED status indicators located on the EVK Board.
+ * The functions of these LEDs include:
+ *
+ *   - Main Power Supply(D3)
+ *     Green: DC 5V main supply is normal.
+ *     Red:   J2 input voltage is over 5.6V.
+ *     Off:   The board is not powered.
+ *   - Reset RED LED(D15)
+ *   - OpenSDA LED(D16)
+ *   - USER LED(D18)
+ *
+ * Only a single LED, D18, is under software control.
+ */
+
+#define GPIO_LED        (GPIO_OUTPUT | IOMUX_LED_DEFAULT | \
+                         GPIO_OUTPUT_ZERO | GPIO_PORT1 | GPIO_PIN9)  /* AD_BO_09 */
+
+#define LED_DRIVER_PATH "/dev/userleds"
+
+/* Buttons ******************************************************************/
+
+/* The IMXRT board has one external user button
+ *
+ * 1. SW8 (IRQ88)   GPIO5-00
+ */
+
+#define GPIO_SW8       (GPIO_INTERRUPT | GPIO_INTBOTH_EDGES | \
+                        IOMUX_SW_DEFAULT | \
+                        GPIO_PORT5 | GPIO_PIN0)    /* WAKEUP */
+
+#define GPIO_SW8_INT   (_IMXRT_GPIO5_0_15_BASE+0)
+
+/* LCD Backlight */
+
+#define GPIO_LCD_BL     (GPIO_OUTPUT | GPIO_OUTPUT_ZERO | GPIO_PORT2 | \
+                         GPIO_PIN31 | IOMUX_LCD_BL_DEFAULT)
+
+/* Ethernet */
+
+/* Ethernet Interrupt: GPIOAD_B0_10
+ *
+ * This pin has a week pull-up within the PHY, is open-drain, and requires
+ * an external 1k ohm pull-up resistor (present on the EVK).  A falling
+ * edge then indicates a change in state of the PHY.
+ */
+
+#define GPIO_ENET_INT   (IOMUX_ENET_INT_DEFAULT | \
+                         GPIO_PORT1 | GPIO_PIN10)    /* AD_B0_10 */
+#define GPIO_ENET_IRQ   IMXRT_IRQ_GPIO1_10
+
+/* Ethernet Reset:  GPIOAD_B0_09
+ *
+ * The #RST uses inverted logic.  The initial value of zero will put the
+ * PHY into the reset state.
+ */
+
+#define GPIO_ENET_RST   (GPIO_OUTPUT | GPIO_OUTPUT_ZERO | \
+                         GPIO_PORT1 | GPIO_PIN9 | IOMUX_ENET_RST_DEFAULT) /* AD_B0_09 */
+
+#ifdef CONFIG_ETH0_PHY_KSZ8081
+#  ifdef GPIO_LED
+#    warning LED interferes with ETH reset unless R323 is removed.
+#  endif
+#endif
+
+/* LPSPI1 CS:  GPIO_SD_B0_01 */
+
+#define IOMUX_LPSPI1_CS (IOMUX_SLEW_FAST | IOMUX_DRIVE_50OHM | \
+                         IOMUX_SPEED_MEDIUM | IOMUX_PULL_UP_100K | \
+                         _IOMUX_PULL_ENABLE)
+#define GPIO_LPSPI1_CS  (GPIO_OUTPUT | GPIO_OUTPUT_ONE | \
+                         GPIO_PORT3 | GPIO_PIN13 | IOMUX_LPSPI1_CS)
+
+/* LPSPI3 CS:  GPIO_AD_B0_03 */
+
+#define IOMUX_LPSPI3_CS      (IOMUX_SLEW_FAST | IOMUX_DRIVE_50OHM | \
+                              IOMUX_SPEED_MEDIUM | IOMUX_PULL_UP_100K | \
+                              _IOMUX_PULL_ENABLE)
+#define GPIO_LPSPI3_CS       (GPIO_OUTPUT | GPIO_OUTPUT_ONE | \
+                              GPIO_PORT1 | GPIO_PIN3 | IOMUX_LPSPI3_CS) /* GPIO_AD_B0_03 */
+
+/* MMC/SD */
+
+#define IOMUX_MMCSD_EN       (IOMUX_SLEW_FAST | IOMUX_DRIVE_50OHM | \
+                              IOMUX_SPEED_MEDIUM | IOMUX_PULL_UP_100K | \
+                              _IOMUX_PULL_ENABLE)
+#define GPIO_MMCSD_EN        (GPIO_OUTPUT | GPIO_OUTPUT_ZERO | \
+                              GPIO_PORT3 | GPIO_PIN2 | IOMUX_MMCSD_EN)
+
+/* Touchscreen
+ *
+ * Interrupt line: GPIO_AD_B0_11
+ *
+ * The interrupt line coming from the touchscreen FT5336GQQ IC.
+ * The touchscreen IC is integrated into the optional RK043FN02H-CT LCD panel
+ * and it's connected to the LPI2C1 bus.
+ *
+ * Reset line: GPIO_AD_B0_02
+ *
+ * The reset line is active low.
+ */
+
+#define GPIO_FT5X06_INTR     IMXRT_IRQ_GPIO1_11
+
+#define IOMUX_FT5X06_RST     (IOMUX_PULL_NONE | IOMUX_CMOS_OUTPUT | \
+                              IOMUX_DRIVE_40OHM | IOMUX_SPEED_MEDIUM | \
+                              IOMUX_SLEW_SLOW)                            /* AD_B0_11 */
+#define GPIO_FT5X06_CTRST_N  (GPIO_OUTPUT | GPIO_OUTPUT_ZERO | \
+                              GPIO_PORT1 | GPIO_PIN2 | IOMUX_FT5X06_RST)  /* AD_B0_02 */
+
+/* Test Pins ****************************************************************/
+
+#define BOARD_NGPIOIN   0 /* Amount of GPIO Input pins */
+#define BOARD_NGPIOOUT  4 /* Amount of GPIO Output pins */
+#define BOARD_NGPIOINT  0 /* Amount of GPIO Input w/ Interruption pins */
+
+#define GPIO_GOUT1      (GPIO_OUTPUT | GPIO_OUTPUT_ZERO | IOMUX_GOUT_DEFAULT | \
+                         GPIO_PORT1 | GPIO_PIN19)
+
+#define GPIO_GOUT2      (GPIO_OUTPUT | GPIO_OUTPUT_ZERO | IOMUX_GOUT_DEFAULT | \
+                         GPIO_PIN18 | GPIO_PORT1)
+
+#define GPIO_GOUT3      (GPIO_OUTPUT | GPIO_OUTPUT_ZERO | IOMUX_GOUT_DEFAULT | \
+                         GPIO_PIN10 | GPIO_PORT1)
+
+#define GPIO_GOUT4      (GPIO_OUTPUT | GPIO_OUTPUT_ZERO | IOMUX_GOUT_DEFAULT | \
+                         GPIO_PIN9 | GPIO_PORT1)
+
+/* USB OTG ID Pin: GPIO_AD_B1_02 */
+
+#define GPIO_USBOTG_ID  (GPIO_USB_OTG1_ID_1 | IOMUX_USBOTG_ID_DEFAULT)      /* AD_B1_02 */
+
+/****************************************************************************
+ * Public Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public data
+ ****************************************************************************/
+
+#ifndef __ASSEMBLY__
+
+/****************************************************************************
+ * Name: imxrt_bringup
+ *
+ * Description:
+ *   Bring up board features
+ *
+ ****************************************************************************/
+
+#if defined(CONFIG_LIB_BOARDCTL) || defined(CONFIG_BOARD_LATE_INITIALIZE)
+int imxrt_bringup(void);
+#endif
+
+/****************************************************************************
+ * Name: imxrt_spidev_initialize
+ *
+ * Description:
+ *   Called to configure SPI chip select GPIO pins for the i.MXRT1050 EVK.
+ *
+ ****************************************************************************/
+
+void imxrt_spidev_initialize(void);
+
+/****************************************************************************
+ * Name: imxrt_mmcsd_spi_initialize
+ *
+ * Description:
+ *   Initialize SPI-based SD card and card detect thread.
+ *
+ ****************************************************************************/
+
+#ifdef CONFIG_MMCSD_SPI
+int imxrt_mmcsd_spi_initialize(int minor)
+#endif
+
+/****************************************************************************
+ * Name: imxrt_autoled_initialize
+ *
+ * Description:
+ *   Initialize NuttX-controlled LED logic
+ *
+ * Input Parameters:
+ *   None
+ *
+ * Returned Value:
+ *   None
+ *
+ ****************************************************************************/
+
+#ifdef CONFIG_ARCH_LEDS
+void imxrt_autoled_initialize(void);
+#endif
+
+/****************************************************************************
+ * Name: imxrt_gpio_initialize
+ *
+ * Description:
+ *   Initialize GPIO drivers for use with /apps/examples/gpio
+ *
+ ****************************************************************************/
+
+#ifdef CONFIG_DEV_GPIO
+int imxrt_gpio_initialize(void);
+#endif
+
+/****************************************************************************
+ * Name: imxrt_can_setup
+ *
+ * Description:
+ *  Initialize CAN and register the CAN device
+ *
+ ****************************************************************************/
+
+#ifdef CONFIG_IMXRT_FLEXCAN
+int imxrt_can_setup(void);
+#endif
+
+/****************************************************************************
+ * Name: imxrt_adc_initialize
+ *
+ * Description:
+ *   Initialize ADC drivers
+ *
+ ****************************************************************************/
+
+#ifdef CONFIG_IMXRT_ADC
+int imxrt_adc_initialize(void);
+#endif
+
+/****************************************************************************
+ * Name: imxrt_ft5x06_register
+ *
+ * Description:
+ *   Initialize ft5x06 IC touchscreen driver
+ *
+ ****************************************************************************/
+
+#ifdef CONFIG_INPUT_FT5X06
+int imxrt_ft5x06_register(void);
+#endif
+
+/****************************************************************************
+ * Name: imxrt_backlight
+ *
+ * Description:
+ *   Initialize the backlight pins of the LCD and turn it ON
+ *
+ ****************************************************************************/
+
+#ifdef CONFIG_IMXRT_LCD
+void imxrt_lcd_initialize(void);
+#endif
+
+#if defined(CONFIG_IMXRT_USBOTG) || defined(CONFIG_USBHOST)
+int imxrt_usbhost_initialize(void);
+#endif
+
+#ifdef CONFIG_MTD_FLEXSPI_NOR
+int imxrt_flexspi_nor_setup(void);
+#endif
+
+#endif /* __ASSEMBLY__ */
+#endif /* __BOARDS_ARM_IMXRT_IMXRT1064_EVK_SRC_IMXRT1064_EVK_H */
diff --git a/boards/arm/imxrt/imxrt1064-evk/src/imxrt_adc.c b/boards/arm/imxrt/imxrt1064-evk/src/imxrt_adc.c
new file mode 100644
index 0000000..6b91141
--- /dev/null
+++ b/boards/arm/imxrt/imxrt1064-evk/src/imxrt_adc.c
@@ -0,0 +1,167 @@
+/****************************************************************************
+ * boards/arm/imxrt/imxrt1064-evk/src/imxrt_adc.c
+ *
+ *   Copyright (C) 2020 Actia Nordic AB. All rights reserved.
+ *   Author: Thomas Axelsson <th...@actia.se>
+ *
+ * Based on boards/arm/lpc17xx_40xx/mbed/src/lpc17_40_adc.c
+ *
+ * Based on boards/zkit-arm-176/src/up-adc
+ *
+ *   Copyright (C) 2013 Zilogic Systems. All rights reserved.
+ *   Author: Kannan <co...@nuttx.org>
+ *
+ * Based on boards/lpc1720g-eval/src/lpc17_40_adc.c
+ *
+ *   Copyright (C) 2012, 2014, 2016 Gregory Nutt. All rights reserved.
+ *   Author: Gregory Nutt <gn...@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ *    used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/board.h>
+#include <nuttx/analog/adc.h>
+#include <arch/board/board.h>
+
+#include "chip.h"
+#include "arm_arch.h"
+
+#include "imxrt_adc.h"
+
+#ifdef CONFIG_IMXRT_ADC
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+/* Configuration ************************************************************/
+
+#define ADC1_NCHANNELS 3
+#define ADC2_NCHANNELS 3
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+static const uint8_t g_chanlist1[ADC1_NCHANNELS] =
+  {
+    /* Arduino Interface pins A0 to A2 */
+
+    15,
+    0,
+    9,
+  };
+
+static const uint8_t g_chanlist2[ADC2_NCHANNELS] =
+  {
+    /* Arduino Interface pins A3 to A5 */
+
+    10,
+    6,
+    5
+  };
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: imxrt_adc_setup
+ *
+ * Description:
+ *   Initialize ADC and register the ADC driver.
+ *
+ ****************************************************************************/
+
+int imxrt_adc_initialize(void)
+{
+  static bool initialized = false;
+  struct adc_dev_s *adc;
+  int ret;
+
+  /* Check if we have already initialized */
+
+  if (!initialized)
+    {
+      /* Call imxrt_adcinitialize() to get an instance of the ADC interface */
+
+#ifdef CONFIG_IMXRT_ADC1
+      adc = imxrt_adcinitialize(1, g_chanlist1, ADC1_NCHANNELS);
+      if (adc == NULL)
+        {
+          aerr("ERROR: Failed to get ADC interface for ADC1\n");
+          return -ENODEV;
+        }
+
+      /* Register the ADC driver at "/dev/adc1" */
+
+      ret = adc_register("/dev/adc1", adc);
+      if (ret < 0)
+        {
+          aerr("ERROR: adc_register adc1 failed: %d\n", ret);
+          return ret;
+        }
+#endif
+
+#ifdef CONFIG_IMXRT_ADC2
+      adc = imxrt_adcinitialize(2, g_chanlist2, ADC2_NCHANNELS);
+      if (adc == NULL)
+        {
+          aerr("ERROR: Failed to get ADC interface for ADC2\n");
+          return -ENODEV;
+        }
+
+      /* Register the ADC driver at "/dev/adc2" */
+
+      ret = adc_register("/dev/adc2", adc);
+      if (ret < 0)
+        {
+          aerr("ERROR: adc_register adc2 failed: %d\n", ret);
+          return ret;
+        }
+#endif
+
+      /* Now we are initialized */
+
+      initialized = true;
+    }
+
+  return OK;
+}
+
+#endif /* CONFIG_ADC */
diff --git a/boards/arm/imxrt/imxrt1064-evk/src/imxrt_appinit.c b/boards/arm/imxrt/imxrt1064-evk/src/imxrt_appinit.c
new file mode 100644
index 0000000..8850cfc
--- /dev/null
+++ b/boards/arm/imxrt/imxrt1064-evk/src/imxrt_appinit.c
@@ -0,0 +1,107 @@
+/****************************************************************************
+ * boards/arm/imxrt/imxrt1064-evk/src/imxrt_appinit.c
+ *
+ *   Copyright (C) 2018 Gregory Nutt. All rights reserved.
+ *   Authors: Gregory Nutt <gn...@nuttx.org>
+ *            David Sidrane <da...@nscdg.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ *    used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+#include <syslog.h>
+#include <sys/types.h>
+
+#include <nuttx/board.h>
+
+#include "imxrt1064-evk.h"
+
+#if !defined(CONFIG_ARCH_LEDS) && defined(CONFIG_USERLED_LOWER)
+#  define HAVE_LEDS 0
+#endif
+
+#ifdef CONFIG_LIB_BOARDCTL
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: board_app_initialize
+ *
+ * Description:
+ *   Perform application specific initialization.  This function is never
+ *   called directly from application code, but only indirectly via the
+ *   (non-standard) boardctl() interface using the command BOARDIOC_INIT.
+ *
+ * Input Parameters:
+ *   arg - The boardctl() argument is passed to the board_app_initialize()
+ *         implementation without modification.  The argument has no
+ *         meaning to NuttX; the meaning of the argument is a contract
+ *         between the board-specific initialization logic and the
+ *         matching application logic.  The value could be such things as a
+ *         mode enumeration value, a set of DIP switch switch settings, a
+ *         pointer to configuration data read from a file or serial FLASH,
+ *         or whatever you would like to do with it.  Every implementation
+ *         should accept zero/NULL as a default configuration.
+ *
+ * Returned Value:
+ *   Zero (OK) is returned on success; a negated errno value is returned on
+ *   any failure to indicate the nature of the failure.
+ *
+ ****************************************************************************/
+
+int board_app_initialize(uintptr_t arg)
+{
+#ifdef HAVE_LEDS
+  /* Register the LED driver */
+
+  int ret;
+  ret = userled_lower_initialize(LED_DRIVER_PATH);
+  if (ret < 0)
+    {
+      syslog(LOG_ERR, "ERROR: userled_lower_initialize() failed: %d\n", ret);
+      return ret;
+    }
+#endif
+
+#ifndef CONFIG_BOARD_LATE_INITIALIZE
+  /* Perform board initialization */
+
+  return imxrt_bringup();
+#else
+  return OK;
+#endif
+}
+
+#endif /* CONFIG_LIB_BOARDCTL */
diff --git a/boards/arm/imxrt/imxrt1064-evk/src/imxrt_autoleds.c b/boards/arm/imxrt/imxrt1064-evk/src/imxrt_autoleds.c
new file mode 100644
index 0000000..564d179
--- /dev/null
+++ b/boards/arm/imxrt/imxrt1064-evk/src/imxrt_autoleds.c
@@ -0,0 +1,181 @@
+/****************************************************************************
+ * boards/arm/imxrt/imxrt1064-evk/src/imxrt_autoleds.c
+ *
+ *   Copyright (C) 2018 Gregory Nutt. All rights reserved.
+ *   Authors: Gregory Nutt <gn...@nuttx.org>
+ *            David Sidrane <da...@nscdg.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ *    used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/* There are four LED status indicators located on the EVK Board.  The
+ * functions of these LEDs include:
+ *
+ *   - Main Power Supply(D3)
+ *     Green: DC 5V main supply is normal.
+ *     Red:   J2 input voltage is over 5.6V.
+ *     Off:   The board is not powered.
+ *   - Reset RED LED(D21)
+ *   - OpenSDA LED(D20)
+ *   - USER LED(D18)
+ *
+ * Only a single LED, D18, is under software control.
+ *
+ * This LED is not used by the board port unless CONFIG_ARCH_LEDS is
+ * defined.  In that case, the usage by the board port is defined in
+ * include/board.h and src/imxrt_autoleds.c. The LED is used to encode
+ * OS-related events as follows:
+ *
+ *   -------------------- ----------------------- ------
+ *   SYMBOL               Meaning                 LED
+ *   -------------------- ----------------------- ------
+ *
+ *   LED_STARTED       0  NuttX has been started  OFF
+ *   LED_HEAPALLOCATE  0  Heap has been allocated OFF
+ *   LED_IRQSENABLED   0  Interrupts enabled      OFF
+ *   LED_STACKCREATED  1  Idle stack created      ON
+ *   LED_INIRQ         2  In an interrupt         N/C
+ *   LED_SIGNAL        2  In a signal handler     N/C
+ *   LED_ASSERTION     2  An assertion failed     N/C
+ *   LED_PANIC         3  The system has crashed  FLASH
+ *   LED_IDLE             Not used
+ *
+ * Thus if the LED is statically on, NuttX has successfully  booted and is,
+ * apparently, running normally.  If the LED is flashing at approximately
+ * 2Hz, then a fatal error has been detected and the system has halted.
+ */
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <nuttx/board.h>
+
+#include "imxrt_gpio.h"
+#include "imxrt_iomuxc.h"
+#include <arch/board/board.h>
+#include "imxrt1064-evk.h"
+
+#ifdef CONFIG_ARCH_LEDS
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: imxrt_autoled_initialize
+ *
+ * Description:
+ *   Initialize NuttX-controlled LED logic
+ *
+ * Input Parameters:
+ *   None
+ *
+ * Returned Value:
+ *   None
+ *
+ ****************************************************************************/
+
+void imxrt_autoled_initialize(void)
+{
+  /* Configure LED GPIO for output */
+
+  imxrt_config_gpio(GPIO_LED);
+}
+
+/****************************************************************************
+ * Name: board_autoled_on
+ *
+ * Description:
+ *   Turn on the "logical" LED state
+ *
+ * Input Parameters:
+ *   led - Identifies the "logical" LED state (see definitions in
+ *         include/board.h)
+ *
+ * Returned Value:
+ *   None
+ *
+ ****************************************************************************/
+
+void board_autoled_on(int led)
+{
+  bool ledoff = false;
+
+  switch (led)
+    {
+      case 0:  /* LED Off */
+        ledoff = true;
+        break;
+
+      case 2:  /* LED No change */
+        return;
+
+      case 1:  /* LED On */
+      case 3:  /* LED On */
+        break;
+    }
+
+  imxrt_gpio_write(GPIO_LED, ledoff); /* Low illuminates */
+}
+
+/****************************************************************************
+ * Name: board_autoled_off
+ *
+ * Description:
+ *   Turn off the "logical" LED state
+ *
+ * Input Parameters:
+ *   led - Identifies the "logical" LED state (see definitions in
+ *         include/board.h)
+ *
+ * Returned Value:
+ *   None
+ *
+ ****************************************************************************/
+
+void board_autoled_off(int led)
+{
+  switch (led)
+    {
+      case 0:  /* LED Off */
+      case 1:  /* LED Off */
+      case 3:  /* LED Off */
+        break;
+
+      case 2:  /* LED No change */
+        return;
+    }
+
+  imxrt_gpio_write(GPIO_LED, true); /* Low illuminates */
+}
+
+#endif /* CONFIG_ARCH_LEDS */
diff --git a/boards/arm/imxrt/imxrt1064-evk/src/imxrt_boot.c b/boards/arm/imxrt/imxrt1064-evk/src/imxrt_boot.c
new file mode 100644
index 0000000..19cbcc2
--- /dev/null
+++ b/boards/arm/imxrt/imxrt1064-evk/src/imxrt_boot.c
@@ -0,0 +1,133 @@
+/****************************************************************************
+ * boards/arm/imxrt/imxrt1064-evk/src/imxrt_boot.c
+ *
+ *   Copyright (C) 2015-2018 Gregory Nutt. All rights reserved.
+ *   Authors: Gregory Nutt <gn...@nuttx.org>
+ *            David Sidrane <da...@nscdg.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ *    used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <nuttx/board.h>
+#include <arch/board/board.h>
+
+#include "imxrt_start.h"
+#include "imxrt1064-evk.h"
+#include "arm_arch.h"
+#include "imxrt_flexspi_nor_boot.h"
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: imxrt_ocram_initialize
+ *
+ * Description:
+ *   Called off reset vector to reconfigure the flexRAM
+ *   and finish the FLASH to RAM Copy.
+ *
+ ****************************************************************************/
+
+void imxrt_ocram_initialize(void)
+{
+  const uint32_t *src;
+  uint32_t *dest;
+  uint32_t regval;
+
+  /* Reallocate 128K of Flex RAM from ITCM to OCRAM
+   * Final Configuration is
+   *    128 DTCM
+   *
+   *    128 FlexRAM OCRAM  (202C:0000-202D:ffff)
+   *    256 FlexRAM OCRAM  (2028:0000-202B:ffff)
+   *    512 System  OCRAM2 (2020:0000-2027:ffff)
+   * */
+
+  putreg32(0xaa555555, IMXRT_IOMUXC_GPR_GPR17);
+  regval = getreg32(IMXRT_IOMUXC_GPR_GPR16);
+  putreg32(regval | GPR_GPR16_FLEXRAM_BANK_CFG_SELF, IMXRT_IOMUXC_GPR_GPR16);
+
+  src = (uint32_t *) (LOCATE_IN_SRC(g_boot_data.start) + g_boot_data.size);
+  dest = (uint32_t *) (g_boot_data.start + g_boot_data.size);
+
+  while (dest < (uint32_t *) &_etext)
+    {
+      *dest++ = *src++;
+    }
+}
+
+/****************************************************************************
+ * Name: imxrt_boardinitialize
+ *
+ * Description:
+ *   All i.MX RT architectures must provide the following entry point.  This
+ *   entry point is called early in the initialization -- after clocking and
+ *   memory have been configured but before caches have been enabled and
+ *   before any devices have been initialized.
+ *
+ ****************************************************************************/
+
+void imxrt_boardinitialize(void)
+{
+  /* Configure on-board LEDs if LED support has been selected. */
+
+#ifdef CONFIG_ARCH_LEDS
+  imxrt_autoled_initialize();
+#endif
+}
+
+/****************************************************************************
+ * Name: board_late_initialize
+ *
+ * Description:
+ *   If CONFIG_BOARD_LATE_INITIALIZE is selected, then an additional
+ *   initialization call will be performed in the boot-up sequence to a
+ *   function called board_late_initialize().  board_late_initialize() will
+ *   be called immediately after up_intitialize() is called and just before
+ *   the initial application is started.  This additional initialization
+ *   phase may be used, for example, to initialize board-specific device
+ *   drivers.
+ *
+ ****************************************************************************/
+
+#ifdef CONFIG_BOARD_LATE_INITIALIZE
+void board_late_initialize(void)
+{
+  /* Perform board initialization */
+
+  imxrt_bringup();
+}
+#endif /* CONFIG_BOARD_LATE_INITIALIZE */
diff --git a/boards/arm/imxrt/imxrt1064-evk/src/imxrt_bringup.c b/boards/arm/imxrt/imxrt1064-evk/src/imxrt_bringup.c
new file mode 100644
index 0000000..d522f49
--- /dev/null
+++ b/boards/arm/imxrt/imxrt1064-evk/src/imxrt_bringup.c
@@ -0,0 +1,307 @@
+/****************************************************************************
+ * boards/arm/imxrt/imxrt1064-evk/src/imxrt_bringup.c
+ *
+ *   Copyright (C) 2018, 2020 Gregory Nutt. All rights reserved.
+ *   Authors: Gregory Nutt <gn...@nuttx.org>
+ *            David Sidrane <da...@nscdg.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ *    used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <sys/types.h>
+#include <debug.h>
+
+#include <syslog.h>
+#include <nuttx/fs/fs.h>
+#include <nuttx/i2c/i2c_master.h>
+#include <nuttx/video/fb.h>
+#include <imxrt_lpi2c.h>
+#include <imxrt_lpspi.h>
+#include <nuttx/input/buttons.h>
+
+#ifdef CONFIG_IMXRT_USDHC
+#  include "imxrt_usdhc.h"
+#endif
+
+#ifdef CONFIG_USBMONITOR
+#  include <nuttx/usb/usbmonitor.h>
+#endif
+
+#ifdef CONFIG_PL2303
+#  include <nuttx/usb/pl2303.h>
+#endif
+
+#include "imxrt_enet.h"
+#include "imxrt1064-evk.h"
+
+#include <arch/board/board.h>  /* Must always be included last */
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+/* Checking needed by MMC/SDCard */
+
+#ifdef CONFIG_NSH_MMCSDMINOR
+#  define MMCSD_MINOR CONFIG_NSH_MMCSDMINOR
+#else
+#  define MMCSD_MINOR 0
+#endif
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+#if defined(CONFIG_I2C_DRIVER) && defined(CONFIG_IMXRT_LPI2C)
+static void imxrt_i2c_register(int bus)
+{
+  FAR struct i2c_master_s *i2c;
+  int ret;
+
+  i2c = imxrt_i2cbus_initialize(bus);
+  if (i2c == NULL)
+    {
+      serr("ERROR: Failed to get I2C%d interface\n", bus);
+    }
+  else
+    {
+      ret = i2c_register(i2c, bus);
+      if (ret < 0)
+        {
+          serr("ERROR: Failed to register I2C%d driver: %d\n", bus, ret);
+          imxrt_i2cbus_uninitialize(i2c);
+        }
+    }
+}
+#endif
+
+#ifdef CONFIG_IMXRT_USDHC
+static int nsh_sdmmc_initialize(void)
+{
+  struct sdio_dev_s *sdmmc;
+  int ret = 0;
+
+  /* Get an instance of the SDIO interface */
+
+  sdmmc = imxrt_usdhc_initialize(0);
+  if (!sdmmc)
+    {
+      syslog(LOG_ERR, "ERROR: Failed to initialize SD/MMC\n");
+    }
+  else
+    {
+      /* Bind the SDIO interface to the MMC/SD driver */
+
+      ret = mmcsd_slotinitialize(0, sdmmc);
+      if (ret != OK)
+        {
+          syslog(LOG_ERR,
+                 "ERROR: Failed to bind SDIO to the MMC/SD driver: %d\n",
+                 ret);
+        }
+
+      imxrt_usdhc_set_sdio_card_isr(sdmmc, NULL, NULL);
+    }
+
+  return OK;
+}
+#else
+#  define nsh_sdmmc_initialize() (OK)
+#endif
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: imxrt_bringup
+ *
+ * Description:
+ *   Bring up board features
+ *
+ ****************************************************************************/
+
+int imxrt_bringup(void)
+{
+  int ret;
+
+  /* If we got here then perhaps not all initialization was successful, but
+   * at least enough succeeded to bring-up NSH with perhaps reduced
+   * capabilities.
+   */
+
+#ifdef CONFIG_FS_PROCFS
+  /* Mount the procfs file system */
+
+  ret = nx_mount(NULL, "/proc", "procfs", 0, NULL);
+  if (ret < 0)
+    {
+      syslog(LOG_ERR, "ERROR: Failed to mount procfs at /proc: %d\n", ret);
+    }
+#endif
+
+#if defined(CONFIG_I2C_DRIVER) && defined(CONFIG_IMXRT_LPI2C1)
+  imxrt_i2c_register(1);
+#endif
+
+#ifdef CONFIG_IMXRT_USDHC
+  /* Initialize SDHC-base MMC/SD card support */
+
+  nsh_sdmmc_initialize();
+#endif
+
+#ifdef CONFIG_MMCSD_SPI
+  /* Initialize SPI-based MMC/SD card support */
+
+  imxrt_spidev_initialize();
+
+  ret = imxrt_mmcsd_spi_initialize(MMCSD_MINOR);
+  if (ret < 0)
+    {
+      syslog(LOG_ERR, "ERROR: Failed to initialize SD slot %d: %d\n", ret);
+    }
+#endif
+
+#if defined(CONFIG_IMXRT_USBOTG) || defined(CONFIG_USBHOST)
+  ret = imxrt_usbhost_initialize();
+  if (ret != OK)
+    {
+      syslog(LOG_ERR, "ERROR: Failed to start USB host services: %d\n", ret);
+      return ret;
+    }
+#endif
+
+#ifdef CONFIG_USBMONITOR
+  /* Start the USB Monitor */
+
+  ret = usbmonitor_start();
+  if (ret != OK)
+    {
+      syslog(LOG_ERR, "ERROR: Failed to start USB monitor: %d\n", ret);
+    }
+#endif
+
+#if defined(CONFIG_IMXRT_ENET) && defined(CONFIG_NETDEV_LATEINIT)
+  ret = imxrt_netinitialize(0);
+#endif
+
+#ifdef CONFIG_IMXRT_FLEXCAN
+  ret = imxrt_can_setup();
+  if (ret < 0)
+    {
+      syslog(LOG_ERR, "ERROR: imxrt_can_setup() failed: %d\n", ret);
+      return ret;
+    }
+#endif
+
+#ifdef CONFIG_DEV_GPIO
+  /* Initialize the GPIO driver */
+
+  ret = imxrt_gpio_initialize();
+  if (ret < 0)
+    {
+      syslog(LOG_ERR, "Failed to initialize GPIO Driver: %d\n", ret);
+      return ret;
+    }
+#endif
+
+#ifdef CONFIG_IMXRT_ADC
+  /* Initialize ADC and register the ADC driver. */
+
+  ret = imxrt_adc_initialize();
+  if (ret < 0)
+    {
+      syslog(LOG_ERR, "ERROR: imxrt_adc_initialize() failed: %d\n", ret);
+    }
+#endif
+
+#ifdef CONFIG_INPUT_FT5X06
+  /* Initialize the FT5X06 touchscreen driver */
+
+  ret = imxrt_ft5x06_register();
+  if (ret < 0)
+    {
+      syslog(LOG_ERR, "ERROR: imxrt_ft5x06_register() failed: %d\n", ret);
+    }
+#endif
+
+#ifdef CONFIG_IMXRT_LCD
+  /* Initialize the backlight pin and turn it to ON. */
+
+  imxrt_lcd_initialize();
+#endif
+
+#ifdef CONFIG_BUTTONS
+#ifdef CONFIG_BUTTONS_LOWER
+  /* Register the BUTTON driver */
+
+  ret = btn_lower_initialize("/dev/buttons");
+  if (ret != OK)
+    {
+      syslog(LOG_ERR, "ERROR: btn_lower_initialize() failed: %d\n", ret);
+      return ret;
+    }
+#else
+  /* Enable BUTTON support for some other purpose */
+
+  board_button_initialize();
+#endif /* CONFIG_BUTTONS_LOWER */
+#endif /* CONFIG_BUTTONS */
+
+#ifdef CONFIG_VIDEO_FB
+  /* Initialize and register the framebuffer driver */
+
+  ret = fb_register(0, 0);
+  if (ret < 0)
+    {
+      syslog(LOG_ERR, "ERROR: fb_register() failed: %d\n", ret);
+    }
+#endif
+
+#ifdef CONFIG_PL2303
+  usbdev_serialinitialize(0);
+#endif
+
+#ifdef CONFIG_MTD_FLEXSPI_NOR
+  ret = imxrt_flexspi_nor_setup();
+  if (ret < 0)
+    {
+      syslog(LOG_ERR, "ERROR: imxrt_flexspi_nor_setup failed: %d\n", ret);
+    }
+#endif
+
+  UNUSED(ret);
+  return OK;
+}
diff --git a/boards/arm/imxrt/imxrt1064-evk/src/imxrt_buttons.c b/boards/arm/imxrt/imxrt1064-evk/src/imxrt_buttons.c
new file mode 100644
index 0000000..66f4762
--- /dev/null
+++ b/boards/arm/imxrt/imxrt1064-evk/src/imxrt_buttons.c
@@ -0,0 +1,177 @@
+/****************************************************************************
+ * boards/arm/imxrt/imxrt1064-evk/src/imxrt_buttons.c
+ *
+ *   Copyright (C) 2018 Gregory Nutt. All rights reserved.
+ *   Authors: Gregory Nutt <gn...@nuttx.org>
+ *            David Sidrane <da...@nscdg.com>
+ *            Dave Marples <da...@marples.net>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ *    used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <sys/types.h>
+#include <errno.h>
+
+#include <nuttx/arch.h>
+#include <nuttx/irq.h>
+#include <arch/board/board.h>
+
+#include "arm_arch.h"
+
+#include "imxrt_config.h"
+#include "imxrt_irq.h"
+#include "imxrt_gpio.h"
+#include "imxrt1064-evk.h"
+
+#ifdef CONFIG_ARCH_BUTTONS
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+/* The IMXRT has 1 user button (SW8)):
+ *
+ * 1. SW8 (IRQ88)   GPIO5-00
+ */
+
+const uint32_t gpio_pins[NUM_BUTTONS]     =
+                                            {
+                                              GPIO_SW8
+                                            };
+const uint32_t gpio_pins_int[NUM_BUTTONS] =
+                                            {
+                                              GPIO_SW8_INT
+                                            };
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: board_button_initialize
+ *
+ * Description:
+ *   board_button_initialize() must be called to initialize button resources.
+ *   After that, board_buttons() may be called to collect the current state
+ *   of all buttons or board_button_irq() may be called to register button
+ *   interrupt handlers.
+ *
+ ****************************************************************************/
+
+uint32_t board_button_initialize(void)
+{
+  uint32_t i;
+
+  /* Configure the buttons as input */
+
+  for (i = 0; i < NUM_BUTTONS; i++)
+    {
+      imxrt_config_gpio(gpio_pins[i]);
+    }
+
+  return NUM_BUTTONS;
+}
+
+/****************************************************************************
+ * Name: board_buttons
+ *
+ * Description:
+ *   After board_button_initialize() has been called, board_buttons() may be
+ *   called to collect the state of all buttons.  board_buttons() returns an
+ *   8-bit bit set with each bit associated with a button.  See the
+ *   BUTTON_*_BIT  definitions in board.h for the meaning of each bit.
+ *
+ ****************************************************************************/
+
+uint8_t board_buttons(void)
+{
+  uint8_t ret = 0;
+  uint8_t i   = 0;
+
+  for (i = 0; i < NUM_BUTTONS; i++)
+    {
+      ret |= ((!imxrt_gpio_read(gpio_pins[i])) << i);
+    }
+
+  return ret;
+}
+
+/****************************************************************************
+ * Name: board_button_irq
+ *
+ * Description:
+ *   board_button_irq() may be called to register an interrupt handler that
+ *   will be called when a button is depressed or released.  The ID value is
+ *   a button enumeration value that uniquely identifies a button resource.
+ *   See the BUTTON_* definitions in board.h for the meaning of enumeration
+ *   value.
+ *
+ ****************************************************************************/
+
+#ifdef CONFIG_ARCH_IRQBUTTONS
+int board_button_irq(int id, xcpt_t irqhandler, FAR void *arg)
+{
+  int ret = -EINVAL;
+
+  /* The button has already been configured as an interrupting input (by
+   * board_button_initialize() above).
+   *
+   * Attach the new button handler.
+   */
+
+  if (id < NUM_BUTTONS)
+    {
+      uint32_t irqnum = gpio_pins_int[id];
+      if (irqhandler)
+        {
+          ret = irq_attach(irqnum, irqhandler, arg);
+          imxrt_gpioirq_enable (irqnum);
+
+          /* Then make sure that interrupts are enabled on the pin */
+
+          up_enable_irq(irqnum);
+        }
+      else
+        {
+          up_disable_irq(irqnum);
+          imxrt_gpioirq_disable(irqnum);
+          ret = OK;
+        }
+    }
+
+  return ret;
+}
+#endif
+#endif /* CONFIG_ARCH_BUTTONS */
diff --git a/boards/arm/imxrt/imxrt1064-evk/src/imxrt_ethernet.c b/boards/arm/imxrt/imxrt1064-evk/src/imxrt_ethernet.c
new file mode 100644
index 0000000..b5762fa
--- /dev/null
+++ b/boards/arm/imxrt/imxrt1064-evk/src/imxrt_ethernet.c
@@ -0,0 +1,291 @@
+/****************************************************************************
+ * boards/arm/imxrt/imxrt1064-evk/src/imxrt_ethernet.c
+ *
+ *   Copyright (C) 2018 Gregory Nutt. All rights reserved.
+ *   Authors: Gregory Nutt <gn...@nuttx.org>
+ *            David Sidrane <da...@nscdg.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ *    used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+/* Force verbose debug on in this file only to support unit-level testing. */
+
+#ifdef CONFIG_NETDEV_PHY_DEBUG
+#  undef  CONFIG_DEBUG_INFO
+#  define CONFIG_DEBUG_INFO 1
+#  undef  CONFIG_DEBUG_NET
+#  define CONFIG_DEBUG_NET 1
+#endif
+
+#include <string.h>
+#include <assert.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/irq.h>
+#include <nuttx/arch.h>
+
+#include "imxrt_gpio.h"
+#include "imxrt_enet.h"
+
+#include "imxrt1064-evk.h"
+
+#ifdef CONFIG_IMXRT_ENET
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+#define IMXRT_ENET_DEVNAME "eth0"
+
+/* Debug ********************************************************************/
+
+/* Extra, in-depth debug output that is only available if
+ * CONFIG_NETDEV_PHY_DEBUG us defined.
+ */
+
+#ifdef CONFIG_NETDEV_PHY_DEBUG
+#  define phyerr    _err
+#  define phywarn   _warn
+#  define phyinfo   _info
+#else
+#  define phyerr(x...)
+#  define phywarn(x...)
+#  define phyinfo(x...)
+#endif
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: imxrt_enet_phy_enable
+ ****************************************************************************/
+
+#ifdef CONFIG_IMXRT_GPIO1_0_15_IRQ
+static void imxrt_enet_phy_enable(bool enable)
+{
+  phyinfo("IRQ%d: enable=%d\n", GPIO_ENET_INT, enable);
+
+  if (enable)
+    {
+      up_enable_irq(GPIO_ENET_IRQ);
+    }
+  else
+    {
+      up_disable_irq(GPIO_ENET_IRQ);
+    }
+}
+#endif
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Function: imxrt_phy_boardinitialize
+ *
+ * Description:
+ *   Some boards require specialized initialization of the PHY before it can
+ *   be used.  This may include such things as configuring GPIOs, resetting
+ *   the PHY, etc.
+ *   If CONFIG_IMXRT_ENET_PHYINIT is defined in the configuration then the
+ *   board specific logic must provide imxrt_phyinitialize();
+ *   The i.MX RT Ethernet driver will call this function one time before it
+ *   first uses the PHY.
+ *
+ * Input Parameters:
+ *   intf - Always zero for now.
+ *
+ * Returned Value:
+ *   OK on success; Negated errno on failure.
+ *
+ ****************************************************************************/
+
+int imxrt_phy_boardinitialize(int intf)
+{
+#ifdef CONFIG_IMXRT_GPIO1_0_15_IRQ
+  /* Configure the PHY interrupt pin */
+
+  phyinfo("Configuring interrupt: %08x\n", GPIO_ENET_INT);
+  imxrt_config_gpio(GPIO_ENET_INT);
+#endif
+
+  /* Configure the PHY reset pin.
+   *
+   * The #RST uses inverted logic.  The initial value of zero will put the
+   * PHY into the reset state.
+   */
+
+  phyinfo("Configuring reset: %08x\n", GPIO_ENET_RST);
+  imxrt_config_gpio(GPIO_ENET_RST);
+
+  /* Take the PHY out of reset. */
+
+  imxrt_gpio_write(GPIO_ENET_RST, true);
+  return OK;
+}
+
+/****************************************************************************
+ * Name: arch_phy_irq
+ *
+ * Description:
+ *   This function may be called to register an interrupt handler that will
+ *   be called when a PHY interrupt occurs.  This function both attaches
+ *   the interrupt handler and enables the interrupt if 'handler' is non-
+ *   NULL.  If handler is NULL, then the interrupt is detached and disabled
+ *   instead.
+ *
+ *   The PHY interrupt is always disabled upon return.  The caller must
+ *   call back through the enable function point to control the state of
+ *   the interrupt.
+ *
+ *   This interrupt may or may not be available on a given platform depending
+ *   on how the network hardware architecture is implemented.  In a typical
+ *   case, the PHY interrupt is provided to board-level logic as a GPIO
+ *   interrupt (in which case this is a board-specific interface and really
+ *   should be called board_phy_irq()); In other cases, the PHY interrupt
+ *   may be cause by the chip's MAC logic (in which case arch_phy_irq()) is
+ *   an appropriate name.  Other other boards, there may be no PHY interrupts
+ *   available at all.  If client attachable PHY interrupts are available
+ *   from the board or from the chip, then CONFIG_ARCH_PHY_INTERRUPT should
+ *   be defined to indicate that fact.
+ *
+ *   Typical usage:
+ *   a. OS service logic (not application logic*) attaches to the PHY
+ *      PHY interrupt and enables the PHY interrupt.
+ *   b. When the PHY interrupt occurs:  (1) the interrupt should be
+ *      disabled and () work should be scheduled on the worker thread (or
+ *      perhaps a dedicated application thread).
+ *   c. That worker thread should use the SIOCGMIIPHY, SIOCGMIIREG,
+ *      and SIOCSMIIREG ioctl calls** to communicate with the PHY,
+ *      determine what network event took place (Link Up/Down?), and
+ *      take the appropriate actions.
+ *   d. It should then interact the PHY to clear any pending
+ *      interrupts, then re-enable the PHY interrupt.
+ *
+ *    * This is an OS internal interface and should not be used from
+ *      application space.  Rather applications should use the SIOCMIISIG
+ *      ioctl to receive a signal when a PHY event occurs.
+ *   ** This interrupt is really of no use if the Ethernet MAC driver
+ *      does not support these ioctl calls.
+ *
+ * Input Parameters:
+ *   intf    - Identifies the network interface.  For example "eth0".  Only
+ *             useful on platforms that support multiple Ethernet interfaces
+ *             and, hence, multiple PHYs and PHY interrupts.
+ *   handler - The client interrupt handler to be invoked when the PHY
+ *             asserts an interrupt.  Must reside in OS space, but can
+ *             signal tasks in user space.  A value of NULL can be passed
+ *             in order to detach and disable the PHY interrupt.
+ *   arg     - The argument that will accompany the interrupt
+ *   enable  - A function pointer that be unused to enable or disable the
+ *             PHY interrupt.
+ *
+ * Returned Value:
+ *   Zero (OK) returned on success; a negated errno value is returned on
+ *   failure.
+ *
+ ****************************************************************************/
+
+#ifdef CONFIG_IMXRT_GPIO1_0_15_IRQ
+int arch_phy_irq(FAR const char *intf, xcpt_t handler, void *arg,
+                 phy_enable_t *enable)
+{
+  irqstate_t flags;
+  phy_enable_t enabler;
+  int irq;
+
+  DEBUGASSERT(intf);
+
+  ninfo("%s: handler=%p\n", intf, handler);
+  phyinfo("EMAC: devname=%s\n", IMXRT_ENET_DEVNAME);
+
+  if (strcmp(intf, IMXRT_ENET_DEVNAME) == 0)
+    {
+      irq     = GPIO_ENET_IRQ;
+      enabler = imxrt_enet_phy_enable;
+    }
+  else
+    {
+      nerr("ERROR: Unsupported interface: %s\n", intf);
+      return -EINVAL;
+    }
+
+  /* Disable interrupts until we are done.  This guarantees that the
+   * following operations are atomic.
+   */
+
+  flags = spin_lock_irqsave(NULL);
+
+  /* Configure the interrupt */
+
+  if (handler)
+    {
+      /* The interrupt pin has already been configured as an interrupting
+       * input (by imxrt_phy_boardinitialize() above).
+       *
+       * Attach the new button handler.
+       */
+
+      phyinfo("Attach IRQ%d\n", irq);
+      irq_attach(irq, handler, arg);
+    }
+  else
+    {
+      phyinfo("Detach IRQ%d\n", irq);
+      irq_detach(irq);
+      enabler = NULL;
+    }
+
+  /* Return with the interrupt disabled in either case */
+
+  up_disable_irq(GPIO_ENET_IRQ);
+
+  /* Return the enabling function pointer */
+
+  if (enable)
+    {
+      *enable = enabler;
+    }
+
+  /* Return the old handler (so that it can be restored) */
+
+  spin_unlock_irqrestore(NULL, flags);
+  return OK;
+}
+#endif /* CONFIG_IMXRT_GPIO1_0_15_IRQ */
+
+#endif /* CONFIG_IMXRT_ENET */
diff --git a/boards/arm/imxrt/imxrt1064-evk/src/imxrt_flexcan.c b/boards/arm/imxrt/imxrt1064-evk/src/imxrt_flexcan.c
new file mode 100644
index 0000000..635b819
--- /dev/null
+++ b/boards/arm/imxrt/imxrt1064-evk/src/imxrt_flexcan.c
@@ -0,0 +1,83 @@
+/****************************************************************************
+ * boards/arm/imxrt/imxrt1064-evk/src/imxrt_flexcan.c
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.  The
+ * ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the
+ * License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdbool.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/can/can.h>
+
+#include "imxrt_flexcan.h"
+#include "imxrt1064-evk.h"
+
+#ifdef CONFIG_IMXRT_FLEXCAN
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: imxrt_can_setup
+ *
+ * Description:
+ *  Initialize CAN and register the CAN device
+ *
+ ****************************************************************************/
+
+int imxrt_can_setup(void)
+{
+  int ret;
+#if defined(CONFIG_IMXRT_FLEXCAN3) && defined(CONFIG_IMXRT_FLEXCAN2)
+  canerr("ERROR: Only one FlexCAN can be defined at the same time\n");
+  return -ENODEV;
+#endif
+
+#ifdef CONFIG_IMXRT_FLEXCAN3
+  /* Call arm_caninitialize() to get an instance of the CAN interface */
+
+  ret = imxrt_caninitialize(3);
+  if (ret < 0)
+    {
+      canerr("ERROR: Failed to get CAN interface\n");
+      return -ENODEV;
+    }
+#elif CONFIG_IMXRT_FLEXCAN2
+  ret = imxrt_caninitialize(2);
+  if (ret < 0)
+    {
+      canerr("ERROR: Failed to get CAN interface\n");
+      return -ENODEV;
+    }
+#elif CONFIG_IMXRT_FLEXCAN1
+  canerr("ERROR: FlexCAN1 is not available on imxrt1060-evk\n");
+  return -ENODEV;
+#else
+  return -ENODEV;
+#endif
+  return OK;
+}
+
+#endif /* CONFIG_IMXRT_FLEXCAN */
diff --git a/boards/arm/imxrt/imxrt1064-evk/src/imxrt_flexspi_nor_boot.c b/boards/arm/imxrt/imxrt1064-evk/src/imxrt_flexspi_nor_boot.c
new file mode 100644
index 0000000..2e0457b
--- /dev/null
+++ b/boards/arm/imxrt/imxrt1064-evk/src/imxrt_flexspi_nor_boot.c
@@ -0,0 +1,73 @@
+/****************************************************************************
+ * boards/arm/imxrt/imxrt1064-evk/src/imxrt_flexspi_nor_boot.c
+ *
+ *   Copyright (C) 2018 Gregory Nutt. All rights reserved.
+ *   Author: Ivan Ucherdzhiev <iv...@gmail.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ *    used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include "imxrt_flexspi_nor_boot.h"
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+__attribute__((section(".boot_hdr.ivt")))
+const struct ivt_s g_image_vector_table =
+{
+  IVT_HEADER,                         /* IVT Header */
+  IMAGE_ENTRY_ADDRESS,                /* Image  Entry Function */
+  IVT_RSVD,                           /* Reserved = 0 */
+  (uint32_t)DCD_ADDRESS,              /* Address where DCD information is stored */
+  (uint32_t)BOOT_DATA_ADDRESS,        /* Address where BOOT Data Structure is stored */
+  (uint32_t)IMAG_VECTOR_TABLE,        /* Pointer to IVT Self (absolute address */
+  (uint32_t)CSF_ADDRESS,              /* Address where CSF file is stored */
+  IVT_RSVD                            /* Reserved = 0 */
+};
+
+__attribute__((section(".boot_hdr.boot_data")))
+const struct boot_data_s g_boot_data =
+{
+  IMAGE_DEST,                         /* boot start location */
+  (IMAGE_DEST_END - IMAGE_DEST),      /* size */
+  PLUGIN_FLAG,                        /* Plugin flag */
+  0xffffffff                          /* empty - extra data word */
+};
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/* None */
+
diff --git a/boards/arm/imxrt/imxrt1064-evk/src/imxrt_flexspi_nor_boot.h b/boards/arm/imxrt/imxrt1064-evk/src/imxrt_flexspi_nor_boot.h
new file mode 100644
index 0000000..9387ec1
--- /dev/null
+++ b/boards/arm/imxrt/imxrt1064-evk/src/imxrt_flexspi_nor_boot.h
@@ -0,0 +1,184 @@
+/****************************************************************************
+ * boards/arm/imxrt/imxrt1064-evk/src/imxrt_flexspi_nor_boot.h
+ *
+ *   Copyright (C) 2018 Gregory Nutt. All rights reserved.
+ *   Authors: Ivan Ucherdzhiev <iv...@gmail.com>
+ *            David Sidrane <da...@nscdg.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ *    used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+#ifndef __BOARDS_ARM_IMXRT_IMXRT1060_EVK_SRC_IMXRT_FLEXSPI_NOR_BOOT_H
+#define __BOARDS_ARM_IMXRT_IMXRT1060_EVK_SRC_IMXRT_FLEXSPI_NOR_BOOT_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <stdint.h>
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+/* IVT Data */
+
+#define IVT_MAJOR_VERSION           0x4
+#define IVT_MAJOR_VERSION_SHIFT     0x4
+#define IVT_MAJOR_VERSION_MASK      0xf
+#define IVT_MINOR_VERSION           0x1
+#define IVT_MINOR_VERSION_SHIFT     0x0
+#define IVT_MINOR_VERSION_MASK      0xf
+
+#define IVT_VERSION(major, minor)   \
+  ((((major) & IVT_MAJOR_VERSION_MASK) << IVT_MAJOR_VERSION_SHIFT) |  \
+  (((minor) & IVT_MINOR_VERSION_MASK) << IVT_MINOR_VERSION_SHIFT))
+
+#define IVT_TAG_HEADER              (0xd1)       /* Image Vector Table */
+#define IVT_SIZE                    0x2000
+#define IVT_PAR                     IVT_VERSION(IVT_MAJOR_VERSION, IVT_MINOR_VERSION)
+
+#define IVT_HEADER                  (IVT_TAG_HEADER | (IVT_SIZE << 8) | (IVT_PAR << 24))
+#define IVT_RSVD                    (uint32_t)(0x00000000)
+
+/* DCD Data */
+
+#define DCD_TAG_HEADER              (0xd2)
+#define DCD_TAG_HEADER_SHIFT        (24)
+#define DCD_VERSION                 (0x40)
+#define DCD_ARRAY_SIZE              1
+
+#define FLASH_BASE                  0x70000000
+#define FLASH_END                   0x70400000
+
+/* This needs to take into account  the memory configuration at boot
+ * bootloader
+ */
+
+#define ROM_BOOTLOADER_OCRAM_RES    0x8000
+#define OCRAM_BASE                  (0x20200000 + ROM_BOOTLOADER_OCRAM_RES)
+#define OCRAM_END                   (OCRAM_BASE + (512 * 1024) + (256 * 1024) \
+                                     - ROM_BOOTLOADER_OCRAM_RES)
+
+#define SCLK 1
+#if defined(CONFIG_BOOT_RUNFROMFLASH)
+#  define IMAGE_DEST                FLASH_BASE
+#  define IMAGE_DEST_END            FLASH_END
+#  define IMAGE_DEST_OFFSET         0
+#else
+#  define IMAGE_DEST                OCRAM_BASE
+#  define IMAGE_DEST_END            OCRAM_END
+#  define IMAGE_DEST_OFFSET         IVT_SIZE
+#endif
+
+#define LOCATE_IN_DEST(x)           (((uint32_t)(x)) - FLASH_BASE + IMAGE_DEST)
+#define LOCATE_IN_SRC(x)            (((uint32_t)(x)) - IMAGE_DEST + FLASH_BASE)
+
+#ifdef CONFIG_IMXRT1064_EVK_SDRAM
+#  define DCD_ADDRESS               &g_dcd_data
+#else
+#  define DCD_ADDRESS               0
+#endif
+#define BOOT_DATA_ADDRESS           LOCATE_IN_DEST(&g_boot_data)
+#define CSF_ADDRESS                 0
+#define PLUGIN_FLAG                 (uint32_t)0
+
+/* Located in Destination Memory */
+
+#define IMAGE_ENTRY_ADDRESS        ((uint32_t)&_vectors)
+#define IMAG_VECTOR_TABLE           LOCATE_IN_DEST(&g_image_vector_table)
+
+/****************************************************************************
+ * Public Types
+ ****************************************************************************/
+
+/* IVT Data */
+
+struct ivt_s
+{
+  /* Header with tag #HAB_TAG_IVT, length and HAB version fields
+   * (see data)
+   */
+
+  uint32_t hdr;
+
+  /* Absolute address of the first instruction to execute from the
+   * image
+   */
+
+  uint32_t entry;
+
+  /* Reserved in this version of HAB: should be NULL. */
+
+  uint32_t reserved1;
+
+  /* Absolute address of the image DCD: may be NULL. */
+
+  uint32_t dcd;
+
+  /* Absolute address of the Boot Data: may be NULL, but not interpreted
+   * any further by HAB
+   */
+
+  uint32_t boot_data;
+
+  /* Absolute address of the IVT. */
+
+  uint32_t self;
+
+  /* Absolute address of the image CSF. */
+
+  uint32_t csf;
+
+  /* Reserved in this version of HAB: should be zero. */
+
+  uint32_t reserved2;
+};
+
+/* Boot Data */
+
+struct boot_data_s
+{
+  uint32_t start;           /* boot start location */
+  uint32_t size;            /* size */
+  uint32_t plugin;          /* plugin flag - 1 if downloaded application is plugin */
+  uint32_t placeholder;     /* placeholder to make even 0x10 size */
+};
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+extern const struct boot_data_s g_boot_data;
+#ifdef CONFIG_IMXRT1064_EVK_SDRAM
+extern const uint8_t g_dcd_data[];
+#endif
+extern  const uint32_t  _vectors[];
+
+#endif /* __BOARDS_ARM_IMXRT_IMXRT1060_EVK_SRC_IMXRT_FLEXSPI_NOR_BOOT_H */
diff --git a/boards/arm/imxrt/imxrt1064-evk/src/imxrt_flexspi_nor_flash.c b/boards/arm/imxrt/imxrt1064-evk/src/imxrt_flexspi_nor_flash.c
new file mode 100644
index 0000000..4e6bef2
--- /dev/null
+++ b/boards/arm/imxrt/imxrt1064-evk/src/imxrt_flexspi_nor_flash.c
@@ -0,0 +1,136 @@
+/****************************************************************************
+ * boards/arm/imxrt/imxrt1064-evk/src/imxrt_flexspi_nor_flash.c
+ *
+ *   Copyright (C) 2018 Gregory Nutt. All rights reserved.
+ *   Authors: Ivan Ucherdzhiev <iv...@gmail.com>
+ *            David Sidrane <da...@nscdg.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ *    used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include "imxrt_flexspi_nor_flash.h"
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+#if defined (CONFIG_IMXRT1060_EVK_HYPER_FLASH)
+__attribute__((section(".boot_hdr.conf")))
+const struct flexspi_nor_config_s g_flash_config =
+{
+  .mem_config               =
+  {
+    .tag                    = FLEXSPI_CFG_BLK_TAG,
+    .version                = FLEXSPI_CFG_BLK_VERSION,
+    .read_sample_clksrc     = FLASH_READ_SAMPLE_CLK_EXT_INPUT_FROM_DQSPAD,
+    .cs_hold_time           = 3u,
+    .cs_setup_time          = 3u,
+    .column_address_width   = 3u,
+
+  /* Enable DDR mode, Word addassable, Safe configuration,
+   * Differential clock
+   */
+
+    .controller_misc_option =
+        (1u << FLEXSPIMISC_OFFSET_DDR_MODE_EN) |
+        (1u << FLEXSPIMISC_OFFSET_WORD_ADDRESSABLE_EN) |
+        (1u << FLEXSPIMISC_OFFSET_SAFECONFIG_FREQ_EN) |
+        (1u << FLEXSPIMISC_OFFSET_DIFFCLKEN),
+    .sflash_pad_type        = SERIAL_FLASH_8PADS,
+    .serial_clk_freq        = FLEXSPI_SERIAL_CLKFREQ_133MHz,
+    .sflash_a1size          = 64u * 1024u * 1024u,
+    .data_valid_time        =
+                              {
+                                16u, 16u
+                              },
+    .lookup_table           =
+    {
+      /* Read LUTs */
+
+      FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0xa0, RADDR_DDR,
+                      FLEXSPI_8PAD, 0x18),
+      FLEXSPI_LUT_SEQ(CADDR_DDR, FLEXSPI_8PAD, 0x10, DUMMY_DDR,
+                      FLEXSPI_8PAD, 0x06),
+      FLEXSPI_LUT_SEQ(READ_DDR, FLEXSPI_8PAD, 0x04, STOP,
+                      FLEXSPI_1PAD, 0x0),
+    },
+  },
+  .page_size                = 512u,
+  .sector_size              = 256u * 1024u,
+  .blocksize                = 256u * 1024u,
+  .is_uniform_blocksize     = 1,
+};
+
+#elif defined (CONFIG_IMXRT1064_EVK_QSPI_FLASH)
+__attribute__((section(".boot_hdr.conf")))
+const struct flexspi_nor_config_s g_flash_config =
+{
+  .mem_config =
+  {
+    .tag                    = FLEXSPI_CFG_BLK_TAG,
+    .version                = FLEXSPI_CFG_BLK_VERSION,
+    .read_sample_clksrc     = FLASH_READ_SAMPLE_CLK_LOOPBACK_FROM_DQSPAD,
+    .cs_hold_time           = 3u,
+    .cs_setup_time          = 3u,
+    .column_address_width   = 0u,
+    .device_type            = FLEXSPI_DEVICE_TYPE_SERIAL_NOR,
+    .sflash_pad_type        = SERIAL_FLASH_4PADS,
+    .serial_clk_freq        = FLEXSPI_SERIAL_CLKFREQ_100MHz,
+    .sflash_a1size          = 4u * 1024u * 1024u,
+    .data_valid_time        =
+                              {
+                                16u, 16u
+                              },
+    .lookup_table           =
+    {
+      /* LUTs */
+
+      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),
+    },
+  },
+
+  .page_size                = 256u,
+  .sector_size              = 4u * 1024u,
+  .blocksize                = 64u * 1024u,
+  .is_uniform_blocksize     = false,
+};
+#else
+# error Boot Flash type not chosen!
+#endif
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
diff --git a/boards/arm/imxrt/imxrt1060-evk/src/imxrt_flexspi_nor_flash.h b/boards/arm/imxrt/imxrt1064-evk/src/imxrt_flexspi_nor_flash.h
similarity index 75%
copy from boards/arm/imxrt/imxrt1060-evk/src/imxrt_flexspi_nor_flash.h
copy to boards/arm/imxrt/imxrt1064-evk/src/imxrt_flexspi_nor_flash.h
index ded676e..7d3a809 100644
--- a/boards/arm/imxrt/imxrt1060-evk/src/imxrt_flexspi_nor_flash.h
+++ b/boards/arm/imxrt/imxrt1064-evk/src/imxrt_flexspi_nor_flash.h
@@ -1,25 +1,41 @@
 /****************************************************************************
- * boards/arm/imxrt/imxrt1060-evk/src/imxrt_flexspi_nor_flash.h
+ * boards/arm/imxrt/imxrt1064-evk/src/imxrt_flexspi_nor_flash.h
  *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.  The
- * ASF licenses this file to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the
- * License.  You may obtain a copy of the License at
+ *   Copyright (C) 2018 Gregory Nutt. All rights reserved.
+ *   Authors: Ivan Ucherdzhiev <iv...@gmail.com>
+ *            David Sidrane <da...@nscdg.com>
  *
- *   http://www.apache.org/licenses/LICENSE-2.0
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
- * License for the specific language governing permissions and limitations
- * under the License.
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ *    used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
  *
  ****************************************************************************/
 
-#ifndef __BOARDS_ARM_IMXRT_IMXRT1060_EVK_SRC_IMXRT_FLEXSPI_NOR_FLASH_H
-#define __BOARDS_ARM_IMXRT_IMXRT1060_EVK_SRC_IMXRT_FLEXSPI_NOR_FLASH_H
+#ifndef __BOARDS_ARM_IMXRT_IMXRT1064_EVK_SRC_IMXRT_FLEXSPI_NOR_FLASH_H
+#define __BOARDS_ARM_IMXRT_IMXRT1064_EVK_SRC_IMXRT_FLEXSPI_NOR_FLASH_H
 
 /****************************************************************************
  * Included Files
@@ -142,9 +158,7 @@
 
 #define NOR_CMD_LUT_SEQ_IDX_READSTATUS CMD_LUT_SEQ_IDX_READSTATUS
 
-/* 2  Read status DPI/QPI/OPI sequence id in lookupTable stored in config
- * block
- */
+/* 2  Read status DPI/QPI/OPI sequence id in LUT stored in config block */
 
 #define NOR_CMD_LUT_SEQ_IDX_READSTATUS_XPI 2
 
@@ -152,9 +166,7 @@
 
 #define NOR_CMD_LUT_SEQ_IDX_WRITEENABLE CMD_LUT_SEQ_IDX_WRITEENABLE
 
-/* 4  Write Enable DPI/QPI/OPI sequence id in lookupTable stored in config
- * block
- */
+/* 4  Write Enable DPI/QPI/OPI sequence id in LUT stored in config block */
 
 #define NOR_CMD_LUT_SEQ_IDX_WRITEENABLE_XPI 4
 
@@ -178,15 +190,11 @@
 
 #define NOR_CMD_LUT_SEQ_IDX_READ_SFDP 13
 
-/* 14 Restore 0-4-4/0-8-8 mode sequence id in lookupTable stored in config
- * block
- */
+/* 14 Restore 0-4-4/0-8-8 mode sequence id in LUT stored in config block */
 
 #define NOR_CMD_LUT_SEQ_IDX_RESTORE_NOCMD 14
 
-/* 15 Exit 0-4-4/0-8-8 mode sequence id in lookupTable stored in config
- * blobk
- */
+/* 15 Exit 0-4-4/0-8-8 mode sequence id in LUT stored in config blobk */
 
 #define NOR_CMD_LUT_SEQ_IDX_EXIT_NOCMD 15
 
@@ -224,7 +232,7 @@ enum flash_read_sample_clk_e
   FLASH_READ_SAMPLE_CLK_LOOPBACK_INTERNELLY = 0,
   FLASH_READ_SAMPLE_CLK_LOOPBACK_FROM_DQSPAD = 1,
   FLASH_READ_SAMPLE_CLK_LOOPBACK_FROM_SCKPAD = 2,
-  FLASH_READ_SAMPLE_CLK_EXTERNALINPUT_FROM_DQSPAD = 3,
+  FLASH_READ_SAMPLE_CLK_EXT_INPUT_FROM_DQSPAD = 3,
 };
 
 /*  Misc feature bit definitions */
@@ -336,18 +344,30 @@ struct flexspi_mem_config_s
 
 struct flexspi_nor_config_s
 {
-  struct flexspi_mem_config_s mem_config; /* Common memory configuration info via FlexSPI */
-  uint32_t page_size;                     /* Page size of Serial NOR */
-  uint32_t sector_size;                   /* Sector size of Serial NOR */
-  uint8_t ipcmd_serial_clkfreq;           /* Clock frequency for IP command */
-  uint8_t is_uniform_blocksize;           /* Sector/Block size is the same */
-  uint8_t reserved0[2];                   /* Reserved for future use */
-  uint8_t serial_nor_type;                /* Serial NOR Flash type: 0/1/2/3 */
-  uint8_t need_exit_nocmdmode;            /* Need to exit NoCmd mode before other IP command */
-  uint8_t halfclk_for_nonreadcmd;         /* Half the Serial Clock for non-read command: true/false */
-  uint8_t need_restore_nocmdmode;         /* Need to Restore NoCmd mode after IP command execution */
-  uint32_t blocksize;                     /* Block size */
-  uint32_t reserve2[11];                  /* Reserved for future use */
+  struct flexspi_mem_config_s mem_config; /* Common memory configuration info
+                                           * via FlexSPI
+                                           */
+
+  uint32_t page_size;                  /* Page size of Serial NOR */
+  uint32_t sector_size;                /* Sector size of Serial NOR */
+  uint8_t ipcmd_serial_clkfreq;        /* Clock frequency for IP command */
+  uint8_t is_uniform_blocksize;        /* Sector/Block size is the same */
+  uint8_t reserved0[2];                /* Reserved for future use */
+  uint8_t serial_nor_type;             /* Serial NOR Flash type: 0/1/2/3 */
+  uint8_t need_exit_nocmdmode;         /* Need to exit NoCmd mode before
+                                        * other IP command
+                                        */
+
+  uint8_t halfclk_for_nonreadcmd;      /* Half the Serial Clock for non-read
+                                        * command: true/false
+                                        */
+
+  uint8_t need_restore_nocmdmode;      /* Need to Restore NoCmd mode after IP
+                                        * command execution
+                                        */
+
+  uint32_t blocksize;                  /* Block size */
+  uint32_t reserve2[11];               /* Reserved for future use */
 };
 
-#endif /* __BOARDS_ARM_IMXRT_IMXRT1060_EVK_SRC_IMXRT_FLEXSPI_NOR_FLASH_H */
+#endif /* __BOARDS_ARM_IMXRT_IMXRT1064_EVK_SRC_IMXRT_FLEXSPI_NOR_FLASH_H */
diff --git a/boards/arm/imxrt/imxrt1064-evk/src/imxrt_ft5x06.c b/boards/arm/imxrt/imxrt1064-evk/src/imxrt_ft5x06.c
new file mode 100644
index 0000000..94f13cd
--- /dev/null
+++ b/boards/arm/imxrt/imxrt1064-evk/src/imxrt_ft5x06.c
@@ -0,0 +1,258 @@
+/****************************************************************************
+ * boards/arm/imxrt/imxrt1064-evk/src/imxrt_ft5x06.c
+ *
+ *   Copyright 2019 ElFaro LAB S.L. All rights reserved.
+ *   Author: Fabio Balzano <fa...@elfarolab.com>
+ *
+ * Based on boards/arm/lpc54xx/lpcxpresso-lpc54628/src/lpc54_ft5x06.c
+ *   Copyright (C) 2017 Gregory Nutt. All rights reserved.
+ *   Author: Gregory Nutt <gn...@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ *    used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <syslog.h>
+#include <errno.h>
+
+#include <nuttx/arch.h>
+#include <nuttx/i2c/i2c_master.h>
+#include <nuttx/input/ft5x06.h>
+
+#include "imxrt_config.h"
+#include "imxrt_gpio.h"
+#include "imxrt_lpi2c.h"
+
+#include "imxrt1064-evk.h"
+
+#include <arch/board/board.h>
+
+#ifdef CONFIG_INPUT_FT5X06
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+#define FT5X06_FREQUENCY 400000
+
+/****************************************************************************
+ * Private Function Ptototypes
+ ****************************************************************************/
+
+#ifndef CONFIG_FT5X06_POLLMODE
+static int  imxrt_ft5x06_attach(FAR const struct ft5x06_config_s *config,
+              xcpt_t isr, FAR void *arg);
+static void imxrt_ft5x06_enable(FAR const struct ft5x06_config_s *config,
+              bool enable);
+static void imxrt_ft5x06_clear(FAR const struct ft5x06_config_s *config);
+#endif
+
+static void imxrt_ft5x06_wakeup(FAR const struct ft5x06_config_s *config);
+static void imxrt_ft5x06_nreset(FAR const struct ft5x06_config_s *config,
+              bool state);
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+static const struct ft5x06_config_s g_ft5x06_config =
+{
+  .address   = FT5X06_I2C_ADDRESS,
+  .frequency = FT5X06_FREQUENCY,
+#ifndef CONFIG_FT5X06_POLLMODE
+  .attach    = imxrt_ft5x06_attach,
+  .enable    = imxrt_ft5x06_enable,
+  .clear     = imxrt_ft5x06_clear,
+#endif
+  .wakeup    = imxrt_ft5x06_wakeup,
+  .nreset    = imxrt_ft5x06_nreset
+};
+
+#ifndef CONFIG_FT5X06_POLLMODE
+static uint8_t g_ft5x06_irq;
+#endif
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: imxrt_ft5x06_attach
+ *
+ * Description:
+ *   Attach an FT5X06 interrupt handler to a GPIO interrupt
+ *
+ ****************************************************************************/
+
+#ifndef CONFIG_FT5X06_POLLMODE
+static int imxrt_ft5x06_attach(FAR const struct ft5x06_config_s *config,
+                               xcpt_t isr, FAR void *arg)
+{
+  return irq_attach(g_ft5x06_irq, isr, arg);
+}
+#endif
+
+/****************************************************************************
+ * Name: imxrt_ft5x06_enable
+ *
+ * Description:
+ *   Enable or disable a GPIO interrupt
+ *
+ ****************************************************************************/
+
+#ifndef CONFIG_FT5X06_POLLMODE
+static void imxrt_ft5x06_enable(FAR const struct ft5x06_config_s *config,
+                                bool enable)
+{
+  if (enable)
+    {
+      up_enable_irq(g_ft5x06_irq);
+    }
+  else
+    {
+      up_disable_irq(g_ft5x06_irq);
+    }
+}
+#endif
+
+/****************************************************************************
+ * Name: imxrt_ft5x06_clear
+ *
+ * Description:
+ *   Acknowledge/clear any pending GPIO interrupt
+ *
+ ****************************************************************************/
+
+#ifndef CONFIG_FT5X06_POLLMODE
+static void imxrt_ft5x06_clear(FAR const struct ft5x06_config_s *config)
+{
+  imxrt_gpio_ackedge(g_ft5x06_irq);
+}
+#endif
+
+/****************************************************************************
+ * Name: imxrt_ft5x06_wakeup
+ *
+ * Description:
+ *   Issue WAKE interrupt to FT5X06 to change the FT5X06 from Hibernate to
+ *   Active mode.
+ *
+ ****************************************************************************/
+
+static void imxrt_ft5x06_wakeup(FAR const struct ft5x06_config_s *config)
+{
+  /* We do not have access to the WAKE pin in the implementation */
+}
+
+/****************************************************************************
+ * Name: imxrt_ft5x06_nreset
+ *
+ * Description:
+ *   Control the chip reset pin (active low)
+ *
+ ****************************************************************************/
+
+static void imxrt_ft5x06_nreset(FAR const struct ft5x06_config_s *config,
+                                bool nstate)
+{
+  imxrt_gpio_write(GPIO_FT5X06_CTRST_N, nstate);
+}
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: imxrt_ft5x06_register
+ *
+ * Description:
+ *   Register the FT5X06 touch panel driver
+ *
+ ****************************************************************************/
+
+int imxrt_ft5x06_register(void)
+{
+  FAR struct i2c_master_s *i2c;
+  int ret;
+
+  /* Initialize CTRSTn pin */
+
+  imxrt_config_gpio(GPIO_FT5X06_CTRST_N);
+
+#ifndef CONFIG_FT5X06_POLLMODE
+  int irq;
+
+  /* Initialize GPIO interrupt pin. */
+
+  imxrt_gpio_config(GPIO_FT5X06_INTR);
+  irq = imxrt_gpio_irqno(GPIO_FT5X06_INTR);
+  DEBUGASSERT(irq > 0 && irq < UINT8_MAX);
+  g_ft5x06_irq = (uint8_t)irq;
+
+  /* Make sure that the interrupt is disabled at the NVIC */
+
+  imxrt_gpio_ackedge(irq);
+  up_disable_irq(irq);
+#endif
+
+  /* Take the FT5X06 out of reset */
+
+  imxrt_gpio_write(GPIO_FT5X06_CTRST_N, true);
+
+  /* The FT5X06 is on LPI2C1.  Get the handle and register the F5x06 device */
+
+  i2c = imxrt_i2cbus_initialize(1);
+  if (i2c == NULL)
+    {
+      syslog(LOG_ERR, "ERROR: Failed to get LPI2C1 interface\n");
+      return -ENODEV;
+    }
+  else
+    {
+      ret = ft5x06_register(i2c, &g_ft5x06_config, 0);
+      if (ret < 0)
+        {
+          syslog(LOG_ERR, "ERROR: Failed to register FT5X06 driver: %d\n",
+                 ret);
+
+          imxrt_gpio_write(GPIO_FT5X06_CTRST_N, false);
+          imxrt_i2cbus_uninitialize(i2c);
+          return ret;
+        }
+    }
+
+  return OK;
+}
+
+#endif /* CONFIG_INPUT_FT5X06*/
diff --git a/boards/arm/imxrt/imxrt1064-evk/src/imxrt_gpio.c b/boards/arm/imxrt/imxrt1064-evk/src/imxrt_gpio.c
new file mode 100644
index 0000000..3070925
--- /dev/null
+++ b/boards/arm/imxrt/imxrt1064-evk/src/imxrt_gpio.c
@@ -0,0 +1,236 @@
+/****************************************************************************
+ * boards/arm/imxrt/imxrt1064-evk/src/imxrt_gpio.c
+ *
+ *   Copyright (C) 2017-2018 Gregory Nutt. All rights reserved.
+ *   Copyright (C) 2017 Alan Carvalho de Assis. All rights reserved.
+ *   Author:  Alan Carvalho de Assis <ac...@gmail.com>
+ *
+ * Based on: boards/imxrt1050-evk/src/imxrt_gpio.c
+ *
+ *   Author:  Pavlina Koleva <pa...@gmail.com>
+ *   Modified by: Ivan Ucherdzhiev <iv...@gmail.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ *    used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdbool.h>
+#include <assert.h>
+#include <debug.h>
+
+#include <nuttx/clock.h>
+#include <nuttx/wdog.h>
+#include <nuttx/ioexpander/gpio.h>
+
+#include <arch/board/board.h>
+
+#include "chip.h"
+
+#include <imxrt_gpio.h>
+#include "imxrt1064-evk.h"
+
+#if defined(CONFIG_DEV_GPIO) && !defined(CONFIG_GPIO_LOWER_HALF)
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+struct imxrtgpio_dev_s
+{
+  struct gpio_dev_s gpio;
+  uint8_t id;
+};
+
+/****************************************************************************
+ * Private Function Prototypes
+ ****************************************************************************/
+
+#if BOARD_NGPIOIN > 0
+static int gpin_read(FAR struct gpio_dev_s *dev, FAR bool *value);
+#endif
+
+#if BOARD_NGPIOOUT > 0
+static int gpout_read(FAR struct gpio_dev_s *dev, FAR bool *value);
+static int gpout_write(FAR struct gpio_dev_s *dev, bool value);
+#endif
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+ #if BOARD_NGPIOIN > 0
+static const struct gpio_operations_s gpin_ops =
+{
+  .go_read   = gpin_read,
+  .go_write  = NULL,
+  .go_attach = NULL,
+  .go_enable = NULL,
+};
+
+/* This array maps the GPIO pins used as INPUT */
+
+static const uint32_t g_gpioinputs[BOARD_NGPIOIN] =
+{
+  GPIO_IN1,
+};
+
+static struct imxrtgpio_dev_s g_gpin[BOARD_NGPIOIN];
+#endif
+
+#if BOARD_NGPIOOUT > 0
+
+static const struct gpio_operations_s gpout_ops =
+{
+  .go_read   = gpout_read,
+  .go_write  = gpout_write,
+  .go_attach = NULL,
+  .go_enable = NULL,
+};
+
+/* This array maps the GPIO pins used as OUTPUT */
+
+static const uint32_t g_gpiooutputs[BOARD_NGPIOOUT] =
+{
+  GPIO_GOUT1,
+  GPIO_GOUT2,
+  GPIO_GOUT3,
+  GPIO_GOUT4,
+};
+
+static struct imxrtgpio_dev_s g_gpout[BOARD_NGPIOOUT];
+#endif
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+#if BOARD_NGPIOIN > 0
+static int gpin_read(FAR struct gpio_dev_s *dev, FAR bool *value)
+{
+  FAR struct imxrtgpio_dev_s *imxrtgpio = (FAR struct imxrtgpio_dev_s *)dev;
+
+  DEBUGASSERT(imxrtgpio != NULL && value != NULL);
+  DEBUGASSERT(imxrtgpio->id < BOARD_NGPIOIN);
+  gpioinfo("Reading...\n");
+
+  *value = imxrt_gpio_read(g_gpioinputs[imxrtgpio->id]);
+  return OK;
+}
+#endif
+
+#if BOARD_NGPIOOUT > 0
+static int gpout_read(FAR struct gpio_dev_s *dev, FAR bool *value)
+{
+  FAR struct imxrtgpio_dev_s *imxrtgpio = (FAR struct imxrtgpio_dev_s *)dev;
+
+  DEBUGASSERT(imxrtgpio != NULL && value != NULL);
+  DEBUGASSERT(imxrtgpio->id < BOARD_NGPIOOUT);
+  gpioinfo("Reading...\n");
+
+  *value = imxrt_gpio_read(g_gpiooutputs[imxrtgpio->id]);
+  return OK;
+}
+
+static int gpout_write(FAR struct gpio_dev_s *dev, bool value)
+{
+  FAR struct imxrtgpio_dev_s *imxrtgpio = (FAR struct imxrtgpio_dev_s *)dev;
+
+  DEBUGASSERT(imxrtgpio != NULL);
+  DEBUGASSERT(imxrtgpio->id < BOARD_NGPIOOUT);
+  gpioinfo("Writing %d\n", (int)value);
+
+  imxrt_gpio_write(g_gpiooutputs[imxrtgpio->id], value);
+  return OK;
+}
+#endif
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: imxrt_gpio_initialize
+ *
+ * Description:
+ *   Initialize GPIO drivers for use with /apps/examples/gpio
+ *
+ ****************************************************************************/
+
+int imxrt_gpio_initialize(void)
+{
+  int pincount = 0;
+  int i;
+
+#if BOARD_NGPIOIN > 0
+  for (i = 0; i < BOARD_NGPIOIN; i++)
+    {
+      /* Setup and register the GPIO pin */
+
+      g_gpin[i].gpio.gp_pintype = GPIO_INPUT_PIN;
+      g_gpin[i].gpio.gp_ops     = &gpin_ops;
+      g_gpin[i].id              = i;
+
+      gpio_pin_register(&g_gpin[i].gpio, pincount);
+
+      /* Configure the pin that will be used as input */
+
+      imxrt_config_gpio(g_gpioinputs[i]);
+
+      pincount++;
+    }
+#endif
+
+#if BOARD_NGPIOOUT > 0
+  for (i = 0; i < BOARD_NGPIOOUT; i++)
+    {
+      /* Setup and register the GPIO pin */
+
+      g_gpout[i].gpio.gp_pintype = GPIO_OUTPUT_PIN;
+      g_gpout[i].gpio.gp_ops     = &gpout_ops;
+      g_gpout[i].id              = i;
+
+      gpio_pin_register(&g_gpout[i].gpio, pincount);
+
+      /* Configure the pin that will be used as output */
+
+      imxrt_gpio_write(g_gpiooutputs[i], 0);
+      imxrt_config_gpio(g_gpiooutputs[i]);
+
+      pincount++;
+    }
+#endif
+
+  return 0;
+}
+#endif /* CONFIG_DEV_GPIO && !CONFIG_GPIO_LOWER_HALF */
diff --git a/boards/arm/imxrt/imxrt1064-evk/src/imxrt_lcd.c b/boards/arm/imxrt/imxrt1064-evk/src/imxrt_lcd.c
new file mode 100644
index 0000000..a1dea3a
--- /dev/null
+++ b/boards/arm/imxrt/imxrt1064-evk/src/imxrt_lcd.c
@@ -0,0 +1,108 @@
+/****************************************************************************
+ * boards/arm/imxrt/imxrt1064-evk/src/imxrt_lcd.c
+ *
+ *   Copyright (C) 2019 Gregory Nutt. All rights reserved.
+ *   Author: Gregory Nutt <gn...@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ *    used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdbool.h>
+#include <debug.h>
+
+#include "imxrt_lcd.h"
+#include "imxrt_gpio.h"
+
+#include "imxrt1064-evk.h"
+
+#include <arch/board/board.h>
+
+#ifdef CONFIG_IMXRT_LCD
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: imxrt_lcd_bkl_pin_setup
+ *
+ * Description:
+ *   Setup backlight pin (initially off)
+ *
+ ****************************************************************************/
+
+void imxrt_lcd_pkl_pin_setup(void)
+{
+  imxrt_config_gpio(GPIO_LCD_BL);
+}
+
+/****************************************************************************
+ * Name: imxrt_backlight
+ *
+ * Description:
+ *   If CONFIG_IMXRT_LCD_BACKLIGHT is defined, then the board-specific
+ *   logic must provide this interface to turn the backlight on and off.
+ *
+ ****************************************************************************/
+
+#ifdef CONFIG_IMXRT_LCD_BACKLIGHT
+void imxrt_backlight(bool blon)
+{
+  imxrt_gpio_write(GPIO_LCD_BL, blon); /* High illuminates */
+}
+#endif
+
+/****************************************************************************
+ * Name: imxrt_lcd_initialize
+ *
+ * Description:
+ *   Initialization of the LCD blackligt and pin for the imxrt_bringup().
+ *
+ ****************************************************************************/
+
+void imxrt_lcd_initialize(void)
+{
+  /* Setup the backlight pin */
+
+  imxrt_lcd_pkl_pin_setup();
+
+#ifdef CONFIG_IMXRT_LCD_BACKLIGHT
+  /* Turn ON the backlight */
+
+  imxrt_backlight(true);
+#endif
+}
+
+#endif /* CONFIG_IMXRT_LCD */
diff --git a/boards/arm/imxrt/imxrt1064-evk/src/imxrt_mmcsd_spi.c b/boards/arm/imxrt/imxrt1064-evk/src/imxrt_mmcsd_spi.c
new file mode 100644
index 0000000..a41400a
--- /dev/null
+++ b/boards/arm/imxrt/imxrt1064-evk/src/imxrt_mmcsd_spi.c
@@ -0,0 +1,138 @@
+/****************************************************************************
+ * boards/arm/imxrt/imxrt1064-evk/src/imxrt_mmcsd_spi.c
+ *
+ *   Copyright (C) 2018 Greg Nutt. All rights reserved.
+ *   Author: ivan Ucherdzhiev <iv...@gmail.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ *    used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <debug.h>
+#include <nuttx/config.h>
+#include <nuttx/mmcsd.h>
+#include <stdint.h>
+#include <stdbool.h>
+
+#include <nuttx/spi/spi.h>
+#include <arch/board/board.h>
+
+#include "arm_arch.h"
+#include "chip.h"
+#include "imxrt_lpspi.h"
+
+#ifdef CONFIG_MMCSD_SPI
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+#ifndef CONFIG_IMXRT_LPSPI1
+#  error "SD driver requires CONFIG_IMXRT_LPSPI1 to be enabled"
+#endif
+
+#ifdef CONFIG_DISABLE_MOUNTPOINT
+#  error "SD driver requires CONFIG_DISABLE_MOUNTPOINT to be disabled"
+#endif
+
+/****************************************************************************
+ * Private Definitions
+ ****************************************************************************/
+
+static const int SD_SPI_PORT = CONFIG_NSH_MMCSDSPIPORTNO; /* SD is connected
+                                                           * to SPI1 port
+                                                           */
+
+static const int SD_SLOT_NO  = 0; /* There is only one SD slot */
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/* NOTE:  We are using a SDCard adapter/module without Card Detect pin!
+ * Then we don't need to Card Detect callback here.
+ */
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: imxrt_spi1register
+ *
+ * Description:
+ *   Registers media change callback
+ ****************************************************************************/
+
+#ifdef CONFIG_IMXRT_LPSPI1
+int imxrt_lpspi1register(struct spi_dev_s *dev, spi_mediachange_t callback,
+                       void *arg)
+{
+  spiinfo("INFO: Registering spi1 device\n");
+  return OK;
+}
+#endif
+
+/****************************************************************************
+ * Name: imxrt_mmcsd_spi_initialize
+ *
+ * Description:
+ *   Initialize SPI-based SD card and card detect thread.
+ *
+ ****************************************************************************/
+
+int imxrt_mmcsd_spi_initialize(int minor)
+{
+  struct spi_dev_s *spi;
+  int rv;
+
+  mcinfo("INFO: Initializing mmcsd card\n");
+
+  spi = imxrt_lpspibus_initialize(SD_SPI_PORT);
+  if (spi == NULL)
+    {
+      mcerr("ERROR: Failed to initialize SPI port %d\n", SD_SPI_PORT);
+      return -ENODEV;
+    }
+
+  rv = mmcsd_spislotinitialize(minor, SD_SLOT_NO, spi);
+  if (rv < 0)
+    {
+      mcerr("ERROR: Failed to bind SPI port %d to SD slot %d\n",
+            SD_SPI_PORT, SD_SLOT_NO);
+      return rv;
+    }
+
+  spiinfo("INFO: mmcsd card has been initialized successfully\n");
+  return OK;
+}
+
+#endif /* CONFIG_MMCSD_SPI */
diff --git a/boards/arm/imxrt/imxrt1064-evk/src/imxrt_sdram_ini_dcd.c b/boards/arm/imxrt/imxrt1064-evk/src/imxrt_sdram_ini_dcd.c
new file mode 100644
index 0000000..a9d1e9d
--- /dev/null
+++ b/boards/arm/imxrt/imxrt1064-evk/src/imxrt_sdram_ini_dcd.c
@@ -0,0 +1,1326 @@
+/****************************************************************************
+ * boards/arm/imxrt/imxrt1064-evk/src/imxrt_sdram_ini_dcd.c
+ *
+ *   Copyright (C) 2017, NXP Semiconductors, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ *    used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include "imxrt_flexspi_nor_boot.h"
+
+__attribute__((section(".boot_hdr.dcd_data")))
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+const uint8_t g_dcd_data[] =
+{
+  /* 0000 */
+
+  DCD_TAG_HEADER,
+  0x04,
+  0x30,
+  0x41,
+  0xcc,
+  0x03,
+  0xac,
+  0x04,
+  0x40,
+  0x0f,
+  0xc0,
+  0x68,
+  0xff,
+  0xff,
+  0xff,
+  0xff,
+
+  /* 0010 */
+
+  0x40,
+  0x0f,
+  0xc0,
+  0x6c,
+  0xff,
+  0xff,
+  0xff,
+  0xff,
+  0x40,
+  0x0f,
+  0xc0,
+  0x70,
+  0xff,
+  0xff,
+  0xff,
+  0xff,
+
+  /* 0020 */
+
+  0x40,
+  0x0f,
+  0xc0,
+  0x74,
+  0xff,
+  0xff,
+  0xff,
+  0xff,
+  0x40,
+  0x0f,
+  0xc0,
+  0x78,
+  0xff,
+  0xff,
+  0xff,
+  0xff,
+
+  /* 0030 */
+
+  0x40,
+  0x0f,
+  0xc0,
+  0x7c,
+  0xff,
+  0xff,
+  0xff,
+  0xff,
+  0x40,
+  0x0f,
+  0xc0,
+  0x80,
+  0xff,
+  0xff,
+  0xff,
+  0xff,
+
+  /* 0040 */
+
+  0x40,
+  0x0d,
+  0x80,
+  0x30,
+  0x00,
+  0x00,
+  0x20,
+  0x01,
+  0x40,
+  0x0d,
+  0x81,
+  0x00,
+  0x00,
+  0x1d,
+  0x00,
+  0x00,
+
+  /* 0050 */
+
+  0x40,
+  0x0f,
+  0xc0,
+  0x14,
+  0x00,
+  0x01,
+  0x0d,
+  0x40,
+  0x40,
+  0x1f,
+  0x80,
+  0x14,
+  0x00,
+  0x00,
+  0x00,
+  0x00,
+
+  /* 0060 */
+
+  0x40,
+  0x1f,
+  0x80,
+  0x18,
+  0x00,
+  0x00,
+  0x00,
+  0x00,
+  0x40,
+  0x1f,
+  0x80,
+  0x1c,
+  0x00,
+  0x00,
+  0x00,
+  0x00,
+
+  /* 0070 */
+
+  0x40,
+  0x1f,
+  0x80,
+  0x20,
+  0x00,
+  0x00,
+  0x00,
+  0x00,
+  0x40,
+  0x1f,
+  0x80,
+  0x24,
+  0x00,
+  0x00,
+  0x00,
+  0x00,
+
+  /* 0080 */
+
+  0x40,
+  0x1f,
+  0x80,
+  0x28,
+  0x00,
+  0x00,
+  0x00,
+  0x00,
+  0x40,
+  0x1f,
+  0x80,
+  0x2c,
+  0x00,
+  0x00,
+  0x00,
+  0x00,
+
+  /* 0090 */
+
+  0x40,
+  0x1f,
+  0x80,
+  0x30,
+  0x00,
+  0x00,
+  0x00,
+  0x00,
+  0x40,
+  0x1f,
+  0x80,
+  0x34,
+  0x00,
+  0x00,
+  0x00,
+  0x00,
+
+  /* 00a0 */
+
+  0x40,
+  0x1f,
+  0x80,
+  0x38,
+  0x00,
+  0x00,
+  0x00,
+  0x00,
+  0x40,
+  0x1f,
+  0x80,
+  0x3c,
+  0x00,
+  0x00,
+  0x00,
+  0x00,
+
+  /* 00b0 */
+
+  0x40,
+  0x1f,
+  0x80,
+  0x40,
+  0x00,
+  0x00,
+  0x00,
+  0x00,
+  0x40,
+  0x1f,
+  0x80,
+  0x44,
+  0x00,
+  0x00,
+  0x00,
+  0x00,
+
+  /* 00c0 */
+
+  0x40,
+  0x1f,
+  0x80,
+  0x48,
+  0x00,
+  0x00,
+  0x00,
+  0x00,
+  0x40,
+  0x1f,
+  0x80,
+  0x4c,
+  0x00,
+  0x00,
+  0x00,
+  0x00,
+
+  /* 00d0 */
+
+  0x40,
+  0x1f,
+  0x80,
+  0x50,
+  0x00,
+  0x00,
+  0x00,
+  0x00,
+  0x40,
+  0x1f,
+  0x80,
+  0x54,
+  0x00,
+  0x00,
+  0x00,
+  0x00,
+
+  /* 00e0 */
+
+  0x40,
+  0x1f,
+  0x80,
+  0x58,
+  0x00,
+  0x00,
+  0x00,
+  0x00,
+  0x40,
+  0x1f,
+  0x80,
+  0x5c,
+  0x00,
+  0x00,
+  0x00,
+  0x00,
+
+  /* 00f0 */
+
+  0x40,
+  0x1f,
+  0x80,
+  0x60,
+  0x00,
+  0x00,
+  0x00,
+  0x00,
+  0x40,
+  0x1f,
+  0x80,
+  0x64,
+  0x00,
+  0x00,
+  0x00,
+  0x00,
+
+  /* 0100 */
+
+  0x40,
+  0x1f,
+  0x80,
+  0x68,
+  0x00,
+  0x00,
+  0x00,
+  0x00,
+  0x40,
+  0x1f,
+  0x80,
+  0x6c,
+  0x00,
+  0x00,
+  0x00,
+  0x00,
+
+  /* 0110 */
+
+  0x40,
+  0x1f,
+  0x80,
+  0x70,
+  0x00,
+  0x00,
+  0x00,
+  0x00,
+  0x40,
+  0x1f,
+  0x80,
+  0x74,
+  0x00,
+  0x00,
+  0x00,
+  0x00,
+
+  /* 0120 */
+
+  0x40,
+  0x1f,
+  0x80,
+  0x78,
+  0x00,
+  0x00,
+  0x00,
+  0x00,
+  0x40,
+  0x1f,
+  0x80,
+  0x7c,
+  0x00,
+  0x00,
+  0x00,
+  0x00,
+
+  /* 0130 */
+
+  0x40,
+  0x1f,
+  0x80,
+  0x80,
+  0x00,
+  0x00,
+  0x00,
+  0x00,
+  0x40,
+  0x1f,
+  0x80,
+  0x84,
+  0x00,
+  0x00,
+  0x00,
+  0x00,
+
+  /* 0140 */
+
+  0x40,
+  0x1f,
+  0x80,
+  0x88,
+  0x00,
+  0x00,
+  0x00,
+  0x00,
+  0x40,
+  0x1f,
+  0x80,
+  0x8c,
+  0x00,
+  0x00,
+  0x00,
+  0x00,
+
+  /* 0150 */
+
+  0x40,
+  0x1f,
+  0x80,
+  0x90,
+  0x00,
+  0x00,
+  0x00,
+  0x00,
+  0x40,
+  0x1f,
+  0x80,
+  0x94,
+  0x00,
+  0x00,
+  0x00,
+  0x00,
+
+  /* 0160 */
+
+  0x40,
+  0x1f,
+  0x80,
+  0x98,
+  0x00,
+  0x00,
+  0x00,
+  0x00,
+  0x40,
+  0x1f,
+  0x80,
+  0x9c,
+  0x00,
+  0x00,
+  0x00,
+  0x00,
+
+  /* 0170 */
+
+  0x40,
+  0x1f,
+  0x80,
+  0xa0,
+  0x00,
+  0x00,
+  0x00,
+  0x00,
+  0x40,
+  0x1f,
+  0x80,
+  0xa4,
+  0x00,
+  0x00,
+  0x00,
+  0x00,
+
+  /* 0180 */
+
+  0x40,
+  0x1f,
+  0x80,
+  0xa8,
+  0x00,
+  0x00,
+  0x00,
+  0x00,
+  0x40,
+  0x1f,
+  0x80,
+  0xac,
+  0x00,
+  0x00,
+  0x00,
+  0x00,
+
+  /* 0190 */
+
+  0x40,
+  0x1f,
+  0x80,
+  0xb0,
+  0x00,
+  0x00,
+  0x00,
+  0x10,
+  0x40,
+  0x1f,
+  0x80,
+  0xb4,
+  0x00,
+  0x00,
+  0x00,
+  0x00,
+
+  /* 01a0 */
+
+  0x40,
+  0x1f,
+  0x80,
+  0xb8,
+  0x00,
+  0x00,
+  0x00,
+  0x00,
+  0x40,
+  0x1f,
+  0x82,
+  0x04,
+  0x00,
+  0x01,
+  0x10,
+  0xf9,
+
+  /* 01b0 */
+
+  0x40,
+  0x1f,
+  0x82,
+  0x08,
+  0x00,
+  0x01,
+  0x10,
+  0xf9,
+  0x40,
+  0x1f,
+  0x82,
+  0x0c,
+  0x00,
+  0x01,
+  0x10,
+  0xf9,
+
+  /* 01c0 */
+
+  0x40,
+  0x1f,
+  0x82,
+  0x10,
+  0x00,
+  0x01,
+  0x10,
+  0xf9,
+  0x40,
+  0x1f,
+  0x82,
+  0x14,
+  0x00,
+  0x01,
+  0x10,
+  0xf9,
+
+  /* 01d0 */
+
+  0x40,
+  0x1f,
+  0x82,
+  0x18,
+  0x00,
+  0x01,
+  0x10,
+  0xf9,
+  0x40,
+  0x1f,
+  0x82,
+  0x1c,
+  0x00,
+  0x01,
+  0x10,
+  0xf9,
+
+  /* 01e0 */
+
+  0x40,
+  0x1f,
+  0x82,
+  0x20,
+  0x00,
+  0x01,
+  0x10,
+  0xf9,
+  0x40,
+  0x1f,
+  0x82,
+  0x24,
+  0x00,
+  0x01,
+  0x10,
+  0xf9,
+
+  /* 01f0 */
+
+  0x40,
+  0x1f,
+  0x82,
+  0x28,
+  0x00,
+  0x01,
+  0x10,
+  0xf9,
+  0x40,
+  0x1f,
+  0x82,
+  0x2c,
+  0x00,
+  0x01,
+  0x10,
+  0xf9,
+
+  /* 0200 */
+
+  0x40,
+  0x1f,
+  0x82,
+  0x30,
+  0x00,
+  0x01,
+  0x10,
+  0xf9,
+  0x40,
+  0x1f,
+  0x82,
+  0x34,
+  0x00,
+  0x01,
+  0x10,
+  0xf9,
+
+  /* 0210 */
+
+  0x40,
+  0x1f,
+  0x82,
+  0x38,
+  0x00,
+  0x01,
+  0x10,
+  0xf9,
+  0x40,
+  0x1f,
+  0x82,
+  0x3c,
+  0x00,
+  0x01,
+  0x10,
+  0xf9,
+
+  /* 0220 */
+
+  0x40,
+  0x1f,
+  0x82,
+  0x40,
+  0x00,
+  0x01,
+  0x10,
+  0xf9,
+  0x40,
+  0x1f,
+  0x82,
+  0x44,
+  0x00,
+  0x01,
+  0x10,
+  0xf9,
+
+  /* 0230 */
+
+  0x40,
+  0x1f,
+  0x82,
+  0x48,
+  0x00,
+  0x01,
+  0x10,
+  0xf9,
+  0x40,
+  0x1f,
+  0x82,
+  0x4c,
+  0x00,
+  0x01,
+  0x10,
+  0xf9,
+
+  /* 0240 */
+
+  0x40,
+  0x1f,
+  0x82,
+  0x50,
+  0x00,
+  0x01,
+  0x10,
+  0xf9,
+  0x40,
+  0x1f,
+  0x82,
+  0x54,
+  0x00,
+  0x01,
+  0x10,
+  0xf9,
+
+  /* 0250 */
+
+  0x40,
+  0x1f,
+  0x82,
+  0x58,
+  0x00,
+  0x01,
+  0x10,
+  0xf9,
+  0x40,
+  0x1f,
+  0x82,
+  0x5c,
+  0x00,
+  0x01,
+  0x10,
+  0xf9,
+
+  /* 0260 */
+
+  0x40,
+  0x1f,
+  0x82,
+  0x60,
+  0x00,
+  0x01,
+  0x10,
+  0xf9,
+  0x40,
+  0x1f,
+  0x82,
+  0x64,
+  0x00,
+  0x01,
+  0x10,
+  0xf9,
+
+  /* 0270 */
+
+  0x40,
+  0x1f,
+  0x82,
+  0x68,
+  0x00,
+  0x01,
+  0x10,
+  0xf9,
+  0x40,
+  0x1f,
+  0x82,
+  0x6c,
+  0x00,
+  0x01,
+  0x10,
+  0xf9,
+
+  /* 0280 */
+
+  0x40,
+  0x1f,
+  0x82,
+  0x70,
+  0x00,
+  0x01,
+  0x10,
+  0xf9,
+  0x40,
+  0x1f,
+  0x82,
+  0x74,
+  0x00,
+  0x01,
+  0x10,
+  0xf9,
+
+  /* 0290 */
+
+  0x40,
+  0x1f,
+  0x82,
+  0x78,
+  0x00,
+  0x01,
+  0x10,
+  0xf9,
+  0x40,
+  0x1f,
+  0x82,
+  0x7c,
+  0x00,
+  0x01,
+  0x10,
+  0xf9,
+
+  /* 02a0 */
+
+  0x40,
+  0x1f,
+  0x82,
+  0x80,
+  0x00,
+  0x01,
+  0x10,
+  0xf9,
+  0x40,
+  0x1f,
+  0x82,
+  0x84,
+  0x00,
+  0x01,
+  0x10,
+  0xf9,
+
+  /* 02b0 */
+
+  0x40,
+  0x1f,
+  0x82,
+  0x88,
+  0x00,
+  0x01,
+  0x10,
+  0xf9,
+  0x40,
+  0x1f,
+  0x82,
+  0x8c,
+  0x00,
+  0x01,
+  0x10,
+  0xf9,
+
+  /* 02c0 */
+
+  0x40,
+  0x1f,
+  0x82,
+  0x90,
+  0x00,
+  0x01,
+  0x10,
+  0xf9,
+  0x40,
+  0x1f,
+  0x82,
+  0x94,
+  0x00,
+  0x01,
+  0x10,
+  0xf9,
+
+  /* 02d0 */
+
+  0x40,
+  0x1f,
+  0x82,
+  0x98,
+  0x00,
+  0x01,
+  0x10,
+  0xf9,
+  0x40,
+  0x1f,
+  0x82,
+  0x9c,
+  0x00,
+  0x01,
+  0x10,
+  0xf9,
+
+  /* 02e0 */
+
+  0x40,
+  0x1f,
+  0x82,
+  0xa0,
+  0x00,
+  0x01,
+  0x10,
+  0xf9,
+  0x40,
+  0x1f,
+  0x82,
+  0xa4,
+  0x00,
+  0x01,
+  0x10,
+  0xf9,
+
+  /* 02f0 */
+
+  0x40,
+  0x1f,
+  0x82,
+  0xa8,
+  0x00,
+  0x01,
+  0x10,
+  0xf9,
+  0x40,
+  0x2f,
+  0x00,
+  0x00,
+  0x10,
+  0x00,
+  0x00,
+  0x04,
+
+  /* 0300 */
+
+  0x40,
+  0x2f,
+  0x00,
+  0x08,
+  0x00,
+  0x03,
+  0x05,
+  0x24,
+  0x40,
+  0x2f,
+  0x00,
+  0x0c,
+  0x06,
+  0x03,
+  0x05,
+  0x24,
+
+  /* 0310 */
+
+  0x40,
+  0x2f,
+  0x00,
+  0x10,
+  0x80,
+  0x00,
+  0x00,
+  0x1b,
+  0x40,
+  0x2f,
+  0x00,
+  0x14,
+  0x82,
+  0x00,
+  0x00,
+  0x1b,
+
+  /* 0320 */
+
+  0x40,
+  0x2f,
+  0x00,
+  0x18,
+  0x84,
+  0x00,
+  0x00,
+  0x1b,
+  0x40,
+  0x2f,
+  0x00,
+  0x1c,
+  0x86,
+  0x00,
+  0x00,
+  0x1b,
+
+  /* 0330 */
+
+  0x40,
+  0x2f,
+  0x00,
+  0x20,
+  0x90,
+  0x00,
+  0x00,
+  0x21,
+  0x40,
+  0x2f,
+  0x00,
+  0x24,
+  0xa0,
+  0x00,
+  0x00,
+  0x19,
+
+  /*  0340 */
+
+  0x40,
+  0x2f,
+  0x00,
+  0x28,
+  0xa8,
+  0x00,
+  0x00,
+  0x17,
+  0x40,
+  0x2f,
+  0x00,
+  0x2c,
+  0xa9,
+  0x00,
+  0x00,
+  0x1b,
+
+  /*  0350 */
+
+  0x40,
+  0x2f,
+  0x00,
+  0x30,
+  0x00,
+  0x00,
+  0x00,
+  0x21,
+  0x40,
+  0x2f,
+  0x00,
+  0x04,
+  0x00,
+  0x00,
+  0x79,
+  0xa8,
+
+  /* 0360  */
+
+  0x40,
+  0x2f,
+  0x00,
+  0x40,
+  0x00,
+  0x00,
+  0x0f,
+  0x31,
+  0x40,
+  0x2f,
+  0x00,
+  0x44,
+  0x00,
+  0x65,
+  0x29,
+  0x22,
+
+  /* 0370  */
+
+  0x40,
+  0x2f,
+  0x00,
+  0x48,
+  0x00,
+  0x01,
+  0x09,
+  0x20,
+  0x40,
+  0x2f,
+  0x00,
+  0x4c,
+  0x50,
+  0x21,
+  0x0a,
+  0x08,
+
+  /* 0380  */
+
+  0x40,
+  0x2f,
+  0x00,
+  0x80,
+  0x00,
+  0x00,
+  0x00,
+  0x21,
+  0x40,
+  0x2f,
+  0x00,
+  0x84,
+  0x00,
+  0x88,
+  0x88,
+  0x88,
+
+  /* 0390  */
+
+  0x40,
+  0x2f,
+  0x00,
+  0x94,
+  0x00,
+  0x00,
+  0x00,
+  0x02,
+  0x40,
+  0x2f,
+  0x00,
+  0x98,
+  0x00,
+  0x00,
+  0x00,
+  0x00,
+
+  /* 03a0  */
+
+  0x40,
+  0x2f,
+  0x00,
+  0x90,
+  0x80,
+  0x00,
+  0x00,
+  0x00,
+  0x40,
+  0x2f,
+  0x00,
+  0x9c,
+  0xa5,
+  0x5a,
+  0x00,
+  0x0f,
+
+  /* 03b0 */
+
+  0xcf,
+  0x00,
+  0x0c,
+  0x1c,
+  0x40,
+  0x2f,
+  0x00,
+  0x3c,
+  0x00,
+  0x00,
+  0x00,
+  0x01,
+  0xcc,
+  0x00,
+  0x14,
+  0x04,
+
+  /* 03c0 */
+
+  0x40,
+  0x2f,
+  0x00,
+  0x90,
+  0x80,
+  0x00,
+  0x00,
+  0x00,
+  0x40,
+  0x2f,
+  0x00,
+  0x9c,
+  0xa5,
+  0x5a,
+  0x00,
+  0x0c,
+
+  /* 03d0 */
+
+  0xcf,
+  0x00,
+  0x0c,
+  0x1c,
+  0x40,
+  0x2f,
+  0x00,
+  0x3c,
+  0x00,
+  0x00,
+  0x00,
+  0x01,
+  0xcc,
+  0x00,
+  0x14,
+  0x04,
+
+  /* 03e0 */
+
+  0x40,
+  0x2f,
+  0x00,
+  0x90,
+  0x80,
+  0x00,
+  0x00,
+  0x00,
+  0x40,
+  0x2f,
+  0x00,
+  0x9c,
+  0xa5,
+  0x5a,
+  0x00,
+  0x0c,
+
+  /* 03f0 */
+
+  0xcf,
+  0x00,
+  0x0c,
+  0x1c,
+  0x40,
+  0x2f,
+  0x00,
+  0x3c,
+  0x00,
+  0x00,
+  0x00,
+  0x01,
+  0xcc,
+  0x00,
+  0x1c,
+  0x04,
+
+  /* 0400 */
+
+  0x40,
+  0x2f,
+  0x00,
+  0xa0,
+  0x00,
+  0x00,
+  0x00,
+  0x33,
+  0x40,
+  0x2f,
+  0x00,
+  0x90,
+  0x80,
+  0x00,
+  0x00,
+  0x00,
+
+  /* 0410 */
+
+  0x40,
+  0x2f,
+  0x00,
+  0x9c,
+  0xa5,
+  0x5a,
+  0x00,
+  0x0a,
+  0xcf,
+  0x00,
+  0x0c,
+  0x1c,
+  0x40,
+  0x2f,
+  0x00,
+  0x3c,
+
+  /* 0420 */
+
+  0x00,
+  0x00,
+  0x00,
+  0x01,
+  0xcc,
+  0x00,
+  0x0c,
+  0x04,
+  0x40,
+  0x2f,
+  0x00,
+  0x4c,
+  0x50,
+  0x21,
+  0x0a,
+  0x09,
+};
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/* None */
diff --git a/boards/arm/imxrt/imxrt1064-evk/src/imxrt_spi.c b/boards/arm/imxrt/imxrt1064-evk/src/imxrt_spi.c
new file mode 100644
index 0000000..24365c4
--- /dev/null
+++ b/boards/arm/imxrt/imxrt1064-evk/src/imxrt_spi.c
@@ -0,0 +1,229 @@
+/****************************************************************************
+ * boards/arm/imxrt/imxrt1064-evk/src/imxrt_spi.c
+ *
+ *   Copyright (C) 2018 Gregory Nutt. All rights reserved.
+ *   Authors: Ivan Ucherdzhiev <iv...@gmail.com>
+ *            David Sidrane <da...@nscdg.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ *    used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdint.h>
+#include <stdbool.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/spi/spi.h>
+#include <arch/board/board.h>
+
+#include "arm_arch.h"
+
+#include "imxrt_config.h"
+#include "imxrt_lpspi.h"
+#include "imxrt_gpio.h"
+#include "imxrt1064-evk.h"
+
+#if defined(CONFIG_IMXRT_LPSPI1) || defined(CONFIG_IMXRT_LPSPI2) || \
+    defined(CONFIG_IMXRT_LPSPI3) || defined(CONFIG_IMXRT_LPSPI4)
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: imxrt_spidev_initialize
+ *
+ * Description:
+ *   Called to configure SPI chip select GPIO pins for the imxrt1060-evk
+ *   board.
+ *
+ ****************************************************************************/
+
+void weak_function imxrt_spidev_initialize(void)
+{
+#ifdef CONFIG_IMXRT_LPSPI1
+  imxrt_config_gpio(GPIO_LPSPI1_CS); /* LPSPI1 chip select */
+  imxrt_config_gpio(GPIO_MMCSD_EN);
+#endif
+#ifdef CONFIG_IMXRT_LPSPI3
+  imxrt_config_gpio(GPIO_LPSPI3_CS); /* LPSPI3 chip select */
+#endif
+}
+
+/****************************************************************************
+ * Name:  imxrt_lpspi1/2/3select and imxrt_lpspi1/2/3status
+ *
+ * Description:
+ *  The external functions, imxrt_lpspi1/2/3select and imxrt_lpspi1/2/3status
+ *  must be provided by board-specific logic.
+ *  They are implementations of the select and status methods of the SPI
+ *  interface defined by struct spi_ops_s (see include/nuttx/spi/spi.h).
+ *  All other methods (including imxrt_lpspibus_initialize())
+ *  are provided by common STM32 logic.
+ *  To use this common SPI logic on your board:
+ *
+ *   1. Provide logic in imxrt_boardinitialize() to configure SPI chip select
+ *      pins.
+ *   2. Provide imxrt_lpspi1/2/3select() and imxrt_lpspi1/2/3status()
+ *      functions in your board-specific logic.
+ *      These functions will perform chip selection and status operations
+ *      using GPIOs in the way your board is configured.
+ *   3. Add a calls to imxrt_lpspibus_initialize() in your low level
+ *      application initialization logic
+ *   4. The handle returned by imxrt_lpspibus_initialize() may then be used
+ *      to bind the SPI driver to higher level logic (e.g., calling
+ *      mmcsd_spislotinitialize(), for example, will bind the SPI driver to
+ *      the SPI MMC/SD driver).
+ *
+ ****************************************************************************/
+
+#ifdef CONFIG_IMXRT_LPSPI1
+void imxrt_lpspi1select(FAR struct spi_dev_s *dev, uint32_t devid,
+                        bool selected)
+{
+  spiinfo("devid: %d CS: %s\n", (int)devid,
+          selected ? "assert" : "de-assert");
+
+  imxrt_gpio_write(GPIO_LPSPI1_CS, !selected);
+}
+
+uint8_t imxrt_lpspi1status(FAR struct spi_dev_s *dev, uint32_t devid)
+{
+  return 0;
+}
+#endif
+
+#ifdef CONFIG_IMXRT_LPSPI2
+void imxrt_lpspi2select(FAR struct spi_dev_s *dev, uint32_t devid,
+                        bool selected)
+{
+  spiinfo("devid: %d CS: %s\n", (int)devid,
+          selected ? "assert" : "de-assert");
+
+  imxrt_gpio_write(GPIO_LPSPI2_CS, !selected);
+}
+
+uint8_t imxrt_lpspi2status(FAR struct spi_dev_s *dev, uint32_t devid)
+{
+  return 0;
+}
+#endif
+
+#ifdef CONFIG_IMXRT_LPSPI3
+void imxrt_lpspi3select(FAR struct spi_dev_s *dev, uint32_t devid,
+                        bool selected)
+{
+  spiinfo("devid: %d CS: %s\n", (int)devid,
+          selected ? "assert" : "de-assert");
+
+  imxrt_gpio_write(GPIO_LPSPI3_CS, !selected);
+}
+
+uint8_t imxrt_lpspi3status(FAR struct spi_dev_s *dev, uint32_t devid)
+{
+  return 0;
+}
+#endif
+
+#ifdef CONFIG_IMXRT_LPSPI4
+void imxrt_lpspi4select(FAR struct spi_dev_s *dev, uint32_t devid,
+                        bool selected)
+{
+  spiinfo("devid: %d CS: %s\n", (int)devid,
+          selected ? "assert" : "de-assert");
+
+  imxrt_gpio_write(GPIO_LPSPI4_CS, !selected);
+}
+
+uint8_t imxrt_lpspi4status(FAR struct spi_dev_s *dev, uint32_t devid)
+{
+  return 0;
+}
+#endif
+
+/****************************************************************************
+ * Name: imxrt_lpspi1cmddata
+ *
+ * Description:
+ *   Set or clear the SH1101A A0 or SD1306 D/C n bit to select data (true)
+ *   or command (false). This function must be provided by platform-specific
+ *   logic. This is an implementation of the cmddata method of the SPI
+ *   interface defined by struct spi_ops_s (see include/nuttx/spi/spi.h).
+ *
+ * Input Parameters:
+ *
+ *   spi - SPI device that controls the bus the device that requires the CMD/
+ *         DATA selection.
+ *   devid - If there are multiple devices on the bus, this selects which one
+ *         to select cmd or data.  NOTE:  This design restricts, for example,
+ *         one one SPI display per SPI bus.
+ *   cmd - true: select command; false: select data
+ *
+ * Returned Value:
+ *   None
+ *
+ ****************************************************************************/
+
+#ifdef CONFIG_SPI_CMDDATA
+#ifdef CONFIG_IMXRT_LPSPI1
+int imxrt_lpspi1cmddata(FAR struct spi_dev_s *dev, uint32_t devid, bool cmd)
+{
+  return -ENODEV;
+}
+#endif
+
+#ifdef CONFIG_IMXRT_LPSPI2
+int imxrt_lpspi2cmddata(FAR struct spi_dev_s *dev, uint32_t devid, bool cmd)
+{
+  return -ENODEV;
+}
+#endif
+
+#ifdef CONFIG_IMXRT_LPSPI3
+int imxrt_lpspi3cmddata(FAR struct spi_dev_s *dev, uint32_t devid, bool cmd)
+{
+  return -ENODEV;
+}
+#endif
+
+#ifdef CONFIG_IMXRT_LPSPI4
+int imxrt_lpspi4cmddata(FAR struct spi_dev_s *dev, uint32_t devid, bool cmd)
+{
+  return -ENODEV;
+}
+#endif
+#endif /* CONFIG_SPI_CMDDATA */
+
+#endif /* CONFIG_IMXRT_LPSPI1 || CONFIG_IMXRT_LPSPI2 */
diff --git a/boards/arm/imxrt/imxrt1064-evk/src/imxrt_usbhost.c b/boards/arm/imxrt/imxrt1064-evk/src/imxrt_usbhost.c
new file mode 100644
index 0000000..08e6444
--- /dev/null
+++ b/boards/arm/imxrt/imxrt1064-evk/src/imxrt_usbhost.c
@@ -0,0 +1,314 @@
+/*****************************************************************************
+ * boards/arm/imxrt/imxrt1064-evk/src/imxrt_usbhost.c
+ *
+ *   Copyright (C) 2013, 2015-2017 Gregory Nutt. All rights reserved.
+ *   Author: Gregory Nutt <gn...@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ *    used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ *****************************************************************************/
+
+/*****************************************************************************
+ * Included Files
+ *****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <sys/types.h>
+#include <stdint.h>
+#include <stdbool.h>
+#include <sched.h>
+#include <errno.h>
+#include <assert.h>
+#include <debug.h>
+
+#include <nuttx/irq.h>
+#include <nuttx/kthread.h>
+#include <nuttx/usb/usbdev.h>
+#include <nuttx/usb/usbhost.h>
+#include <nuttx/usb/usbdev_trace.h>
+#include <nuttx/usb/ehci.h>
+
+#include <imxrt_ehci.h>
+
+#include "hardware/imxrt_pinmux.h"
+#include "hardware/imxrt_usbotg.h"
+#include "imxrt_periphclks.h"
+#include "imxrt1064-evk.h"
+
+#include <arch/board/board.h>  /* Must always be included last */
+
+#if defined(CONFIG_IMXRT_USBOTG) || defined(CONFIG_USBHOST)
+
+/*****************************************************************************
+ * Pre-processor Definitions
+ *****************************************************************************/
+
+#ifndef CONFIG_USBHOST_DEFPRIO
+#  define CONFIG_USBHOST_DEFPRIO 50
+#endif
+
+#ifndef CONFIG_USBHOST_STACKSIZE
+#  ifdef CONFIG_USBHOST_HUB
+#    define CONFIG_USBHOST_STACKSIZE 1536
+#  else
+#    define CONFIG_USBHOST_STACKSIZE 1024
+#  endif
+#endif
+
+/*****************************************************************************
+ * Private Data
+ *****************************************************************************/
+
+/* Retained device driver handle */
+
+static struct usbhost_connection_s *g_ehciconn;
+
+/*****************************************************************************
+ * Private Functions
+ *****************************************************************************/
+
+/*****************************************************************************
+ * Name: ehci_waiter
+ *
+ * Description:
+ *   Wait for USB devices to be connected to the EHCI root hub.
+ *
+ *****************************************************************************/
+
+static int ehci_waiter(int argc, char *argv[])
+{
+  FAR struct usbhost_hubport_s *hport;
+
+  uinfo("ehci_waiter:  Running\n");
+  for (; ; )
+    {
+      /* Wait for the device to change state */
+
+      DEBUGVERIFY(CONN_WAIT(g_ehciconn, &hport));
+      syslog(LOG_INFO, "ehci_waiter: %s\n",
+             hport->connected ? "connected" : "disconnected");
+
+      /* Did we just become connected? */
+
+      if (hport->connected)
+        {
+          /* Yes.. enumerate the newly connected device */
+
+          CONN_ENUMERATE(g_ehciconn, hport);
+        }
+    }
+
+  /* Keep the compiler from complaining */
+
+  return 0;
+}
+
+/*****************************************************************************
+ * Public Functions
+ *****************************************************************************/
+
+/*****************************************************************************
+ * Name: imxrt_usbhost_initialize
+ *
+ * Description:
+ *   Called at application startup time to initialize the USB host
+ *   functionality.
+ *   This function will start a thread that will monitor for device
+ *   connection/disconnection events.
+ *
+ *****************************************************************************/
+
+int imxrt_usbhost_initialize(void)
+{
+  pid_t pid;
+  int ret;
+
+  imxrt_clockall_usboh3();
+
+  /* Make sure we don't accidentally switch on USB bus power */
+
+  *((uint32_t *)IMXRT_USBNC_USB_OTG1_CTRL) = USBNC_PWR_POL;
+  *((uint32_t *)0x400d9030)                = (1 << 21);
+  *((uint32_t *)0x400d9000)                = 0;
+
+  /* Setup pins, with power initially off */
+
+  imxrt_config_gpio(GPIO_USBOTG_ID);
+
+  /* First, register all of the class drivers needed to support the drivers
+   * that we care about
+   */
+
+#ifdef CONFIG_USBHOST_HUB
+  /* Initialize USB hub support */
+
+  ret = usbhost_hub_initialize();
+  if (ret < 0)
+    {
+      syslog(LOG_ERR, "ERROR: usbhost_hub_initialize failed: %d\n", ret);
+    }
+#endif
+
+#ifdef CONFIG_USBHOST_MSC
+  /* Register the USB host Mass Storage Class */
+
+  ret = usbhost_msc_initialize();
+  if (ret != OK)
+    {
+      syslog(LOG_ERR,
+             "ERROR: Failed to register the mass storage class: %d\n", ret);
+    }
+#endif
+
+#ifdef CONFIG_USBHOST_CDCACM
+  /* Register the CDC/ACM serial class */
+
+  ret = usbhost_cdcacm_initialize();
+  if (ret != OK)
+    {
+      uerr("ERROR: Failed to register the CDC/ACM serial class\n");
+    }
+#endif
+
+#ifdef CONFIG_USBHOST_HIDKBD
+  /* Register the USB host HID keyboard class driver */
+
+  ret = usbhost_kbdinit();
+  if (ret != OK)
+    {
+      uerr("ERROR: Failed to register the KBD class\n");
+    }
+#endif
+
+  /* Then get an instance of the USB EHCI interface. */
+
+  g_ehciconn = imxrt_ehci_initialize(0);
+
+  if (!g_ehciconn)
+    {
+      uerr("ERROR: imxrt_ehci_initialize failed\n");
+      return -ENODEV;
+    }
+
+  /* Start a thread to handle device connection. */
+
+  pid = kthread_create("EHCI Monitor", CONFIG_USBHOST_DEFPRIO,
+                       CONFIG_USBHOST_STACKSIZE,
+                       (main_t)ehci_waiter, (FAR char * const *)NULL);
+  if (pid < 0)
+    {
+      uerr("ERROR: Failed to create ehci_waiter task: %d\n", ret);
+      return -ENODEV;
+    }
+
+  return OK;
+}
+
+/*****************************************************************************
+ * Name: imxrt_usbhost_vbusdrive
+ *
+ * Description:
+ *   Enable/disable driving of VBUS 5V output.  This function must be
+ *   provided by each platform that implements the OHCI or EHCI host
+ *   interface
+ *
+ * Input Parameters:
+ *   rhport - Selects root hub port to be powered host interface.
+ *            Since the IMXRT has only a downstream port, zero is
+ *            the only possible value for this parameter.
+ *   enable - true: enable VBUS power; false: disable VBUS power
+ *
+ * Returned Value:
+ *   None
+ *
+ *****************************************************************************/
+
+#define HCOR ((volatile struct ehci_hcor_s *)IMXRT_USBOTG_HCOR_BASE)
+
+void imxrt_usbhost_vbusdrive(int rhport, bool enable)
+{
+  uint32_t regval;
+
+  uinfo("RHPort%d: enable=%d\n", rhport + 1, enable);
+
+  /* The IMXRT has only a single root hub port */
+
+  if (rhport == 0)
+    {
+      /* Then enable or disable VBUS power */
+
+      regval = HCOR->portsc[rhport];
+      regval &= ~EHCI_PORTSC_PP;
+      if (enable)
+        {
+          regval |= EHCI_PORTSC_PP;
+        }
+
+      HCOR->portsc[rhport] = regval;
+    }
+}
+
+/*****************************************************************************
+ * Name: imxrt_setup_overcurrent
+ *
+ * Description:
+ *   Setup to receive an interrupt-level callback if an overcurrent condition
+ *   is detected.
+ *
+ * Input Parameters:
+ *   handler - New overcurrent interrupt handler
+ *   arg     - The argument that will accompany the interrupt
+ *
+ * Returned Value:
+ *   Zero (OK) returned on success; a negated errno value is returned on
+ *   failure.
+ *
+ *****************************************************************************/
+
+#if 0 /* Not ready yet */
+int imxrt_setup_overcurrent(xcpt_t handler, void *arg)
+{
+  irqstate_t flags;
+
+  /* Disable interrupts until we are done.  This guarantees that the
+   * following operations are atomic.
+   */
+
+  flags = enter_critical_section();
+
+  /* Configure the interrupt */
+
+#warning Missing logic
+
+  leave_critical_section(flags);
+  return OK;
+}
+#endif /* 0 */
+
+#endif /* CONFIG_IMXRT_USBOTG || CONFIG_USBHOST */
diff --git a/boards/arm/imxrt/imxrt1064-evk/src/imxrt_userleds.c b/boards/arm/imxrt/imxrt1064-evk/src/imxrt_userleds.c
new file mode 100644
index 0000000..56c0963
--- /dev/null
+++ b/boards/arm/imxrt/imxrt1064-evk/src/imxrt_userleds.c
@@ -0,0 +1,100 @@
+/****************************************************************************
+ * boards/arm/imxrt/imxrt1064-evk/src/imxrt_userleds.c
+ *
+ *   Copyright (C) 2018 Gregory Nutt. All rights reserved.
+ *   Authors: Gregory Nutt <gn...@nuttx.org>
+ *            David Sidrane <da...@nscdg.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ *    used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/* There are four LED status indicators located on the EVK Board.  The
+ * functions of these LEDs include:
+ *
+ *   - Main Power Supply(D3)
+ *     Green: DC 5V main supply is normal.
+ *     Red:   J2 input voltage is over 5.6V.
+ *     Off:   The board is not powered.
+ *   - Reset RED LED(D15)
+ *   - OpenSDA LED(D16)
+ *   - USER LED(D18)
+ *
+ * Only a single LED, D18, is under software control.
+ */
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include "imxrt_gpio.h"
+#include "imxrt_iomuxc.h"
+#include <arch/board/board.h>
+#include "imxrt1064-evk.h"
+
+#ifndef CONFIG_ARCH_LEDS
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: board_userled_initialize
+ ****************************************************************************/
+
+uint32_t board_userled_initialize(void)
+{
+  /* Configure LED GPIO for output */
+
+  imxrt_config_gpio(GPIO_LED);
+  return BOARD_NLEDS;
+}
+
+/****************************************************************************
+ * Name: board_userled
+ ****************************************************************************/
+
+void board_userled(int led, bool ledon)
+{
+  imxrt_gpio_write(GPIO_LED, !ledon);  /* Low illuminates */
+}
+
+/****************************************************************************
+ * Name: board_userled_all
+ ****************************************************************************/
+
+void board_userled_all(uint32_t ledset)
+{
+  /* Low illuminates */
+
+  imxrt_gpio_write(GPIO_LED, (ledset & BOARD_USERLED_BIT) == 0);
+}
+
+#endif /* !CONFIG_ARCH_LEDS */