You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by bt...@apache.org on 2020/12/04 18:18:52 UTC

[incubator-nuttx] branch master updated (4629d5a -> eabd79f)

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

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


    from 4629d5a  RX65N USB Host Driver
     new 11be65d  board/arm/imxrt: Added Teensy-4 BSP based on imxrt1060-evk
     new 7f9d8f5  boards/Kconfig: Added configuration for Teensy-4 BSP
     new 2de4b68  Docs and README: Add Teensy-4 BSP
     new eabd79f  boards/arm/imxrt/teensy-4.x: fixed build error and nx style

The 4 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 Documentation/introduction/detailed_support.rst    |   4 +
 README.md                                          |   4 +-
 boards/Kconfig                                     |  14 +
 boards/README.txt                                  |   9 +
 boards/arm/imxrt/teensy-4.x/Kconfig                |  27 ++
 boards/arm/imxrt/teensy-4.x/README.txt             | 176 ++++++++++
 .../arm/imxrt/teensy-4.x/configs/can-4.1/defconfig |  58 ++++
 .../imxrt/teensy-4.x/configs/netnsh-4.1/defconfig  |  69 ++++
 .../arm/imxrt/teensy-4.x/configs/nsh-4.0/defconfig |  39 +++
 .../arm/imxrt/teensy-4.x/configs/nsh-4.1/defconfig |  40 +++
 .../arm/imxrt/teensy-4.x/configs/sd-4.1/defconfig  |  56 ++++
 boards/arm/imxrt/teensy-4.x/include/board.h        | 304 +++++++++++++++++
 boards/arm/imxrt/teensy-4.x/kernel/Makefile        | 103 ++++++
 .../arm/imxrt/teensy-4.x/kernel/imxrt_userspace.c  | 116 +++++++
 boards/arm/imxrt/teensy-4.x/scripts/Make.defs      |  96 ++++++
 boards/arm/imxrt/teensy-4.x/scripts/flash-ocram.ld | 186 +++++++++++
 boards/arm/imxrt/teensy-4.x/scripts/flash.ld       | 139 ++++++++
 .../arm/imxrt/teensy-4.x/scripts/kernel-space.ld   | 104 ++++++
 boards/arm/imxrt/teensy-4.x/scripts/memory.ld      |  67 ++++
 boards/arm/imxrt/teensy-4.x/scripts/user-space.ld  | 120 +++++++
 boards/arm/imxrt/teensy-4.x/src/Makefile           |  57 ++++
 boards/arm/imxrt/teensy-4.x/src/imxrt_adc.c        | 113 +++++++
 boards/arm/imxrt/teensy-4.x/src/imxrt_appinit.c    |  99 ++++++
 boards/arm/imxrt/teensy-4.x/src/imxrt_autoleds.c   | 164 ++++++++++
 boards/arm/imxrt/teensy-4.x/src/imxrt_boot.c       | 118 +++++++
 boards/arm/imxrt/teensy-4.x/src/imxrt_bringup.c    | 182 +++++++++++
 boards/arm/imxrt/teensy-4.x/src/imxrt_ethernet.c   | 275 ++++++++++++++++
 boards/arm/imxrt/teensy-4.x/src/imxrt_flexcan.c    |  83 +++++
 .../imxrt/teensy-4.x/src/imxrt_flexspi_nor_boot.c  |  58 ++++
 .../imxrt/teensy-4.x/src/imxrt_flexspi_nor_boot.h  | 157 +++++++++
 .../imxrt/teensy-4.x/src/imxrt_flexspi_nor_flash.c | 137 ++++++++
 .../imxrt/teensy-4.x/src/imxrt_flexspi_nor_flash.h | 364 +++++++++++++++++++++
 boards/arm/imxrt/teensy-4.x/src/imxrt_i2c.c        | 116 +++++++
 boards/arm/imxrt/teensy-4.x/src/imxrt_spi.c        | 212 ++++++++++++
 boards/arm/imxrt/teensy-4.x/src/imxrt_userleds.c   |  82 +++++
 boards/arm/imxrt/teensy-4.x/src/teensy-4.h         | 195 +++++++++++
 36 files changed, 4142 insertions(+), 1 deletion(-)
 create mode 100644 boards/arm/imxrt/teensy-4.x/Kconfig
 create mode 100644 boards/arm/imxrt/teensy-4.x/README.txt
 create mode 100644 boards/arm/imxrt/teensy-4.x/configs/can-4.1/defconfig
 create mode 100644 boards/arm/imxrt/teensy-4.x/configs/netnsh-4.1/defconfig
 create mode 100644 boards/arm/imxrt/teensy-4.x/configs/nsh-4.0/defconfig
 create mode 100644 boards/arm/imxrt/teensy-4.x/configs/nsh-4.1/defconfig
 create mode 100644 boards/arm/imxrt/teensy-4.x/configs/sd-4.1/defconfig
 create mode 100644 boards/arm/imxrt/teensy-4.x/include/board.h
 create mode 100644 boards/arm/imxrt/teensy-4.x/kernel/Makefile
 create mode 100644 boards/arm/imxrt/teensy-4.x/kernel/imxrt_userspace.c
 create mode 100644 boards/arm/imxrt/teensy-4.x/scripts/Make.defs
 create mode 100644 boards/arm/imxrt/teensy-4.x/scripts/flash-ocram.ld
 create mode 100644 boards/arm/imxrt/teensy-4.x/scripts/flash.ld
 create mode 100644 boards/arm/imxrt/teensy-4.x/scripts/kernel-space.ld
 create mode 100644 boards/arm/imxrt/teensy-4.x/scripts/memory.ld
 create mode 100644 boards/arm/imxrt/teensy-4.x/scripts/user-space.ld
 create mode 100644 boards/arm/imxrt/teensy-4.x/src/Makefile
 create mode 100644 boards/arm/imxrt/teensy-4.x/src/imxrt_adc.c
 create mode 100644 boards/arm/imxrt/teensy-4.x/src/imxrt_appinit.c
 create mode 100644 boards/arm/imxrt/teensy-4.x/src/imxrt_autoleds.c
 create mode 100644 boards/arm/imxrt/teensy-4.x/src/imxrt_boot.c
 create mode 100644 boards/arm/imxrt/teensy-4.x/src/imxrt_bringup.c
 create mode 100644 boards/arm/imxrt/teensy-4.x/src/imxrt_ethernet.c
 create mode 100644 boards/arm/imxrt/teensy-4.x/src/imxrt_flexcan.c
 create mode 100644 boards/arm/imxrt/teensy-4.x/src/imxrt_flexspi_nor_boot.c
 create mode 100644 boards/arm/imxrt/teensy-4.x/src/imxrt_flexspi_nor_boot.h
 create mode 100644 boards/arm/imxrt/teensy-4.x/src/imxrt_flexspi_nor_flash.c
 create mode 100644 boards/arm/imxrt/teensy-4.x/src/imxrt_flexspi_nor_flash.h
 create mode 100644 boards/arm/imxrt/teensy-4.x/src/imxrt_i2c.c
 create mode 100644 boards/arm/imxrt/teensy-4.x/src/imxrt_spi.c
 create mode 100644 boards/arm/imxrt/teensy-4.x/src/imxrt_userleds.c
 create mode 100644 boards/arm/imxrt/teensy-4.x/src/teensy-4.h


[incubator-nuttx] 03/04: Docs and README: Add Teensy-4 BSP

Posted by bt...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 2de4b6838934217ae1df555ba865b77a93636374
Author: Michal Lenc <le...@fel.cvut.cz>
AuthorDate: Thu Dec 3 18:37:01 2020 +0100

    Docs and README: Add Teensy-4 BSP
    
    Signed-off-by: Michal Lenc <le...@fel.cvut.cz>
---
 Documentation/introduction/detailed_support.rst | 4 ++++
 README.md                                       | 4 +++-
 boards/README.txt                               | 9 +++++++++
 3 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/Documentation/introduction/detailed_support.rst b/Documentation/introduction/detailed_support.rst
index 87566ab..133872d 100644
--- a/Documentation/introduction/detailed_support.rst
+++ b/Documentation/introduction/detailed_support.rst
@@ -2627,6 +2627,10 @@ NuttX-7.27.
    `README <https://github.com/apache/incubator-nuttx/blob/master/boards/arm/imxrt/imxrt1020-evk/README.txt>`__
    file for further information.
 
+-  The basic Teensy-4.x port is complete. Refer to the NuttX board
+   `README <https://github.com/apache/incubator-nuttx/blob/master/boards/arm/imxrt/teensy-4.x/README.txt>`__
+   file for further information.
+
 **i.MX RT Driver Status:**
 
 -  **NuttX-7.25**. The initial release in NuttX-7.25 includes UART,
diff --git a/README.md b/README.md
index ad1b029..c38fdb0 100644
--- a/README.md
+++ b/README.md
@@ -1932,7 +1932,9 @@ Below is a guide to the available README files in the NuttX source tree:
      |   |   |- imxrt/
      |   |   |   |- imxrt1050-evk/
      |   |   |   |   `- README.txt
-     |   |   |   `- imxrt1060-evk/
+     |   |   |   |- imxrt1060-evk/
+     |   |   |   |   `- README.txt
+     |   |   |   `- teensy-4.x/
      |   |   |       `- README.txt
      |   |   |- kinetis/
      |   |   |   |- freedom-k28f/
diff --git a/boards/README.txt b/boards/README.txt
index 90d5c25..5dbdbe3 100644
--- a/boards/README.txt
+++ b/boards/README.txt
@@ -819,6 +819,15 @@ boards/arm/kinetis/teensy-3.x
   Teensy-3.0).  the primary difference is that the Teensy 3.0 has a
   MK30DX128VLH5 with slightly less capability.
 
+boards/arm/imxrt/teensy-4.x
+		This is the port of NuttX to the PJRC Teensy++ 4.x board.  This board is
+		developed by http://pjrc.com/teensy/.  The Teensy++ 4.x is based
+		on an NXP MIMXRT1062DVL6A MCU. The port can support both Teensy 4.0 and
+		Teensy 4.1 boards.
+
+    https://www.pjrc.com/store/teensy40.html
+    https://www.pjrc.com/store/teensy41.html
+
 boards/arm/kl/teensy-lc
   This is the port of nuttx for the Teensy LC board.  The Teensy LC
   is a DIP style breakout board for the MKL25Z64 and comes with a USB


[incubator-nuttx] 01/04: board/arm/imxrt: Added Teensy-4 BSP based on imxrt1060-evk

Posted by bt...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 11be65db8bd29a3a518b9025cc52b5a31201cbf9
Author: Michal Lenc <le...@fel.cvut.cz>
AuthorDate: Wed Dec 2 23:54:34 2020 +0100

    board/arm/imxrt: Added Teensy-4 BSP based on imxrt1060-evk
    
    Signed-off-by: Michal Lenc <le...@fel.cvut.cz>
---
 boards/arm/imxrt/teensy-4.x/Kconfig                |  36 ++
 boards/arm/imxrt/teensy-4.x/README.txt             | 177 ++++++++++
 .../arm/imxrt/teensy-4.x/configs/can-4.1/defconfig |  80 +++++
 .../imxrt/teensy-4.x/configs/netnsh-4.1/defconfig  |  77 +++++
 .../arm/imxrt/teensy-4.x/configs/nsh-4.0/defconfig |  40 +++
 .../arm/imxrt/teensy-4.x/configs/nsh-4.1/defconfig |  40 +++
 .../arm/imxrt/teensy-4.x/configs/sd-4.1/defconfig  |  65 ++++
 boards/arm/imxrt/teensy-4.x/include/board.h        | 311 ++++++++++++++++++
 boards/arm/imxrt/teensy-4.x/kernel/Makefile        | 103 ++++++
 .../arm/imxrt/teensy-4.x/kernel/imxrt_userspace.c  | 116 +++++++
 boards/arm/imxrt/teensy-4.x/scripts/Make.defs      |  96 ++++++
 boards/arm/imxrt/teensy-4.x/scripts/flash-ocram.ld | 186 +++++++++++
 boards/arm/imxrt/teensy-4.x/scripts/flash.ld       | 139 ++++++++
 .../arm/imxrt/teensy-4.x/scripts/kernel-space.ld   | 104 ++++++
 boards/arm/imxrt/teensy-4.x/scripts/memory.ld      |  67 ++++
 boards/arm/imxrt/teensy-4.x/scripts/user-space.ld  | 120 +++++++
 boards/arm/imxrt/teensy-4.x/src/Makefile           |  57 ++++
 boards/arm/imxrt/teensy-4.x/src/imxrt_adc.c        | 112 +++++++
 boards/arm/imxrt/teensy-4.x/src/imxrt_appinit.c    |  99 ++++++
 boards/arm/imxrt/teensy-4.x/src/imxrt_autoleds.c   | 165 ++++++++++
 boards/arm/imxrt/teensy-4.x/src/imxrt_boot.c       | 118 +++++++
 boards/arm/imxrt/teensy-4.x/src/imxrt_bringup.c    | 182 +++++++++++
 boards/arm/imxrt/teensy-4.x/src/imxrt_ethernet.c   | 275 ++++++++++++++++
 boards/arm/imxrt/teensy-4.x/src/imxrt_flexcan.c    |  83 +++++
 .../imxrt/teensy-4.x/src/imxrt_flexspi_nor_boot.c  |  58 ++++
 .../imxrt/teensy-4.x/src/imxrt_flexspi_nor_boot.h  | 157 +++++++++
 .../imxrt/teensy-4.x/src/imxrt_flexspi_nor_flash.c | 137 ++++++++
 .../imxrt/teensy-4.x/src/imxrt_flexspi_nor_flash.h | 364 +++++++++++++++++++++
 boards/arm/imxrt/teensy-4.x/src/imxrt_i2c.c        | 114 +++++++
 boards/arm/imxrt/teensy-4.x/src/imxrt_spi.c        | 212 ++++++++++++
 boards/arm/imxrt/teensy-4.x/src/imxrt_userleds.c   |  82 +++++
 boards/arm/imxrt/teensy-4.x/src/teensy-4.h         | 195 +++++++++++
 32 files changed, 4167 insertions(+)

diff --git a/boards/arm/imxrt/teensy-4.x/Kconfig b/boards/arm/imxrt/teensy-4.x/Kconfig
new file mode 100644
index 0000000..4fb15fc
--- /dev/null
+++ b/boards/arm/imxrt/teensy-4.x/Kconfig
@@ -0,0 +1,36 @@
+#
+# For a description of the syntax of this configuration file,
+# see the file kconfig-language.txt in the NuttX tools repository.
+#
+
+if ARCH_BOARD_TEENSY_4X
+choice
+	prompt "Boot Flash"
+	default TEENSY4_QSPI_FLASH
+
+config TEENSY4_QSPI_FLASH
+	bool "QSPI Flash"
+
+endchoice # Boot Flash
+
+choice
+	prompt "Board configuration"
+
+config TEENSY_40
+	bool "Teensy 4.0"
+
+config TEENSY_41
+	bool "Teensy 4.1"
+
+endchoice # Board configuration
+
+menu "Sensors interfaces"
+
+config BMP280_LPI2C
+	int "LPI2C interface for BMP280 sensor"
+	depends on SENSORS_BMP280
+	default 4
+
+endmenu # Sensors interfaces
+
+endif
diff --git a/boards/arm/imxrt/teensy-4.x/README.txt b/boards/arm/imxrt/teensy-4.x/README.txt
new file mode 100644
index 0000000..dd72284
--- /dev/null
+++ b/boards/arm/imxrt/teensy-4.x/README.txt
@@ -0,0 +1,177 @@
+README
+======
+
+  This README file provides information about the port of NuttX to the Teensy 4.x board.  This board features the
+  MIMXRT1062DVL6A MCU.  Some of the features of this board include:
+
+    o Processor
+
+      - MIMXRT1062DVL6A processor
+
+    o Memory
+
+      - 1 Mb RAM memory
+      - 2 Mb QSPI Flash
+      - 1 SDIO (4 bit) native SD
+
+    o Connectivity
+
+      - Micro USB host
+      - CAN transceivers
+      - 41 digital pins
+      - 14 analog pins, 2 ADCs on chip
+
+Contents
+========
+
+  o LEDs
+  o Configurations
+    - Configuration sub-directories
+
+LEDs and buttons
+================
+
+  LEDs
+  ----
+
+  There are two LED status indicators located on the Teensy-4.x board.
+  The functions of these LEDs include:
+
+    - RED LED (loading status)
+       - dim:    ready
+       - bright: writing
+       - blink:  no USB
+    - USER LED(D8)
+
+  Only a single LED, D8, 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         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.
+
+Configurations
+==============
+
+  Information Common to All Configurations
+  ----------------------------------------
+  Each Teensy-4.x configuration is maintained in a sub-directory and
+  can be selected as follow:
+
+    tools/configure.sh [OPTIONS] teensy-4.x:<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. 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
+-----------------------------
+
+
+  nsh-4.0:
+
+    Configures the NuttShell (nsh) located at examples/nsh for Teensy 4.0.  
+    This NSH configuration is focused on low level, command-line driver testing.
+    Built-in applications are supported, but none are enabled. NutShells then
+    runs on UART6: Pin 0 is RX and pin 1 is TX
+
+  nsh-4.1:
+
+    Configures the NuttShell (nsh) located at examples/nsh for Teensy 4.1.  
+    This NSH configuration is focused on low level, command-line driver testing.
+    Built-in applications are supported, but none are enabled. NutShells then
+    runs on UART1: Pin 24 is TX and pin 25 is RX
+
+  can-4.1:
+
+    This is an nsh configuration (see above) for Teensy-4.x with added support of 
+    CAN driver. FlexCAN3 is chosen as default, the change can be made at System 
+    type peripheral selection.
+
+    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.
+
+    CAN_FD supported but not enabled. For CAN_FD please select following:
+
+    CAN_FD = y
+    NET_CAN_CANFD = y
+    NET_CAN_SOCK_OPTS = y
+
+    This configuration can be easily changed to work with Teensy 4.0 by
+    selecting CONFIG_TEENSY_40=y.
+
+  netnsh-4.1:
+
+    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.
+
+    This configuration cannot be changed to Teensy 4.0 as this board does
+    not have Ethernet capability.
+
+  sd-4.1
+
+    This is an nsh configuration (see above) for Teensy-4.x with added support of 
+    connecting micro SD card.
+
+    You can mount micro SD card by "mount -t vfat /dev/mmcsd0 /mnt"
+
+    This configuration cannot be changed to Teensy 4.0 as this board does
+    not have micro SD card slot.
diff --git a/boards/arm/imxrt/teensy-4.x/configs/can-4.1/defconfig b/boards/arm/imxrt/teensy-4.x/configs/can-4.1/defconfig
new file mode 100644
index 0000000..f87e886
--- /dev/null
+++ b/boards/arm/imxrt/teensy-4.x/configs/can-4.1/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_CAN_CANFD is not set
+# CONFIG_NET_ETHERNET is not set
+# CONFIG_NET_IPv4 is not set
+CONFIG_ARCH="arm"
+CONFIG_ARCH_BOARD="teensy-4.x"
+CONFIG_ARCH_BOARD_TEENSY_4X=y
+CONFIG_ARCH_CHIP="imxrt"
+CONFIG_ARCH_CHIP_IMXRT=y
+CONFIG_ARCH_CHIP_MIMXRT1062DVL6A=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_TEENSY_41=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/teensy-4.x/configs/netnsh-4.1/defconfig b/boards/arm/imxrt/teensy-4.x/configs/netnsh-4.1/defconfig
new file mode 100644
index 0000000..f125ae2
--- /dev/null
+++ b/boards/arm/imxrt/teensy-4.x/configs/netnsh-4.1/defconfig
@@ -0,0 +1,77 @@
+#
+# 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="teensy-4.x"
+CONFIG_ARCH_BOARD_TEENSY_4X=y
+CONFIG_ARCH_CHIP="imxrt"
+CONFIG_ARCH_CHIP_IMXRT=y
+CONFIG_ARCH_CHIP_MIMXRT1062DVL6A=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_DEBUG_ERROR=y
+CONFIG_DEBUG_FEATURES=y
+CONFIG_DEBUG_INFO=y
+CONFIG_DEBUG_NET=y
+CONFIG_DEBUG_NET_ERROR=y
+CONFIG_DEBUG_NET_INFO=y
+CONFIG_DEBUG_NET_WARN=y
+CONFIG_DEBUG_WARN=y
+CONFIG_ETH0_PHY_DP83825I=y
+CONFIG_FS_PROCFS=y
+CONFIG_IDLETHREAD_STACKSIZE=2048
+CONFIG_IMXRT_ENET=y
+CONFIG_IMXRT_LPUART1=y
+CONFIG_INTELHEX_BINARY=y
+CONFIG_LIB_HOSTNAME="Teensy 4.x"
+CONFIG_LPUART1_SERIAL_CONSOLE=y
+CONFIG_MAX_TASKS=16
+CONFIG_NET=y
+CONFIG_NETDB_DNSCLIENT=y
+CONFIG_NETDEV_STATISTICS=y
+CONFIG_NETINIT_DHCPC=y
+CONFIG_NETINIT_NOMAC=y
+CONFIG_NETUTILS_TELNETD=y
+CONFIG_NET_ARP_SEND=y
+CONFIG_NET_BROADCAST=y
+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_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_TEENSY_41=y
+CONFIG_USER_ENTRYPOINT="nsh_main"
diff --git a/boards/arm/imxrt/teensy-4.x/configs/nsh-4.0/defconfig b/boards/arm/imxrt/teensy-4.x/configs/nsh-4.0/defconfig
new file mode 100644
index 0000000..5a488ef
--- /dev/null
+++ b/boards/arm/imxrt/teensy-4.x/configs/nsh-4.0/defconfig
@@ -0,0 +1,40 @@
+#
+# 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="teensy-4.x"
+CONFIG_ARCH_BOARD_TEENSY_4X=y
+CONFIG_ARCH_CHIP="imxrt"
+CONFIG_ARCH_CHIP_IMXRT=y
+CONFIG_ARCH_CHIP_MIMXRT1062DVL6A=y
+CONFIG_ARCH_STACKDUMP=y
+CONFIG_TEENSY_40=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_LPUART6=y
+CONFIG_INTELHEX_BINARY=y
+CONFIG_LPUART6_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"
diff --git a/boards/arm/imxrt/teensy-4.x/configs/nsh-4.1/defconfig b/boards/arm/imxrt/teensy-4.x/configs/nsh-4.1/defconfig
new file mode 100644
index 0000000..e838212
--- /dev/null
+++ b/boards/arm/imxrt/teensy-4.x/configs/nsh-4.1/defconfig
@@ -0,0 +1,40 @@
+#
+# 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="teensy-4.x"
+CONFIG_ARCH_BOARD_TEENSY_4X=y
+CONFIG_ARCH_CHIP="imxrt"
+CONFIG_ARCH_CHIP_IMXRT=y
+CONFIG_ARCH_CHIP_MIMXRT1062DVL6A=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_TEENSY_41=y
+CONFIG_USER_ENTRYPOINT="nsh_main"
diff --git a/boards/arm/imxrt/teensy-4.x/configs/sd-4.1/defconfig b/boards/arm/imxrt/teensy-4.x/configs/sd-4.1/defconfig
new file mode 100644
index 0000000..8bb085b
--- /dev/null
+++ b/boards/arm/imxrt/teensy-4.x/configs/sd-4.1/defconfig
@@ -0,0 +1,65 @@
+#
+# 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_MMCSD_HAVE_WRITEPROTECT is not set
+# CONFIG_MMCSD_SPI is not set
+CONFIG_ARCH="arm"
+CONFIG_ARCH_BOARD="teensy-4.x"
+CONFIG_ARCH_BOARD_TEENSY_4X=y
+CONFIG_ARCH_CHIP="imxrt"
+CONFIG_ARCH_CHIP_IMXRT=y
+CONFIG_ARCH_CHIP_MIMXRT1062DVL6A=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_DEBUG_ASSERTIONS=y
+CONFIG_DEBUG_ERROR=y
+CONFIG_DEBUG_FEATURES=y
+CONFIG_DEBUG_FS=y
+CONFIG_DEBUG_FS_ERROR=y
+CONFIG_DEBUG_FS_INFO=y
+CONFIG_DEBUG_FS_WARN=y
+CONFIG_DEBUG_INFO=y
+CONFIG_DEBUG_WARN=y
+CONFIG_FAT_LCNAMES=y
+CONFIG_FAT_LFN=y
+CONFIG_FS_FAT=y
+CONFIG_FS_PROCFS=y
+CONFIG_IDLETHREAD_STACKSIZE=2048
+CONFIG_IMXRT_LPUART1=y
+CONFIG_IMXRT_USDHC1=y
+CONFIG_IMXRT_USDHC1_INVERT_CD=y
+CONFIG_IMXRT_USDHC1_WIDTH_D1_D4=y
+CONFIG_INTELHEX_BINARY=y
+CONFIG_LPUART1_SERIAL_CONSOLE=y
+CONFIG_MAX_TASKS=16
+CONFIG_MMCSD=y
+CONFIG_MMCSD_MULTIBLOCK_DISABLE=y
+CONFIG_MMCSD_SDIO=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_SDIO_BLOCKSETUP=y
+CONFIG_SPI=y
+CONFIG_SPI_CALLBACK=y
+CONFIG_SPI_CMDDATA=y
+CONFIG_START_DAY=14
+CONFIG_START_MONTH=3
+CONFIG_SYSTEM_NSH=y
+CONFIG_TEENSY_41=y
+CONFIG_USER_ENTRYPOINT="nsh_main"
diff --git a/boards/arm/imxrt/teensy-4.x/include/board.h b/boards/arm/imxrt/teensy-4.x/include/board.h
new file mode 100644
index 0000000..86a9665
--- /dev/null
+++ b/boards/arm/imxrt/teensy-4.x/include/board.h
@@ -0,0 +1,311 @@
+/****************************************************************************
+ * boards/arm/imxrt/teensy-4.x/include/board.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
+ *
+ *   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.
+ *
+ ****************************************************************************/
+
+#ifndef __BOARDS_ARM_IMXRT_TEENSY_4_INCLUDE_BOARD_H
+#define __BOARDS_ARM_IMXRT_TEENSY_4_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(D8)
+ *
+ * Only a single LED, D8, 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.
+ */
+
+/* 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_DATA3_1 | IOMUX_USDHC1_DATAX_DEFAULT)
+#define PIN_USDHC1_D3     (GPIO_USDHC1_DATA2_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     (PIN_USDHC1_D3)
+
+/* 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)
+
+/* 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_1|IOMUX_ENET_MDIO_DEFAULT)   /* GPIO_B1_15 */
+#define GPIO_ENET_MDC        (GPIO_ENET_MDC_1|IOMUX_ENET_MDC_DEFAULT)     /* GPIO_B1_14 */
+#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 */
+#define GPIO_LPUART6_RX      (GPIO_LPUART6_RX_1|IOMUX_UART_DEFAULT) /* GPIO_AD_B0_03 */
+#define GPIO_LPUART6_TX      (GPIO_LPUART6_TX_1|IOMUX_UART_DEFAULT) /* GPIO_AD_B0_02 */
+
+/* LPI2Cs */
+
+#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_1|IOMUX_LPI2C_DEFAULT) /* GPIO_AD_B1_06 */
+#define GPIO_LPI2C3_SCL      (GPIO_LPI2C3_SCL_1|IOMUX_LPI2C_DEFAULT) /* GPIO_AD_B1_07 */
+#define GPIO_LPI2C4_SDA      (GPIO_LPI2C4_SDA_1|IOMUX_LPI2C_DEFAULT) /* GPIO_AD_B0_13 */
+#define GPIO_LPI2C4_SCL      (GPIO_LPI2C4_SCL_1|IOMUX_LPI2C_DEFAULT) /* GPIO_AD_B0_12 */
+
+/* LPSPI3
+ *
+ *   pin 39 GPIO_AD_B1_13  LPSPI3_SDI
+ *   pin 26 GPIO_AD_B1_14  LPSPI3_SDO
+ *   pin 27 GPIO_AD_B1_15  LPSPI3_SCK
+ */
+
+#define GPIO_LPSPI3_MOSI     (GPIO_LPSPI3_SDI_1|IOMUX_LPSPI_DEFAULT)  /* GPIO_AD_B1_13 */
+#define GPIO_LPSPI3_MISO     (GPIO_LPSPI3_SDO_1|IOMUX_LPSPI_DEFAULT)  /* GPIO_AD_B1_14 */
+#define GPIO_LPSPI3_SCK      (GPIO_LPSPI3_SCK_1|IOMUX_LPSPI_DEFAULT)  /* GPIO_AD_B1_15 */
+
+/* LPSPI4
+ *
+ *   pin 12 GPIO_B0_01  LPSPI3_SDI
+ *   pin 11 GPIO_B0_02  LPSPI3_SDO
+ *   pin 13 GPIO_B0_03  LPSPI3_SCK
+ */
+
+#define GPIO_LPSPI4_MOSI     (GPIO_LPSPI4_SDI_2|IOMUX_LPSPI_DEFAULT)  /* GPIO_B0_01 */
+#define GPIO_LPSPI4_MISO     (GPIO_LPSPI4_SDO_2|IOMUX_LPSPI_DEFAULT)  /* GPIO_B0_02 */
+#define GPIO_LPSPI4_SCK      (GPIO_LPSPI4_SCK_2|IOMUX_LPSPI_DEFAULT)  /* GPIO_B0_03 */
+
+/* FlexCAN */
+
+#define GPIO_FLEXCAN1_TX     (GPIO_FLEXCAN1_TX_1|IOMUX_CAN_DEFAULT) /* GPIO_AD_B1_08 */
+#define GPIO_FLEXCAN1_RX     (GPIO_FLEXCAN1_RX_1|IOMUX_CAN_DEFAULT) /* GPIO_AD_B1_09 */
+
+#define GPIO_FLEXCAN2_TX     (GPIO_FLEXCAN2_TX_1|IOMUX_CAN_DEFAULT) /* GPIO_AD_B0_02 */
+#define GPIO_FLEXCAN2_RX     (GPIO_FLEXCAN2_RX_1|IOMUX_CAN_DEFAULT) /* GPIO_AD_B0_03 */
+
+#define GPIO_FLEXCAN3_TX     (GPIO_FLEXCAN3_TX_3|IOMUX_CAN_DEFAULT) /* GPIO_EMC_36 */
+#define GPIO_FLEXCAN3_RX     (GPIO_FLEXCAN3_RX_3|IOMUX_CAN_DEFAULT) /* GPIO_EMC_37 */
+
+/****************************************************************************
+ * 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_TEENSY_4_INCLUDE_BOARD_H */
diff --git a/boards/arm/imxrt/teensy-4.x/kernel/Makefile b/boards/arm/imxrt/teensy-4.x/kernel/Makefile
new file mode 100644
index 0000000..0e17d49
--- /dev/null
+++ b/boards/arm/imxrt/teensy-4.x/kernel/Makefile
@@ -0,0 +1,103 @@
+############################################################################
+# boards/arm/imxrt/teensy-4.x/kernel/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)/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/teensy-4.x/kernel/imxrt_userspace.c b/boards/arm/imxrt/teensy-4.x/kernel/imxrt_userspace.c
new file mode 100644
index 0000000..557da3d
--- /dev/null
+++ b/boards/arm/imxrt/teensy-4.x/kernel/imxrt_userspace.c
@@ -0,0 +1,116 @@
+/****************************************************************************
+ * boards/arm/imxrt/teensy-4.x/kernel/imxrt_userspace.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 <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/teensy-4.x/scripts/Make.defs b/boards/arm/imxrt/teensy-4.x/scripts/Make.defs
new file mode 100644
index 0000000..2757a0e
--- /dev/null
+++ b/boards/arm/imxrt/teensy-4.x/scripts/Make.defs
@@ -0,0 +1,96 @@
+############################################################################
+# boards/arm/imxrt/teensy-4.x/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
+
+CC = $(CROSSDEV)gcc
+CXX = $(CROSSDEV)g++
+CPP = $(CROSSDEV)gcc -E
+LD = $(CROSSDEV)ld
+STRIP = $(CROSSDEV)strip --strip-unneeded
+AR = $(CROSSDEV)ar rcs
+NM = $(CROSSDEV)nm
+OBJCOPY = $(CROSSDEV)objcopy
+OBJDUMP = $(CROSSDEV)objdump
+
+ARCHCCVERSION = ${shell $(CC) -v 2>&1 | sed -n '/^gcc version/p' | sed -e 's/^gcc version \([0-9\.]\)/\1/g' -e 's/[-\ ].*//g' -e '1q'}
+ARCHCCMAJOR = ${shell echo $(ARCHCCVERSION) | cut -d'.' -f1}
+
+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/teensy-4.x/scripts/flash-ocram.ld b/boards/arm/imxrt/teensy-4.x/scripts/flash-ocram.ld
new file mode 100644
index 0000000..c8b25d8
--- /dev/null
+++ b/boards/arm/imxrt/teensy-4.x/scripts/flash-ocram.ld
@@ -0,0 +1,186 @@
+/****************************************************************************
+ * boards/arm/imxrt/teensy-4.x/scripts/flash-ocram.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 */
+
+/* The imxrt162-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 1062 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 = 0x60000000, LENGTH = 7M
+  flashxip (rx)  : ORIGIN = 0x60700000, 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/teensy-4.x/scripts/flash.ld b/boards/arm/imxrt/teensy-4.x/scripts/flash.ld
new file mode 100644
index 0000000..572afe8
--- /dev/null
+++ b/boards/arm/imxrt/teensy-4.x/scripts/flash.ld
@@ -0,0 +1,139 @@
+/****************************************************************************
+ * boards/arm/imxrt/teensy-4.x/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 = 0x60000000, LENGTH = 1984K
+  sram  (rwx) : ORIGIN = 0x20200000, LENGTH = 512K
+  itcm  (rwx) : ORIGIN = 0x00000000, LENGTH = 512K
+  dtcm  (rwx) : ORIGIN = 0x20000000, LENGTH = 512K
+}
+
+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/teensy-4.x/scripts/kernel-space.ld b/boards/arm/imxrt/teensy-4.x/scripts/kernel-space.ld
new file mode 100644
index 0000000..1f9cffc
--- /dev/null
+++ b/boards/arm/imxrt/teensy-4.x/scripts/kernel-space.ld
@@ -0,0 +1,104 @@
+/****************************************************************************
+ * boards/arm/imxrt/teensy-4.x/scripts/kernel-space.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.
+ *
+ ****************************************************************************/
+
+/* 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(.);
+    *(.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/teensy-4.x/scripts/memory.ld b/boards/arm/imxrt/teensy-4.x/scripts/memory.ld
new file mode 100644
index 0000000..9f6606c
--- /dev/null
+++ b/boards/arm/imxrt/teensy-4.x/scripts/memory.ld
@@ -0,0 +1,67 @@
+/****************************************************************************
+ * boards/arm/imxrt/teensy-4.x/scripts/memory.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.
+ *
+ ****************************************************************************/
+
+/* The i.MXRT1060-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/teensy-4.x/scripts/user-space.ld b/boards/arm/imxrt/teensy-4.x/scripts/user-space.ld
new file mode 100644
index 0000000..65695c0
--- /dev/null
+++ b/boards/arm/imxrt/teensy-4.x/scripts/user-space.ld
@@ -0,0 +1,120 @@
+/****************************************************************************
+ * boards/arm/imxrt/teensy-4.x/scripts/user-space.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.
+ *
+ ****************************************************************************/
+
+/* 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(.);
+    *(.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/teensy-4.x/src/Makefile b/boards/arm/imxrt/teensy-4.x/src/Makefile
new file mode 100644
index 0000000..5de101b
--- /dev/null
+++ b/boards/arm/imxrt/teensy-4.x/src/Makefile
@@ -0,0 +1,57 @@
+############################################################################
+# boards/arm/imxrt/teensy-4.x/sec/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_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_IMXRT_LPSPI),y)
+CSRCS += imxrt_spi.c
+endif
+
+ifeq ($(CONFIG_IMXRT_LPI2C),y)
+CSRCS += imxrt_i2c.c
+endif
+
+ifeq ($(CONFIG_IMXRT_FLEXCAN),y)
+CSRCS += imxrt_flexcan.c
+endif
+
+ifeq ($(CONFIG_IMXRT_ENET),y)
+CSRCS += imxrt_ethernet.c
+endif
+
+ifeq ($(CONFIG_IMXRT_ADC),y)
+CSRCS += imxrt_adc.c
+endif
+
+include $(TOPDIR)/boards/Board.mk
diff --git a/boards/arm/imxrt/teensy-4.x/src/imxrt_adc.c b/boards/arm/imxrt/teensy-4.x/src/imxrt_adc.c
new file mode 100644
index 0000000..5db0732
--- /dev/null
+++ b/boards/arm/imxrt/teensy-4.x/src/imxrt_adc.c
@@ -0,0 +1,112 @@
+/****************************************************************************
+ * boards/arm/imxrt/teensy-4.x/src/imxrt_adc.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 <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"
+#include "teensy-4.h"
+
+#ifdef CONFIG_IMXRT_ADC
+
+/* channels 1 and 2 have the same number of pins on Teensy */
+
+#define ADC_NCHANNELS 16
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+static const uint8_t g_chanlist[ADC_NCHANNELS] =
+  {
+    0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15
+  };
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: imxrt_adc_setup
+ *
+ * Description:
+ *   Initialize and register the ADC driver.
+ *
+ ****************************************************************************/
+
+int imxrt_adc_initialize(void)
+{
+  struct adc_dev_s *adc;
+  int ret;
+
+  /* Call imxrt_adcinitialize() to get an instance of the ADC interface */
+  #ifdef CONFIG_IMXRT_ADC1
+      adc = imxrt_adcinitialize(1, g_chanlist, ADC_NCHANNELS);
+      if (adc == NULL)
+        {
+          aerr("ERROR: Failed to get ADC1 interface\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_chanlist, ADC_NCHANNELS);
+      if (adc == NULL)
+        {
+          aerr("ERROR: Failed to get ADC2 interface\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
+
+  return OK;
+}
+
+#endif /* CONFIG_IMXRT_ADC */
diff --git a/boards/arm/imxrt/teensy-4.x/src/imxrt_appinit.c b/boards/arm/imxrt/teensy-4.x/src/imxrt_appinit.c
new file mode 100644
index 0000000..09cb334
--- /dev/null
+++ b/boards/arm/imxrt/teensy-4.x/src/imxrt_appinit.c
@@ -0,0 +1,99 @@
+/****************************************************************************
+ * boards/arm/imxrt/teensy-4.x/src/imxrt_appinit.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 <sys/types.h>
+#include <syslog.h>
+
+#include <nuttx/board.h>
+
+#include "teensy-4.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)
+{
+  int ret;
+  #ifdef HAVE_LEDS
+  /* Register the LED driver */
+
+  ret = userled_lower_initialize(LED_DRIVER_PATH);
+  if (ret < 0)
+    {
+      syslog(LOG_ERR, "ERROR: userled_lower_initialize() failed: %d\n", ret);
+      return ret;
+    }
+#endif
+
+#if defined(CONFIG_IMXRT_LPSPI1) || defined(CONFIG_IMXRT_LPSPI2) || \
+    defined(CONFIG_IMXRT_LPSPI3) || defined(CONFIG_IMXRT_LPSPI4)
+  imxrt_spidev_initialize();
+#endif
+
+#  ifndef CONFIG_BOARD_LATE_INITIALIZE
+  /* Perform board initialization */
+
+  return imxrt_bringup();
+#  else
+  return OK;
+#  endif
+
+  UNUSED(ret);
+}
+
+#endif /* CONFIG_LIB_BOARDCTL */
diff --git a/boards/arm/imxrt/teensy-4.x/src/imxrt_autoleds.c b/boards/arm/imxrt/teensy-4.x/src/imxrt_autoleds.c
new file mode 100644
index 0000000..def7598
--- /dev/null
+++ b/boards/arm/imxrt/teensy-4.x/src/imxrt_autoleds.c
@@ -0,0 +1,165 @@
+/****************************************************************************
+ * boards/arm/imxrt/teensy-4.x/src/imxrt_autoleds.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.
+ *
+ ****************************************************************************/
+
+/* 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(D8)
+ *
+ * Only a single LED, D8, 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 "teensy-4.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 ledon = true;
+
+  switch (led)
+    {
+    case 0:                    /* LED Off */
+      ledon = false;
+      break;
+
+    case 2:                    /* LED No change */
+      return;
+
+    case 1:                    /* LED On */
+    case 3:                    /* LED On */
+      break;
+    }
+
+  imxrt_gpio_write(GPIO_LED, ledon);    /* 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, false);    /* Low illuminates */
+}
+
+#endif                                 /* CONFIG_ARCH_LEDS */
diff --git a/boards/arm/imxrt/teensy-4.x/src/imxrt_boot.c b/boards/arm/imxrt/teensy-4.x/src/imxrt_boot.c
new file mode 100644
index 0000000..4572f65
--- /dev/null
+++ b/boards/arm/imxrt/teensy-4.x/src/imxrt_boot.c
@@ -0,0 +1,118 @@
+/****************************************************************************
+ * boards/arm/imxrt/teensy-4.x/src/imxrt_boot.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 <nuttx/board.h>
+#include <arch/board/board.h>
+
+#include "imxrt_start.h"
+#include "teensy-4.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);
+
+  for (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);
+       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/teensy-4.x/src/imxrt_bringup.c b/boards/arm/imxrt/teensy-4.x/src/imxrt_bringup.c
new file mode 100644
index 0000000..6cbaa05
--- /dev/null
+++ b/boards/arm/imxrt/teensy-4.x/src/imxrt_bringup.c
@@ -0,0 +1,182 @@
+/****************************************************************************
+ * boards/arm/imxrt/teensy-4.x/src/imxrt_bringup.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 <sys/mount.h>
+#include <sys/types.h>
+#include <debug.h>
+
+#include <syslog.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>
+#include <nuttx/usb/cdcacm.h>
+
+#ifdef CONFIG_IMXRT_USDHC
+#  include "imxrt_usdhc.h"
+#endif
+
+#ifdef CONFIG_USBMONITOR
+#  include <nuttx/usb/usbmonitor.h>
+#endif
+
+#ifdef CONFIG_VIDEO_FB
+#  include <nuttx/video/fb.h>
+#endif
+
+#include "imxrt_enet.h"
+#include "teensy-4.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_IMXRT_USDHC) && (CONFIG_TEENSY_41) 
+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 = 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)
+  imxrt_i2c_setup();
+#endif
+
+#ifdef CONFIG_IMXRT_USDHC
+  /* Initialize SDHC-base MMC/SD card support */
+
+  nsh_sdmmc_initialize();
+#endif
+
+#if defined(CONFIG_IMXRT_ENET) && defined(CONFIG_NETDEV_LATEINIT)
+  ret = imxrt_netinitialize(0);
+#endif
+
+#if defined(CONFIG_IMXRT_FLEXCAN) && defined(CONFIG_NETDEV_LATEINIT)
+  ret = imxrt_can_setup();
+  if (ret < 0)
+    {
+      syslog(LOG_ERR, "ERROR: imxrt_can_setup() failed: %d\n", ret);
+      return ret;
+    }
+#endif
+
+#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_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
+
+  UNUSED(ret);
+  return OK;
+}
diff --git a/boards/arm/imxrt/teensy-4.x/src/imxrt_ethernet.c b/boards/arm/imxrt/teensy-4.x/src/imxrt_ethernet.c
new file mode 100644
index 0000000..74d78f6
--- /dev/null
+++ b/boards/arm/imxrt/teensy-4.x/src/imxrt_ethernet.c
@@ -0,0 +1,275 @@
+/****************************************************************************
+ * boards/arm/imxrt/teensy-4.x/src/imxrt_ethernet.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>
+
+/* 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 "teensy-4.h"
+
+#if defined (CONFIG_IMXRT_ENET) && (CONFIG_TEENSY_41)
+
+/****************************************************************************
+ * 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();
+
+  /* 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(flags);
+  return OK;
+}
+#endif /* CONFIG_IMXRT_GPIO1_0_15_IRQ */
+
+#endif /* CONFIG_IMXRT_ENET && CONFIG_TEENSY_41 */
diff --git a/boards/arm/imxrt/teensy-4.x/src/imxrt_flexcan.c b/boards/arm/imxrt/teensy-4.x/src/imxrt_flexcan.c
new file mode 100644
index 0000000..d12d133
--- /dev/null
+++ b/boards/arm/imxrt/teensy-4.x/src/imxrt_flexcan.c
@@ -0,0 +1,83 @@
+/****************************************************************************
+ * boards/arm/imxrt/teensy-4.x/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 "teensy-4.h"
+
+#if defined(CONFIG_IMXRT_FLEXCAN) && defined(CONFIG_NETDEV_LATEINIT)
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: imxrt_can_setup
+ *
+ * Description:
+ *  Initialize CAN and register the CAN device
+ *
+ ****************************************************************************/
+
+int imxrt_can_setup(void)
+{
+  int ret;
+#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
+    ret = imxrt_caninitialize(1);
+  if (ret < 0)
+    {
+      canerr("ERROR: Failed to get CAN interface\n");
+      return -ENODEV;
+    }
+#else
+  return -ENODEV;
+#endif
+  UNUSED(ret);
+  return OK;
+}
+
+#endif /* CONFIG_IMXRT_FLEXCAN */
diff --git a/boards/arm/imxrt/teensy-4.x/src/imxrt_flexspi_nor_boot.c b/boards/arm/imxrt/teensy-4.x/src/imxrt_flexspi_nor_boot.c
new file mode 100644
index 0000000..dff0685
--- /dev/null
+++ b/boards/arm/imxrt/teensy-4.x/src/imxrt_flexspi_nor_boot.c
@@ -0,0 +1,58 @@
+/****************************************************************************
+ * boards/arm/imxrt/teensy-4.x/src/imxrt_flexspi_nor_boot.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 "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
+ ****************************************************************************/
\ No newline at end of file
diff --git a/boards/arm/imxrt/teensy-4.x/src/imxrt_flexspi_nor_boot.h b/boards/arm/imxrt/teensy-4.x/src/imxrt_flexspi_nor_boot.h
new file mode 100644
index 0000000..78fe4e3
--- /dev/null
+++ b/boards/arm/imxrt/teensy-4.x/src/imxrt_flexspi_nor_boot.h
@@ -0,0 +1,157 @@
+/****************************************************************************
+ * boards/arm/imxrt/teensy-4.x/src/imxrt_flexspi_nor_boot.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
+ *
+ *   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.
+ *
+ ****************************************************************************/
+
+#ifndef __BOARDS_ARM_IMXRT_TEENSY_4X_SRC_IMXRT_FLEXSPI_NOR_BOOT_H
+#  define __BOARDS_ARM_IMXRT_TEENSY_4X_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                 (0x41)
+#  define DCD_ARRAY_SIZE              1
+
+#  define FLASH_BASE                  0x60000000
+#  define FLASH_END                   0x7f7fffff
+
+/* 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)
+
+#  define DCD_ADDRESS                 0
+#  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 */
+
+    uint32_t hdr;
+
+    /* Absolute address of the first instr. 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 */
+
+    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;
+extern const uint8_t g_dcd_data[];
+extern const uint32_t _vectors[];
+
+#endif                             /* __BOARDS_ARM_IMXRT_TEENSY_4_SRC_IMXRT_FLEXSPI_NOR_BOOT_H */
diff --git a/boards/arm/imxrt/teensy-4.x/src/imxrt_flexspi_nor_flash.c b/boards/arm/imxrt/teensy-4.x/src/imxrt_flexspi_nor_flash.c
new file mode 100644
index 0000000..c153676
--- /dev/null
+++ b/boards/arm/imxrt/teensy-4.x/src/imxrt_flexspi_nor_flash.c
@@ -0,0 +1,137 @@
+/****************************************************************************
+ * boards/arm/imxrt/teensy-4.x/src/imxrt_flexspi_nor_flash.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 "imxrt_flexspi_nor_flash.h"
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+#if defined (CONFIG_TEENSY4_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_SCKPAD,
+    .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_60MHz,
+    #ifdef CONFIG_TEENSY_40
+    .sflash_a1size = 2u * 1024u * 1024u,
+    #endif
+    #ifdef CONFIG_TEENSY_41
+    .sflash_a1size = 8u * 1024u * 1024u,
+    #endif
+    .data_valid_time =
+    {
+      0u, 0u
+    },
+    .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),
+      0x00000000,
+      0x00000000,
+
+      FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x05,
+                      READ_SDR, FLEXSPI_1PAD, 0x04),
+      0x00000000,
+      0x00000000,
+      0x00000000,
+
+      0x00000000,
+      0x00000000,
+      0x00000000,
+      0x00000000,
+
+      FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x01, STOP, FLEXSPI_1PAD, 0x0),
+      0x00000000,
+      0x00000000,
+      0x00000000,
+
+      0x00000000,
+      0x00000000,
+      0x00000000,
+      0x00000000,
+
+      FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x20,
+                      RADDR_SDR, FLEXSPI_1PAD, 0x18),
+      0x00000000,
+      0x00000000,
+      0x00000000,
+
+      0x00000000,
+      0x00000000,
+      0x00000000,
+      0x00000000,
+
+      0x00000000,
+      0x00000000,
+      0x00000000,
+      0x00000000,
+
+      FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0xd8,
+                      RADDR_SDR, FLEXSPI_1PAD, 0x18),
+      0x00000000,
+      0x00000000,
+      0x00000000,
+
+      FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x02,
+                      RADDR_SDR, FLEXSPI_1PAD, 0x18),
+      FLEXSPI_LUT_SEQ(WRITE_SDR, FLEXSPI_1PAD, 0x04,
+                      STOP, FLEXSPI_1PAD, 0x0),
+      0x00000000,
+      0x00000000,
+
+      0x00000000,
+      0x00000000,
+      0x00000000,
+      0x00000000,
+
+      FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x60, STOP, FLEXSPI_1PAD, 0x0),
+    },
+  },
+
+  .page_size = 256u,
+  .sector_size = 4u * 1024u,
+  .blocksize = 64u * 1024u,
+  .is_uniform_blocksize = false,
+};
+#else
+#  error Boot Flash type not chosen!
+#endif
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
\ No newline at end of file
diff --git a/boards/arm/imxrt/teensy-4.x/src/imxrt_flexspi_nor_flash.h b/boards/arm/imxrt/teensy-4.x/src/imxrt_flexspi_nor_flash.h
new file mode 100644
index 0000000..e580db0
--- /dev/null
+++ b/boards/arm/imxrt/teensy-4.x/src/imxrt_flexspi_nor_flash.h
@@ -0,0 +1,364 @@
+/****************************************************************************
+ * boards/arm/imxrt/teensy-4.x/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
+ *
+ *   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.
+ *
+ ****************************************************************************/
+#ifndef __BOARDS_ARM_IMXRT_TEENSY_4X_SRC_IMXRT_FLEXSPI_NOR_FLASH_H
+#  define __BOARDS_ARM_IMXRT_TEENSY_4X_SRC_IMXRT_FLEXSPI_NOR_FLASH_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#  include <stdint.h>
+#  include <stdbool.h>
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+/* FLEXSPI memory config block related definitions */
+
+#  define FLEXSPI_CFG_BLK_TAG         (0x42464346ul)
+#  define FLEXSPI_CFG_BLK_VERSION     (0x56010100ul)
+#  define FLEXSPI_CFG_BLK_SIZE        (512)
+
+/* FLEXSPI Feature related definitions */
+
+#  define FLEXSPI_FEATURE_HAS_PARALLEL_MODE 1
+
+/* Lookup table related definitions */
+
+#  define CMD_INDEX_READ              0
+#  define CMD_INDEX_READSTATUS        1
+#  define CMD_INDEX_WRITEENABLE       2
+#  define CMD_INDEX_WRITE             4
+
+#  define CMD_LUT_SEQ_IDX_READ        0
+#  define CMD_LUT_SEQ_IDX_READSTATUS  1
+#  define CMD_LUT_SEQ_IDX_WRITEENABLE 3
+#  define CMD_LUT_SEQ_IDX_WRITE       9
+
+#  define CMD_SDR                     0x01
+#  define CMD_DDR                     0x21
+#  define RADDR_SDR                   0x02
+#  define RADDR_DDR                   0x22
+#  define CADDR_SDR                   0x03
+#  define CADDR_DDR                   0x23
+#  define MODE1_SDR                   0x04
+#  define MODE1_DDR                   0x24
+#  define MODE2_SDR                   0x05
+#  define MODE2_DDR                   0x25
+#  define MODE4_SDR                   0x06
+#  define MODE4_DDR                   0x26
+#  define MODE8_SDR                   0x07
+#  define MODE8_DDR                   0x27
+#  define WRITE_SDR                   0x08
+#  define WRITE_DDR                   0x28
+#  define READ_SDR                    0x09
+#  define READ_DDR                    0x29
+#  define LEARN_SDR                   0x0a
+#  define LEARN_DDR                   0x2a
+#  define DATSZ_SDR                   0x0b
+#  define DATSZ_DDR                   0x2b
+#  define DUMMY_SDR                   0x0c
+#  define DUMMY_DDR                   0x2c
+#  define DUMMY_RWDS_SDR              0x0d
+#  define DUMMY_RWDS_DDR              0x2d
+#  define JMP_ON_CS                   0x1f
+#  define STOP                        0
+
+#  define FLEXSPI_1PAD                0
+#  define FLEXSPI_2PAD                1
+#  define FLEXSPI_4PAD                2
+#  define FLEXSPI_8PAD                3
+
+#  define FLEXSPI_LUT_OPERAND0_MASK   (0xffu)
+#  define FLEXSPI_LUT_OPERAND0_SHIFT  (0U)
+#  define FLEXSPI_LUT_OPERAND0(x)     (((uint32_t) \
+                                     (((uint32_t)(x)) << FLEXSPI_LUT_OPERAND0_SHIFT)) & \
+                                     FLEXSPI_LUT_OPERAND0_MASK)
+#  define FLEXSPI_LUT_NUM_PADS0_MASK  (0x300u)
+#  define FLEXSPI_LUT_NUM_PADS0_SHIFT (8u)
+#  define FLEXSPI_LUT_NUM_PADS0(x)    (((uint32_t) \
+                                     (((uint32_t)(x)) << FLEXSPI_LUT_NUM_PADS0_SHIFT)) & \
+                                     FLEXSPI_LUT_NUM_PADS0_MASK)
+#  define FLEXSPI_LUT_OPCODE0_MASK    (0xfc00u)
+#  define FLEXSPI_LUT_OPCODE0_SHIFT   (10u)
+#  define FLEXSPI_LUT_OPCODE0(x)      (((uint32_t) \
+                                     (((uint32_t)(x)) << FLEXSPI_LUT_OPCODE0_SHIFT)) & \
+                                     FLEXSPI_LUT_OPCODE0_MASK)
+#  define FLEXSPI_LUT_OPERAND1_MASK   (0xff0000u)
+#  define FLEXSPI_LUT_OPERAND1_SHIFT  (16U)
+#  define FLEXSPI_LUT_OPERAND1(x)     (((uint32_t) \
+                                     (((uint32_t)(x)) << FLEXSPI_LUT_OPERAND1_SHIFT)) & \
+                                     FLEXSPI_LUT_OPERAND1_MASK)
+#  define FLEXSPI_LUT_NUM_PADS1_MASK  (0x3000000u)
+#  define FLEXSPI_LUT_NUM_PADS1_SHIFT (24u)
+#  define FLEXSPI_LUT_NUM_PADS1(x)    (((uint32_t) \
+                                     (((uint32_t)(x)) << FLEXSPI_LUT_NUM_PADS1_SHIFT)) & \
+                                     FLEXSPI_LUT_NUM_PADS1_MASK)
+#  define FLEXSPI_LUT_OPCODE1_MASK    (0xfc000000u)
+#  define FLEXSPI_LUT_OPCODE1_SHIFT   (26u)
+#  define FLEXSPI_LUT_OPCODE1(x)      (((uint32_t)(((uint32_t)(x)) << FLEXSPI_LUT_OPCODE1_SHIFT)) & \
+                                    FLEXSPI_LUT_OPCODE1_MASK)
+
+#  define FLEXSPI_LUT_SEQ(cmd0, pad0, op0, cmd1, pad1, op1)  \
+    (FLEXSPI_LUT_OPERAND0(op0) | FLEXSPI_LUT_NUM_PADS0(pad0) | \
+     FLEXSPI_LUT_OPCODE0(cmd0) | FLEXSPI_LUT_OPERAND1(op1) | \
+     FLEXSPI_LUT_NUM_PADS1(pad1) | FLEXSPI_LUT_OPCODE1(cmd1))
+
+/*  */
+
+#  define NOR_CMD_INDEX_READ          CMD_INDEX_READ
+#  define NOR_CMD_INDEX_READSTATUS    CMD_INDEX_READSTATUS
+#  define NOR_CMD_INDEX_WRITEENABLE   CMD_INDEX_WRITEENABLE
+#  define NOR_CMD_INDEX_ERASESECTOR   3
+#  define NOR_CMD_INDEX_PAGEPROGRAM   CMD_INDEX_WRITE
+#  define NOR_CMD_INDEX_CHIPERASE     5
+#  define NOR_CMD_INDEX_DUMMY         6
+#  define NOR_CMD_INDEX_ERASEBLOCK    7
+
+/*  READ LUT sequence id in lookupTable stored in config block */
+
+#  define NOR_CMD_LUT_SEQ_IDX_READ    CMD_LUT_SEQ_IDX_READ
+
+/* Read Status LUT sequence id in lookupTable stored in config block */
+
+#  define NOR_CMD_LUT_SEQ_IDX_READSTATUS CMD_LUT_SEQ_IDX_READSTATUS
+
+/* 2  Read status DPI/QPI/OPI sequence id in LUT stored in config block */
+
+#  define NOR_CMD_LUT_SEQ_IDX_READSTATUS_XPI 2
+
+/* 3  Write Enable sequence id in lookupTable stored in config block */
+
+#  define NOR_CMD_LUT_SEQ_IDX_WRITEENABLE CMD_LUT_SEQ_IDX_WRITEENABLE
+
+/* 4  Write Enable DPI/QPI/OPI sequence id in LUT stored in config block */
+
+#  define NOR_CMD_LUT_SEQ_IDX_WRITEENABLE_XPI 4
+
+/* 5  Erase Sector sequence id in lookupTable stored in config block */
+
+#  define NOR_CMD_LUT_SEQ_IDX_ERASESECTOR 5
+
+/* 8 Erase Block sequence id in lookupTable stored in config block */
+
+#  define NOR_CMD_LUT_SEQ_IDX_ERASEBLOCK 8
+
+/* 9  Program sequence id in lookupTable stored in config block */
+
+#  define NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM CMD_LUT_SEQ_IDX_WRITE
+
+/* 11 Chip Erase sequence in lookupTable id stored in config block */
+
+#  define NOR_CMD_LUT_SEQ_IDX_CHIPERASE 11
+
+/* 13 Read SFDP sequence in lookupTable id stored in config block */
+
+#  define NOR_CMD_LUT_SEQ_IDX_READ_SFDP 13
+
+/* 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 LUT stored in config blobk */
+
+#  define NOR_CMD_LUT_SEQ_IDX_EXIT_NOCMD 15
+
+/****************************************************************************
+ * Public Types
+ ****************************************************************************/
+
+/* Definitions for FlexSPI Serial Clock Frequency */
+
+enum flexspi_serial_clkfreq_e
+  {
+    FLEXSPI_SERIAL_CLKFREQ_30MHz = 1,
+    FLEXSPI_SERIAL_CLKFREQ_50MHz = 2,
+    FLEXSPI_SERIAL_CLKFREQ_60MHz = 3,
+    FLEXSPI_SERIAL_CLKFREQ_75MHz = 4,
+    FLEXSPI_SERIAL_CLKFREQ_80MHz = 5,
+    FLEXSPI_SERIAL_CLKFREQ_100MHz = 6,
+    FLEXSPI_SERIAL_CLKFREQ_133MHz = 7,
+    FLEXSPI_SERIAL_CLKFREQ_166MHz = 8,
+    FLEXSPI_SERIAL_CLKFREQ_200MHz = 9,
+  };
+
+/* FlexSPI clock configuration type */
+
+enum flexspi_serial_clockmode_e
+  {
+    FLEXSPI_CLKMODE_SDR,
+    FLEXSPI_CLKMODE_DDR,
+  };
+
+/* FlexSPI Read Sample Clock Source definition */
+
+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,
+  };
+
+/*  Misc feature bit definitions */
+
+enum flash_misc_feature_e
+  {
+    FLEXSPIMISC_OFFSET_DIFFCLKEN = 0,   /* Bit for Differential clock enable */
+    FLEXSPIMISC_OFFSET_CK2EN = 1,       /* Bit for CK2 enable */
+    FLEXSPIMISC_OFFSET_PARALLELEN = 2,  /* Bit for Parallel mode enable */
+
+    FLEXSPIMISC_OFFSET_WORD_ADDRESSABLE_EN = 3, /* Bit for Word Addressable
+                                                 * enable */
+    FLEXSPIMISC_OFFSET_SAFECONFIG_FREQ_EN = 4,  /* Bit for Safe Configuration
+                                                 * Frequency enable */
+
+    FLEXSPIMISC_OFFSET_PAD_SETTING_OVERRIDE_EN = 5,     /* Bit for Pad setting
+                                                         * override enable */
+
+    FLEXSPIMISC_OFFSET_DDR_MODE_EN = 6, /* Bit for DDR clock confiuration
+                                         * indication. */
+  };
+
+/* Flash Type Definition */
+
+enum flash_flash_type_e
+  {
+    FLEXSPI_DEVICE_TYPE_SERIAL_NOR = 1,  /* Flash devices are Serial NOR */
+    FLEXSPI_DEVICE_TYPE_SERIAL_NAND = 2, /* Flash devices are Serial
+                                         * NAND */
+    FLEXSPI_DEVICE_TYPE_SERIAL_RAM = 3,  /* Flash devices are Serial
+                                         * RAM/HyperFLASH */
+
+    FLEXSPI_DEVICE_TYPE_MCP_NOR_NAND = 0x12,    /* Flash device is MCP device,
+                                                 * A1 is Serial NOR, A2 is
+                                                 * Serial NAND */
+    FLEXSPI_DEVICE_TYPE_MCP_NOR_RAM = 0x13,     /* Flash device is MCP device,
+                                                 * A1 is Serial NOR, A2 is
+                                                 * Serial RAMs */
+  };
+
+/* Flash Pad Definitions */
+
+enum flash_flash_pad_e
+  {
+    SERIAL_FLASH_1PAD = 1,
+    SERIAL_FLASH_2PADS = 2,
+    SERIAL_FLASH_4PADS = 4,
+    SERIAL_FLASH_8PADS = 8,
+  };
+
+/* Flash Configuration Command Type */
+
+enum flash_config_cmd_e
+  {
+    DEVICE_CONFIG_CMD_TYPE_GENERIC,     /* Generic command, for example:
+                                         * configure dummy cycles, drive
+                                         * strength, etc */
+    DEVICE_CONFIG_CMD_TYPE_QUADENABLE,  /* Quad Enable command */
+    DEVICE_CONFIG_CMD_TYPE_SPI2XPI,     /* Switch from SPI to DPI/QPI/OPI mode */
+    DEVICE_CONFIG_CMD_TYPE_XPI2SPI,     /* Switch from DPI/QPI/OPI to SPI mode */
+    DEVICE_CONFIG_CMD_TYPE_SPI2NO_CMD,  /* Switch to 0-4-4/0-8-8 mode */
+    DEVICE_CONFIG_CMD_TYPE_RESET,       /* Reset device command */
+  };
+
+/* FlexSPI LUT Sequence structure */
+
+struct flexspi_lut_seq_s
+  {
+    uint8_t seq_num;            /* Sequence Number, valid number: 1-16 */
+    uint8_t seq_id;             /* Sequence Index, valid number: 0-15 */
+    uint16_t reserved;
+  };
+
+/* FlexSPI Memory Configuration Block */
+
+struct flexspi_mem_config_s
+  {
+    uint32_t tag;
+    uint32_t version;
+    uint32_t reserved0;
+    uint8_t read_sample_clksrc;
+    uint8_t cs_hold_time;
+    uint8_t cs_setup_time;
+    uint8_t column_address_width;       /* [0x00f-0x00f] Column Address with,
+                                         * for HyperBus protocol, it is fixed
+                                         * to 3, For Serial NAND, need to refer
+                                         * to datasheet */
+    uint8_t device_mode_cfg_enable;
+    uint8_t device_mode_type;
+    uint16_t wait_time_cfg_commands;
+    struct flexspi_lut_seq_s device_mode_seq;
+    uint32_t device_mode_arg;
+    uint8_t config_cmd_enable;
+    uint8_t config_mode_type[3];
+    struct flexspi_lut_seq_s config_cmd_seqs[3];
+    uint32_t reserved1;
+    uint32_t config_cmd_args[3];
+    uint32_t reserved2;
+    uint32_t controller_misc_option;
+    uint8_t device_type;
+    uint8_t sflash_pad_type;
+    uint8_t serial_clk_freq;
+    uint8_t lut_custom_seq_enable;
+    uint32_t reserved3[2];
+    uint32_t sflash_a1size;
+    uint32_t sflash_a2size;
+    uint32_t sflash_b1size;
+    uint32_t sflash_b2size;
+    uint32_t cspad_setting_override;
+    uint32_t sclkpad_setting_override;
+    uint32_t datapad_setting_override;
+    uint32_t dqspad_setting_override;
+    uint32_t timeout_in_ms;
+    uint32_t command_interval;
+    uint16_t data_valid_time[2];
+    uint16_t busy_offset;
+    uint16_t busybit_polarity;
+    uint32_t lookup_table[64];
+    struct flexspi_lut_seq_s lut_customseq[12];
+    uint32_t reserved4[4];
+  };
+
+/* Serial NOR configuration block */
+
+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 */
+  };
+
+#endif  /* __BOARDS_ARM_IMXRT_TEENSY_4_SRC_IMXRT_FLEXSPI_NOR_FLASH_H */
diff --git a/boards/arm/imxrt/teensy-4.x/src/imxrt_i2c.c b/boards/arm/imxrt/teensy-4.x/src/imxrt_i2c.c
new file mode 100644
index 0000000..6b4fff0
--- /dev/null
+++ b/boards/arm/imxrt/teensy-4.x/src/imxrt_i2c.c
@@ -0,0 +1,114 @@
+/****************************************************************************
+ * boards/arm/imxrt/teensy-4.x/src/imxrt_i2c.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/i2c/i2c_master.h>
+#include <nuttx/sensors/bmp280.h>
+#include <imxrt_lpi2c.h>
+
+#include "teensy-4.h"
+
+#ifdef CONFIG_IMXRT_LPI2C
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: imxrt_i2c_register
+ *
+ * Description:
+ *  Register I2C driver
+ *
+ ****************************************************************************/
+
+#ifdef CONFIG_I2C_DRIVER
+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);
+        }
+    }
+
+  #ifdef SENSORS_BMP280
+  if (CONFIG_BMP280_LPI2C == bus)
+    {
+      /* Register the BMP280 driver */
+
+      ret = bmp280_register(BMP280_DRIVER_PATH, i2c);
+      if (ret < 0)
+        {
+          serr("ERROR: Failed to register BMP280\n");
+        }
+    }
+  #endif
+}
+#endif
+
+/****************************************************************************
+ * Name: imxrt_i2c_setup
+ *
+ * Description:
+ *  Choose which I2C driver should be initialize
+ *
+ ****************************************************************************/
+
+void imxrt_i2c_setup()
+{
+#if defined(CONFIG_I2C_DRIVER) && defined(CONFIG_IMXRT_LPI2C1)
+  imxrt_i2c_register(1);
+#endif
+
+#if defined(CONFIG_I2C_DRIVER) && defined(CONFIG_IMXRT_LPI2C2)
+  serr("ERROR: LPI2C2 is not on Teensy-4.x board\n");
+#endif
+
+#if defined(CONFIG_I2C_DRIVER) && defined(CONFIG_IMXRT_LPI2C3)
+  imxrt_i2c_register(3);
+#endif
+
+#if defined(CONFIG_I2C_DRIVER) && defined(CONFIG_IMXRT_LPI2C4)
+  imxrt_i2c_register(4);
+#endif
+}
+
+#endif /* CONFIG_IMXRT_LPI2C */
diff --git a/boards/arm/imxrt/teensy-4.x/src/imxrt_spi.c b/boards/arm/imxrt/teensy-4.x/src/imxrt_spi.c
new file mode 100644
index 0000000..ed02f5f
--- /dev/null
+++ b/boards/arm/imxrt/teensy-4.x/src/imxrt_spi.c
@@ -0,0 +1,212 @@
+/****************************************************************************
+ * boards/arm/imxrt/teensy-4.x/src/imxrt_spi.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 <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 "teensy-4.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_LPSPI3
+  imxrt_config_gpio(GPIO_LPSPI3_CS); /* LPSPI3 chip select */
+#endif
+#ifdef CONFIG_IMXRT_LPSPI4
+  imxrt_config_gpio(GPIO_LPSPI4_CS); /* LPSPI4 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/teensy-4.x/src/imxrt_userleds.c b/boards/arm/imxrt/teensy-4.x/src/imxrt_userleds.c
new file mode 100644
index 0000000..19ccde4
--- /dev/null
+++ b/boards/arm/imxrt/teensy-4.x/src/imxrt_userleds.c
@@ -0,0 +1,82 @@
+/****************************************************************************
+ * boards/arm/imxrt/teensy-4.x/src/imxrt_userleds.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.
+ *
+ ****************************************************************************/
+
+/* There are two LED status indicators located on the EVK Board.  The
+ * functions of these LEDs include:
+ *
+  *   - RED LED (loading status)
+ *      - dim:    ready
+ *      - bright: writing
+ *      - blink:  no USB
+ *   - USER LED (D8)
+ *
+ * Only a single LED, D8, is under software control.
+ */
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include "imxrt_gpio.h"
+#include "imxrt_iomuxc.h"
+#include <arch/board/board.h>
+#include "teensy-4.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 */
diff --git a/boards/arm/imxrt/teensy-4.x/src/teensy-4.h b/boards/arm/imxrt/teensy-4.x/src/teensy-4.h
new file mode 100644
index 0000000..178784d
--- /dev/null
+++ b/boards/arm/imxrt/teensy-4.x/src/teensy-4.h
@@ -0,0 +1,195 @@
+/****************************************************************************
+ * boards/arm/imxrt/teensy-4.x/src/teensy-4.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
+ *
+ *   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.
+ *
+ ****************************************************************************/
+
+#ifndef __BOARDS_ARM_IMXRT_TEENSY_4X_SRC_TEENSY_4_H
+#  define __BOARDS_ARM_IMXRT_TEENSY_4X_SRC_TEENSY_4_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
+ ****************************************************************************/
+
+/* i.MX RT 1060 GPIO Pin Definitions ****************************************/
+
+/* LEDs */
+
+/* There are two LED status indicators located on the Teensy 4.x board.
+ * The functions of these LEDs include:
+ *
+ *   - RED LED (loading status)
+ *      - dim:    ready
+ *      - bright: writing
+ *      - blink:  no USB
+ *   - USER LED(D8)
+ *
+ * Only a single LED, D8, is under software control.
+ */
+
+#  define GPIO_LED        (GPIO_OUTPUT | IOMUX_LED_DEFAULT | \
+                         GPIO_OUTPUT_ZERO | GPIO_PORT2 | GPIO_PIN3)  /* BO_03 */
+
+#  define LED_DRIVER_PATH "/dev/userleds"
+
+#  define BMP280_DRIVER_PATH "/dev/press0"
+
+/* LPSPI3 CS:  GPIO_AD_B1_12 */
+
+#  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_PIN28 | IOMUX_LPSPI3_CS)
+
+/* LPSPI4 CS:  GPIO_B0_00  */
+
+#  define IOMUX_LPSPI4_CS      (IOMUX_SLEW_FAST | IOMUX_DRIVE_50OHM | \
+                              IOMUX_SPEED_MEDIUM | IOMUX_PULL_UP_100K | \
+                              _IOMUX_PULL_ENABLE)
+#  define GPIO_LPSPI4_CS       (GPIO_OUTPUT | GPIO_OUTPUT_ONE | \
+                              GPIO_PORT2 | GPIO_PIN0 | IOMUX_LPSPI4_CS)
+
+/* USB OTG ID Pin: GPIO_AD_B1_02 */
+
+#define GPIO_USBOTG_ID  (GPIO_USB_OTG1_ID_1 | IOMUX_USBOTG_ID_DEFAULT)      /* AD_B1_02 */
+
+/* Ethernet */
+
+/* Ethernet Interrupt: GPIO_B0_15
+ *
+ * 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_PORT2 | GPIO_PIN15)    /* B0_15 */
+#define GPIO_ENET_IRQ   IMXRT_IRQ_GPIO2_15
+
+/* Ethernet Reset:  GPIO_B0_14
+ *
+ * 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_PORT2 | GPIO_PIN14 | IOMUX_ENET_RST_DEFAULT) /* B0_14 */
+
+/****************************************************************************
+ * 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_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_i2c_setup
+ *
+ * Description:
+ *  Choose which I2C driver should be initialize
+ *
+ ****************************************************************************/
+
+#ifdef CONFIG_IMXRT_LPI2C
+void imxrt_i2c_setup(void);
+#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
+
+#endif  /* __ASSEMBLY__ */
+#endif  /* __BOARDS_ARM_TEENSY_4X_SRC_TEENSY_4_H */


[incubator-nuttx] 02/04: boards/Kconfig: Added configuration for Teensy-4 BSP

Posted by bt...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 7f9d8f56fbca60e66242a96a6f73baae6f22d1af
Author: Michal Lenc <le...@fel.cvut.cz>
AuthorDate: Wed Dec 2 23:59:52 2020 +0100

    boards/Kconfig: Added configuration for Teensy-4 BSP
    
    Signed-off-by: Michal Lenc <le...@fel.cvut.cz>
---
 boards/Kconfig | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/boards/Kconfig b/boards/Kconfig
index 457f4dd..464f815 100644
--- a/boards/Kconfig
+++ b/boards/Kconfig
@@ -1878,6 +1878,16 @@ config ARCH_BOARD_TEENSY_3X
 		Teensy-3.0).  the primary difference is that the Teensy 3.0 has a
 		MK20DX128VLH5 with slightly less capability.
 
+config ARCH_BOARD_TEENSY_4X
+	bool "PJRC Teensy++ 4.x board"
+	depends on ARCH_CHIP_MIMXRT1062DVL6A
+	select ARCH_HAVE_LEDS
+	---help---
+		This is the port of NuttX to the PJRC Teensy++ 4.x board.  This board is
+		developed by http://pjrc.com/teensy/.  The Teensy++ 4.x is based
+		on an NXP MIMXRT1062DVL6A MCU. The port can support both Teensy 4.0 and
+		Teensy 4.1 boards.
+
 config ARCH_BOARD_TEENSY_LC
 	bool "Teensy LC"
 	depends on ARCH_CHIP_MKL25Z64
@@ -2331,6 +2341,7 @@ config ARCH_BOARD
 	default "sure-pic32mx"             if ARCH_BOARD_SUREPIC32MX
 	default "teensy-2.0"               if ARCH_BOARD_TEENSY_20
 	default "teensy-3.x"               if ARCH_BOARD_TEENSY_3X
+	default "teensy-4.x"               if ARCH_BOARD_TEENSY_4X
 	default "teensy-lc"                if ARCH_BOARD_TEENSY_LC
 	default "tm4c123g-launchpad"       if ARCH_BOARD_TM4C123G_LAUNCHPAD
 	default "tm4c1294-launchpad"       if ARCH_BOARD_TM4C1294_LAUNCHPAD
@@ -2443,6 +2454,9 @@ endif
 if ARCH_BOARD_IMXRT1060_EVK
 source "boards/arm/imxrt/imxrt1060-evk/Kconfig"
 endif
+if ARCH_BOARD_TEENSY_4X
+source "boards/arm/imxrt/teensy-4.x/Kconfig"
+endif
 if ARCH_BOARD_FREEDOM_K28F
 source "boards/arm/kinetis/freedom-k28f/Kconfig"
 endif


[incubator-nuttx] 04/04: boards/arm/imxrt/teensy-4.x: fixed build error and nx style

Posted by bt...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit eabd79f97ba299ae90daee1bfd2410048bafce5f
Author: Michal Lenc <le...@fel.cvut.cz>
AuthorDate: Thu Dec 3 18:38:39 2020 +0100

    boards/arm/imxrt/teensy-4.x: fixed build error and nx style
    
    Signed-off-by: Michal Lenc <le...@fel.cvut.cz>
---
 boards/arm/imxrt/teensy-4.x/Kconfig                |   9 -
 boards/arm/imxrt/teensy-4.x/README.txt             |   5 +-
 .../arm/imxrt/teensy-4.x/configs/can-4.1/defconfig |  24 +--
 .../imxrt/teensy-4.x/configs/netnsh-4.1/defconfig  |   8 -
 .../arm/imxrt/teensy-4.x/configs/nsh-4.0/defconfig |   1 -
 .../arm/imxrt/teensy-4.x/configs/sd-4.1/defconfig  |   9 -
 boards/arm/imxrt/teensy-4.x/include/board.h        |  23 +--
 boards/arm/imxrt/teensy-4.x/scripts/flash-ocram.ld | 194 +++++++++---------
 boards/arm/imxrt/teensy-4.x/src/imxrt_adc.c        |   1 +
 boards/arm/imxrt/teensy-4.x/src/imxrt_autoleds.c   |  23 +--
 .../imxrt/teensy-4.x/src/imxrt_flexspi_nor_boot.c  |  34 ++--
 .../imxrt/teensy-4.x/src/imxrt_flexspi_nor_boot.h  |   2 +-
 .../imxrt/teensy-4.x/src/imxrt_flexspi_nor_flash.h | 226 ++++++++++-----------
 boards/arm/imxrt/teensy-4.x/src/imxrt_i2c.c        |   4 +-
 boards/arm/imxrt/teensy-4.x/src/imxrt_userleds.c   |   6 +-
 boards/arm/imxrt/teensy-4.x/src/teensy-4.h         |   4 +-
 16 files changed, 259 insertions(+), 314 deletions(-)

diff --git a/boards/arm/imxrt/teensy-4.x/Kconfig b/boards/arm/imxrt/teensy-4.x/Kconfig
index 4fb15fc..9b330f6 100644
--- a/boards/arm/imxrt/teensy-4.x/Kconfig
+++ b/boards/arm/imxrt/teensy-4.x/Kconfig
@@ -24,13 +24,4 @@ config TEENSY_41
 
 endchoice # Board configuration
 
-menu "Sensors interfaces"
-
-config BMP280_LPI2C
-	int "LPI2C interface for BMP280 sensor"
-	depends on SENSORS_BMP280
-	default 4
-
-endmenu # Sensors interfaces
-
 endif
diff --git a/boards/arm/imxrt/teensy-4.x/README.txt b/boards/arm/imxrt/teensy-4.x/README.txt
index dd72284..fc16353 100644
--- a/boards/arm/imxrt/teensy-4.x/README.txt
+++ b/boards/arm/imxrt/teensy-4.x/README.txt
@@ -41,9 +41,9 @@ LEDs and buttons
        - dim:    ready
        - bright: writing
        - blink:  no USB
-    - USER LED(D8)
+    - USER LED (D3)
 
-  Only a single LED, D8, is under software control.
+  Only a single LED, D3, 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
@@ -121,7 +121,6 @@ Configurations
 Configuration sub-directories
 -----------------------------
 
-
   nsh-4.0:
 
     Configures the NuttShell (nsh) located at examples/nsh for Teensy 4.0.  
diff --git a/boards/arm/imxrt/teensy-4.x/configs/can-4.1/defconfig b/boards/arm/imxrt/teensy-4.x/configs/can-4.1/defconfig
index f87e886..10c100b 100644
--- a/boards/arm/imxrt/teensy-4.x/configs/can-4.1/defconfig
+++ b/boards/arm/imxrt/teensy-4.x/configs/can-4.1/defconfig
@@ -21,32 +21,9 @@ CONFIG_ARMV7M_ICACHE=y
 CONFIG_ARMV7M_USEBASEPRI=y
 CONFIG_BOARD_LOOPSPERMSEC=104926
 CONFIG_BUILTIN=y
-CONFIG_TEENSY_41=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
@@ -77,4 +54,5 @@ CONFIG_SIG_DEFAULT=y
 CONFIG_START_DAY=14
 CONFIG_START_MONTH=3
 CONFIG_SYSTEM_NSH=y
+CONFIG_TEENSY_41=y
 CONFIG_USER_ENTRYPOINT="nsh_main"
diff --git a/boards/arm/imxrt/teensy-4.x/configs/netnsh-4.1/defconfig b/boards/arm/imxrt/teensy-4.x/configs/netnsh-4.1/defconfig
index f125ae2..15099ff 100644
--- a/boards/arm/imxrt/teensy-4.x/configs/netnsh-4.1/defconfig
+++ b/boards/arm/imxrt/teensy-4.x/configs/netnsh-4.1/defconfig
@@ -19,14 +19,6 @@ CONFIG_ARMV7M_ICACHE=y
 CONFIG_ARMV7M_USEBASEPRI=y
 CONFIG_BOARD_LOOPSPERMSEC=104926
 CONFIG_BUILTIN=y
-CONFIG_DEBUG_ERROR=y
-CONFIG_DEBUG_FEATURES=y
-CONFIG_DEBUG_INFO=y
-CONFIG_DEBUG_NET=y
-CONFIG_DEBUG_NET_ERROR=y
-CONFIG_DEBUG_NET_INFO=y
-CONFIG_DEBUG_NET_WARN=y
-CONFIG_DEBUG_WARN=y
 CONFIG_ETH0_PHY_DP83825I=y
 CONFIG_FS_PROCFS=y
 CONFIG_IDLETHREAD_STACKSIZE=2048
diff --git a/boards/arm/imxrt/teensy-4.x/configs/nsh-4.0/defconfig b/boards/arm/imxrt/teensy-4.x/configs/nsh-4.0/defconfig
index 5a488ef..3cbfca3 100644
--- a/boards/arm/imxrt/teensy-4.x/configs/nsh-4.0/defconfig
+++ b/boards/arm/imxrt/teensy-4.x/configs/nsh-4.0/defconfig
@@ -12,7 +12,6 @@ CONFIG_ARCH_CHIP="imxrt"
 CONFIG_ARCH_CHIP_IMXRT=y
 CONFIG_ARCH_CHIP_MIMXRT1062DVL6A=y
 CONFIG_ARCH_STACKDUMP=y
-CONFIG_TEENSY_40=y
 CONFIG_ARMV7M_DCACHE=y
 CONFIG_ARMV7M_DCACHE_WRITETHROUGH=y
 CONFIG_ARMV7M_ICACHE=y
diff --git a/boards/arm/imxrt/teensy-4.x/configs/sd-4.1/defconfig b/boards/arm/imxrt/teensy-4.x/configs/sd-4.1/defconfig
index 8bb085b..955c6e3 100644
--- a/boards/arm/imxrt/teensy-4.x/configs/sd-4.1/defconfig
+++ b/boards/arm/imxrt/teensy-4.x/configs/sd-4.1/defconfig
@@ -20,15 +20,6 @@ CONFIG_ARMV7M_ICACHE=y
 CONFIG_ARMV7M_USEBASEPRI=y
 CONFIG_BOARD_LOOPSPERMSEC=104926
 CONFIG_BUILTIN=y
-CONFIG_DEBUG_ASSERTIONS=y
-CONFIG_DEBUG_ERROR=y
-CONFIG_DEBUG_FEATURES=y
-CONFIG_DEBUG_FS=y
-CONFIG_DEBUG_FS_ERROR=y
-CONFIG_DEBUG_FS_INFO=y
-CONFIG_DEBUG_FS_WARN=y
-CONFIG_DEBUG_INFO=y
-CONFIG_DEBUG_WARN=y
 CONFIG_FAT_LCNAMES=y
 CONFIG_FAT_LFN=y
 CONFIG_FS_FAT=y
diff --git a/boards/arm/imxrt/teensy-4.x/include/board.h b/boards/arm/imxrt/teensy-4.x/include/board.h
index 86a9665..ec9f415 100644
--- a/boards/arm/imxrt/teensy-4.x/include/board.h
+++ b/boards/arm/imxrt/teensy-4.x/include/board.h
@@ -128,18 +128,16 @@
 
 /* LED definitions **********************************************************/
 
-/* There are four LED status indicators located on the EVK Board.
+/* There are two LED status indicators located on the Teensy 4.x 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(D8)
+ *   - RED LED (loading status)
+ *      - dim:    ready
+ *      - bright: writing
+ *      - blink:  no USB
+ *   - USER LED (D3)
  *
- * Only a single LED, D8, is under software control.
+ * Only a single LED, D3, is under software control.
  */
 
 /* LED index values for use with board_userled() */
@@ -227,12 +225,7 @@
 
 /* PIO Disambiguation *******************************************************/
 
-/* LPUARTs
- *
- * Virtual console port provided by OpenSDA on UART1 and
- * Arduino RS-232 Shield on UART3.
- *
- */
+/* LPUARTs */
 
 #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 */
diff --git a/boards/arm/imxrt/teensy-4.x/scripts/flash-ocram.ld b/boards/arm/imxrt/teensy-4.x/scripts/flash-ocram.ld
index c8b25d8..b6b3ff5 100644
--- a/boards/arm/imxrt/teensy-4.x/scripts/flash-ocram.ld
+++ b/boards/arm/imxrt/teensy-4.x/scripts/flash-ocram.ld
@@ -50,12 +50,12 @@
 
 MEMORY
 {
-  flash    (rx)  : ORIGIN = 0x60000000, LENGTH = 7M
-  flashxip (rx)  : ORIGIN = 0x60700000, 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
+    flash    (rx)  : ORIGIN = 0x60000000, LENGTH = 7M
+    flashxip (rx)  : ORIGIN = 0x60700000, 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)
@@ -69,26 +69,26 @@ 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
+	/* 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)
+	.flashxip : ALIGN(4)
 	{
 		FILL(0xff)
 
@@ -109,78 +109,78 @@ SECTIONS
 		*(.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) }
+	} > 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/teensy-4.x/src/imxrt_adc.c b/boards/arm/imxrt/teensy-4.x/src/imxrt_adc.c
index 5db0732..abbcc08 100644
--- a/boards/arm/imxrt/teensy-4.x/src/imxrt_adc.c
+++ b/boards/arm/imxrt/teensy-4.x/src/imxrt_adc.c
@@ -70,6 +70,7 @@ int imxrt_adc_initialize(void)
   int ret;
 
   /* Call imxrt_adcinitialize() to get an instance of the ADC interface */
+
   #ifdef CONFIG_IMXRT_ADC1
       adc = imxrt_adcinitialize(1, g_chanlist, ADC_NCHANNELS);
       if (adc == NULL)
diff --git a/boards/arm/imxrt/teensy-4.x/src/imxrt_autoleds.c b/boards/arm/imxrt/teensy-4.x/src/imxrt_autoleds.c
index def7598..2588d42 100644
--- a/boards/arm/imxrt/teensy-4.x/src/imxrt_autoleds.c
+++ b/boards/arm/imxrt/teensy-4.x/src/imxrt_autoleds.c
@@ -18,18 +18,17 @@
  *
  ****************************************************************************/
 
-/* 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(D8)
- *
- * Only a single LED, D8, is under software control.
+/* There are two LED status indicators located on the Teensy 4.x board.
+ * The functions of these LEDs include:
+ *
+ *   - RED LED (loading status)
+ *      - dim:    ready
+ *      - bright: writing
+ *      - blink:  no USB
+ *   - USER LED (D3)
+ *
+ * Only a single LED, D3, 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
diff --git a/boards/arm/imxrt/teensy-4.x/src/imxrt_flexspi_nor_boot.c b/boards/arm/imxrt/teensy-4.x/src/imxrt_flexspi_nor_boot.c
index dff0685..8bcf262 100644
--- a/boards/arm/imxrt/teensy-4.x/src/imxrt_flexspi_nor_boot.c
+++ b/boards/arm/imxrt/teensy-4.x/src/imxrt_flexspi_nor_boot.c
@@ -29,28 +29,28 @@
  ****************************************************************************/
 
 __attribute__((section(".boot_hdr.ivt")))
-     const struct ivt_s g_image_vector_table =
+      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 */
+        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 =
+      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 */
+        IMAGE_DEST,                      /* boot start location */
+        (IMAGE_DEST_END - IMAGE_DEST),   /* size */
+        PLUGIN_FLAG,                     /* Plugin flag */
+        0xffffffff                       /* empty - extra data word */
       };
 
 /****************************************************************************
diff --git a/boards/arm/imxrt/teensy-4.x/src/imxrt_flexspi_nor_boot.h b/boards/arm/imxrt/teensy-4.x/src/imxrt_flexspi_nor_boot.h
index 78fe4e3..8f4696a 100644
--- a/boards/arm/imxrt/teensy-4.x/src/imxrt_flexspi_nor_boot.h
+++ b/boards/arm/imxrt/teensy-4.x/src/imxrt_flexspi_nor_boot.h
@@ -19,7 +19,7 @@
  ****************************************************************************/
 
 #ifndef __BOARDS_ARM_IMXRT_TEENSY_4X_SRC_IMXRT_FLEXSPI_NOR_BOOT_H
-#  define __BOARDS_ARM_IMXRT_TEENSY_4X_SRC_IMXRT_FLEXSPI_NOR_BOOT_H
+#define __BOARDS_ARM_IMXRT_TEENSY_4X_SRC_IMXRT_FLEXSPI_NOR_BOOT_H
 
 /****************************************************************************
  * Included Files
diff --git a/boards/arm/imxrt/teensy-4.x/src/imxrt_flexspi_nor_flash.h b/boards/arm/imxrt/teensy-4.x/src/imxrt_flexspi_nor_flash.h
index e580db0..b57eb14 100644
--- a/boards/arm/imxrt/teensy-4.x/src/imxrt_flexspi_nor_flash.h
+++ b/boards/arm/imxrt/teensy-4.x/src/imxrt_flexspi_nor_flash.h
@@ -18,7 +18,7 @@
  *
  ****************************************************************************/
 #ifndef __BOARDS_ARM_IMXRT_TEENSY_4X_SRC_IMXRT_FLEXSPI_NOR_FLASH_H
-#  define __BOARDS_ARM_IMXRT_TEENSY_4X_SRC_IMXRT_FLEXSPI_NOR_FLASH_H
+#define __BOARDS_ARM_IMXRT_TEENSY_4X_SRC_IMXRT_FLEXSPI_NOR_FLASH_H
 
 /****************************************************************************
  * Included Files
@@ -188,177 +188,177 @@
 /* Definitions for FlexSPI Serial Clock Frequency */
 
 enum flexspi_serial_clkfreq_e
-  {
-    FLEXSPI_SERIAL_CLKFREQ_30MHz = 1,
-    FLEXSPI_SERIAL_CLKFREQ_50MHz = 2,
-    FLEXSPI_SERIAL_CLKFREQ_60MHz = 3,
-    FLEXSPI_SERIAL_CLKFREQ_75MHz = 4,
-    FLEXSPI_SERIAL_CLKFREQ_80MHz = 5,
-    FLEXSPI_SERIAL_CLKFREQ_100MHz = 6,
-    FLEXSPI_SERIAL_CLKFREQ_133MHz = 7,
-    FLEXSPI_SERIAL_CLKFREQ_166MHz = 8,
-    FLEXSPI_SERIAL_CLKFREQ_200MHz = 9,
-  };
+{
+  FLEXSPI_SERIAL_CLKFREQ_30MHz = 1,
+  FLEXSPI_SERIAL_CLKFREQ_50MHz = 2,
+  FLEXSPI_SERIAL_CLKFREQ_60MHz = 3,
+  FLEXSPI_SERIAL_CLKFREQ_75MHz = 4,
+  FLEXSPI_SERIAL_CLKFREQ_80MHz = 5,
+  FLEXSPI_SERIAL_CLKFREQ_100MHz = 6,
+  FLEXSPI_SERIAL_CLKFREQ_133MHz = 7,
+  FLEXSPI_SERIAL_CLKFREQ_166MHz = 8,
+  FLEXSPI_SERIAL_CLKFREQ_200MHz = 9,
+};
 
 /* FlexSPI clock configuration type */
 
 enum flexspi_serial_clockmode_e
-  {
-    FLEXSPI_CLKMODE_SDR,
-    FLEXSPI_CLKMODE_DDR,
-  };
+{
+  FLEXSPI_CLKMODE_SDR,
+  FLEXSPI_CLKMODE_DDR,
+};
 
 /* FlexSPI Read Sample Clock Source definition */
 
 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_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,
+};
 
 /*  Misc feature bit definitions */
 
 enum flash_misc_feature_e
-  {
-    FLEXSPIMISC_OFFSET_DIFFCLKEN = 0,   /* Bit for Differential clock enable */
-    FLEXSPIMISC_OFFSET_CK2EN = 1,       /* Bit for CK2 enable */
-    FLEXSPIMISC_OFFSET_PARALLELEN = 2,  /* Bit for Parallel mode enable */
+{
+  FLEXSPIMISC_OFFSET_DIFFCLKEN = 0,   /* Bit for Differential clock enable */
+  FLEXSPIMISC_OFFSET_CK2EN = 1,       /* Bit for CK2 enable */
+  FLEXSPIMISC_OFFSET_PARALLELEN = 2,  /* Bit for Parallel mode enable */
 
-    FLEXSPIMISC_OFFSET_WORD_ADDRESSABLE_EN = 3, /* Bit for Word Addressable
+  FLEXSPIMISC_OFFSET_WORD_ADDRESSABLE_EN = 3, /* Bit for Word Addressable
                                                  * enable */
-    FLEXSPIMISC_OFFSET_SAFECONFIG_FREQ_EN = 4,  /* Bit for Safe Configuration
+  FLEXSPIMISC_OFFSET_SAFECONFIG_FREQ_EN = 4,  /* Bit for Safe Configuration
                                                  * Frequency enable */
 
-    FLEXSPIMISC_OFFSET_PAD_SETTING_OVERRIDE_EN = 5,     /* Bit for Pad setting
+  FLEXSPIMISC_OFFSET_PAD_SETTING_OVERRIDE_EN = 5,     /* Bit for Pad setting
                                                          * override enable */
 
-    FLEXSPIMISC_OFFSET_DDR_MODE_EN = 6, /* Bit for DDR clock confiuration
+  FLEXSPIMISC_OFFSET_DDR_MODE_EN = 6, /* Bit for DDR clock confiuration
                                          * indication. */
-  };
+};
 
 /* Flash Type Definition */
 
 enum flash_flash_type_e
-  {
-    FLEXSPI_DEVICE_TYPE_SERIAL_NOR = 1,  /* Flash devices are Serial NOR */
-    FLEXSPI_DEVICE_TYPE_SERIAL_NAND = 2, /* Flash devices are Serial
+{
+  FLEXSPI_DEVICE_TYPE_SERIAL_NOR = 1,  /* Flash devices are Serial NOR */
+  FLEXSPI_DEVICE_TYPE_SERIAL_NAND = 2, /* Flash devices are Serial
                                          * NAND */
-    FLEXSPI_DEVICE_TYPE_SERIAL_RAM = 3,  /* Flash devices are Serial
+  FLEXSPI_DEVICE_TYPE_SERIAL_RAM = 3,  /* Flash devices are Serial
                                          * RAM/HyperFLASH */
 
-    FLEXSPI_DEVICE_TYPE_MCP_NOR_NAND = 0x12,    /* Flash device is MCP device,
+  FLEXSPI_DEVICE_TYPE_MCP_NOR_NAND = 0x12,    /* Flash device is MCP device,
                                                  * A1 is Serial NOR, A2 is
                                                  * Serial NAND */
-    FLEXSPI_DEVICE_TYPE_MCP_NOR_RAM = 0x13,     /* Flash device is MCP device,
+  FLEXSPI_DEVICE_TYPE_MCP_NOR_RAM = 0x13,     /* Flash device is MCP device,
                                                  * A1 is Serial NOR, A2 is
                                                  * Serial RAMs */
-  };
+};
 
 /* Flash Pad Definitions */
 
 enum flash_flash_pad_e
-  {
-    SERIAL_FLASH_1PAD = 1,
-    SERIAL_FLASH_2PADS = 2,
-    SERIAL_FLASH_4PADS = 4,
-    SERIAL_FLASH_8PADS = 8,
-  };
+{
+  SERIAL_FLASH_1PAD = 1,
+  SERIAL_FLASH_2PADS = 2,
+  SERIAL_FLASH_4PADS = 4,
+  SERIAL_FLASH_8PADS = 8,
+};
 
 /* Flash Configuration Command Type */
 
 enum flash_config_cmd_e
-  {
-    DEVICE_CONFIG_CMD_TYPE_GENERIC,     /* Generic command, for example:
+{
+  DEVICE_CONFIG_CMD_TYPE_GENERIC,     /* Generic command, for example:
                                          * configure dummy cycles, drive
                                          * strength, etc */
-    DEVICE_CONFIG_CMD_TYPE_QUADENABLE,  /* Quad Enable command */
-    DEVICE_CONFIG_CMD_TYPE_SPI2XPI,     /* Switch from SPI to DPI/QPI/OPI mode */
-    DEVICE_CONFIG_CMD_TYPE_XPI2SPI,     /* Switch from DPI/QPI/OPI to SPI mode */
-    DEVICE_CONFIG_CMD_TYPE_SPI2NO_CMD,  /* Switch to 0-4-4/0-8-8 mode */
-    DEVICE_CONFIG_CMD_TYPE_RESET,       /* Reset device command */
-  };
+  DEVICE_CONFIG_CMD_TYPE_QUADENABLE,  /* Quad Enable command */
+  DEVICE_CONFIG_CMD_TYPE_SPI2XPI,     /* Switch from SPI to DPI/QPI/OPI mode */
+  DEVICE_CONFIG_CMD_TYPE_XPI2SPI,     /* Switch from DPI/QPI/OPI to SPI mode */
+  DEVICE_CONFIG_CMD_TYPE_SPI2NO_CMD,  /* Switch to 0-4-4/0-8-8 mode */
+  DEVICE_CONFIG_CMD_TYPE_RESET,       /* Reset device command */
+};
 
 /* FlexSPI LUT Sequence structure */
 
 struct flexspi_lut_seq_s
-  {
-    uint8_t seq_num;            /* Sequence Number, valid number: 1-16 */
-    uint8_t seq_id;             /* Sequence Index, valid number: 0-15 */
-    uint16_t reserved;
-  };
+{
+  uint8_t seq_num;            /* Sequence Number, valid number: 1-16 */
+  uint8_t seq_id;             /* Sequence Index, valid number: 0-15 */
+  uint16_t reserved;
+};
 
 /* FlexSPI Memory Configuration Block */
 
 struct flexspi_mem_config_s
-  {
-    uint32_t tag;
-    uint32_t version;
-    uint32_t reserved0;
-    uint8_t read_sample_clksrc;
-    uint8_t cs_hold_time;
-    uint8_t cs_setup_time;
-    uint8_t column_address_width;       /* [0x00f-0x00f] Column Address with,
+{
+  uint32_t tag;
+  uint32_t version;
+  uint32_t reserved0;
+  uint8_t read_sample_clksrc;
+  uint8_t cs_hold_time;
+  uint8_t cs_setup_time;
+  uint8_t column_address_width;       /* [0x00f-0x00f] Column Address with,
                                          * for HyperBus protocol, it is fixed
                                          * to 3, For Serial NAND, need to refer
                                          * to datasheet */
-    uint8_t device_mode_cfg_enable;
-    uint8_t device_mode_type;
-    uint16_t wait_time_cfg_commands;
-    struct flexspi_lut_seq_s device_mode_seq;
-    uint32_t device_mode_arg;
-    uint8_t config_cmd_enable;
-    uint8_t config_mode_type[3];
-    struct flexspi_lut_seq_s config_cmd_seqs[3];
-    uint32_t reserved1;
-    uint32_t config_cmd_args[3];
-    uint32_t reserved2;
-    uint32_t controller_misc_option;
-    uint8_t device_type;
-    uint8_t sflash_pad_type;
-    uint8_t serial_clk_freq;
-    uint8_t lut_custom_seq_enable;
-    uint32_t reserved3[2];
-    uint32_t sflash_a1size;
-    uint32_t sflash_a2size;
-    uint32_t sflash_b1size;
-    uint32_t sflash_b2size;
-    uint32_t cspad_setting_override;
-    uint32_t sclkpad_setting_override;
-    uint32_t datapad_setting_override;
-    uint32_t dqspad_setting_override;
-    uint32_t timeout_in_ms;
-    uint32_t command_interval;
-    uint16_t data_valid_time[2];
-    uint16_t busy_offset;
-    uint16_t busybit_polarity;
-    uint32_t lookup_table[64];
-    struct flexspi_lut_seq_s lut_customseq[12];
-    uint32_t reserved4[4];
-  };
+  uint8_t device_mode_cfg_enable;
+  uint8_t device_mode_type;
+  uint16_t wait_time_cfg_commands;
+  struct flexspi_lut_seq_s device_mode_seq;
+  uint32_t device_mode_arg;
+  uint8_t config_cmd_enable;
+  uint8_t config_mode_type[3];
+  struct flexspi_lut_seq_s config_cmd_seqs[3];
+  uint32_t reserved1;
+  uint32_t config_cmd_args[3];
+  uint32_t reserved2;
+  uint32_t controller_misc_option;
+  uint8_t device_type;
+  uint8_t sflash_pad_type;
+  uint8_t serial_clk_freq;
+  uint8_t lut_custom_seq_enable;
+  uint32_t reserved3[2];
+  uint32_t sflash_a1size;
+  uint32_t sflash_a2size;
+  uint32_t sflash_b1size;
+  uint32_t sflash_b2size;
+  uint32_t cspad_setting_override;
+  uint32_t sclkpad_setting_override;
+  uint32_t datapad_setting_override;
+  uint32_t dqspad_setting_override;
+  uint32_t timeout_in_ms;
+  uint32_t command_interval;
+  uint16_t data_valid_time[2];
+  uint16_t busy_offset;
+  uint16_t busybit_polarity;
+  uint32_t lookup_table[64];
+  struct flexspi_lut_seq_s lut_customseq[12];
+  uint32_t reserved4[4];
+};
 
 /* Serial NOR configuration block */
 
 struct flexspi_nor_config_s
-  {
-    struct flexspi_mem_config_s mem_config;     /* Common memory configuration
+{
+  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
+  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
+  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
+  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 */
-  };
+  uint32_t blocksize;             /* Block size */
+  uint32_t reserve2[11];          /* Reserved for future use */
+};
 
 #endif  /* __BOARDS_ARM_IMXRT_TEENSY_4_SRC_IMXRT_FLEXSPI_NOR_FLASH_H */
diff --git a/boards/arm/imxrt/teensy-4.x/src/imxrt_i2c.c b/boards/arm/imxrt/teensy-4.x/src/imxrt_i2c.c
index 6b4fff0..d4d37f2 100644
--- a/boards/arm/imxrt/teensy-4.x/src/imxrt_i2c.c
+++ b/boards/arm/imxrt/teensy-4.x/src/imxrt_i2c.c
@@ -36,6 +36,8 @@
 
 #ifdef CONFIG_IMXRT_LPI2C
 
+#define BMP280_LPI2C 3
+
 /****************************************************************************
  * Public Functions
  ****************************************************************************/
@@ -70,7 +72,7 @@ static void imxrt_i2c_register(int bus)
     }
 
   #ifdef SENSORS_BMP280
-  if (CONFIG_BMP280_LPI2C == bus)
+  if (BMP280_LPI2C == bus)
     {
       /* Register the BMP280 driver */
 
diff --git a/boards/arm/imxrt/teensy-4.x/src/imxrt_userleds.c b/boards/arm/imxrt/teensy-4.x/src/imxrt_userleds.c
index 19ccde4..f844d69 100644
--- a/boards/arm/imxrt/teensy-4.x/src/imxrt_userleds.c
+++ b/boards/arm/imxrt/teensy-4.x/src/imxrt_userleds.c
@@ -18,16 +18,16 @@
  *
  ****************************************************************************/
 
-/* There are two LED status indicators located on the EVK Board.  The
+/* There are two LED status indicators located on Teensy-4.x Board.  The
  * functions of these LEDs include:
  *
   *   - RED LED (loading status)
  *      - dim:    ready
  *      - bright: writing
  *      - blink:  no USB
- *   - USER LED (D8)
+ *   - USER LED (D3)
  *
- * Only a single LED, D8, is under software control.
+ * Only a single LED, D3, is under software control.
  */
 
 /****************************************************************************
diff --git a/boards/arm/imxrt/teensy-4.x/src/teensy-4.h b/boards/arm/imxrt/teensy-4.x/src/teensy-4.h
index 178784d..186c762 100644
--- a/boards/arm/imxrt/teensy-4.x/src/teensy-4.h
+++ b/boards/arm/imxrt/teensy-4.x/src/teensy-4.h
@@ -51,9 +51,9 @@
  *      - dim:    ready
  *      - bright: writing
  *      - blink:  no USB
- *   - USER LED(D8)
+ *   - USER LED (D3)
  *
- * Only a single LED, D8, is under software control.
+ * Only a single LED, D3, is under software control.
  */
 
 #  define GPIO_LED        (GPIO_OUTPUT | IOMUX_LED_DEFAULT | \