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

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


The following commit(s) were added to refs/heads/master by this push:
     new e83606732d5 boards/arm: add nxp mr-navq95b support
e83606732d5 is described below

commit e83606732d5e71eb98a9eb544537dbbeb71aa58b
Author: Andre Heinemans <[email protected]>
AuthorDate: Thu Feb 5 13:36:26 2026 +0100

    boards/arm: add nxp mr-navq95b support
    
    - Add support for the MR-NAVQ95 which is an open-source development
      board designed for mobile robotics applications.
    - Utilizes the NXP i.MX95 processor M7 core
    - Configurations:
      'nsh'   A minimal configuration that only enables nsh shell
              on a UART
      'rpmsg' This configuration is similar to nsh but in addition
              it offers the Remote Processing Messaging (RPMsg) service to
              enable heterogeneous inter-core communication.
    
    Signed-off-by: Andre Heinemans <[email protected]>
---
 .../platforms/arm/imx9/boards/mr-navq95b/index.rst | 142 +++++++++++++++
 .../imx9/boards/mr-navq95b/mr-navq95b-overview.png | Bin 0 -> 165280 bytes
 boards/Kconfig                                     |  14 ++
 boards/arm/imx9/mr-navq95b/CMakeLists.txt          |  30 ++++
 boards/arm/imx9/mr-navq95b/Kconfig                 |  18 ++
 boards/arm/imx9/mr-navq95b/configs/nsh/defconfig   |  59 ++++++
 boards/arm/imx9/mr-navq95b/configs/rpmsg/defconfig |  80 +++++++++
 boards/arm/imx9/mr-navq95b/include/board.h         | 200 +++++++++++++++++++++
 boards/arm/imx9/mr-navq95b/scripts/Make.defs       |  56 ++++++
 boards/arm/imx9/mr-navq95b/scripts/ddr.ld          | 137 ++++++++++++++
 boards/arm/imx9/mr-navq95b/scripts/flash.ld        | 138 ++++++++++++++
 boards/arm/imx9/mr-navq95b/scripts/itcm.ld         | 137 ++++++++++++++
 boards/arm/imx9/mr-navq95b/src/CMakeLists.txt      |  49 +++++
 boards/arm/imx9/mr-navq95b/src/Makefile            |  44 +++++
 boards/arm/imx9/mr-navq95b/src/imx95_appinit.c     |  76 ++++++++
 boards/arm/imx9/mr-navq95b/src/imx95_boardinit.c   | 116 ++++++++++++
 boards/arm/imx9/mr-navq95b/src/imx95_bringup.c     | 101 +++++++++++
 boards/arm/imx9/mr-navq95b/src/imx95_i2c.c         |  88 +++++++++
 boards/arm/imx9/mr-navq95b/src/imx95_spi.c         | 164 +++++++++++++++++
 boards/arm/imx9/mr-navq95b/src/mr-navq95b.h        |  98 ++++++++++
 20 files changed, 1747 insertions(+)

diff --git a/Documentation/platforms/arm/imx9/boards/mr-navq95b/index.rst 
b/Documentation/platforms/arm/imx9/boards/mr-navq95b/index.rst
new file mode 100644
index 00000000000..e4469a9d6cf
--- /dev/null
+++ b/Documentation/platforms/arm/imx9/boards/mr-navq95b/index.rst
@@ -0,0 +1,142 @@
+=========
+MR-NAVQ95
+=========
+
+.. tags:: chip:imx9, chip:imx95, vendor:nxp
+
+The `MR-NAVQ95 <https://github.com/NXP-Robotics/MR-NAVQ95>`_ is an open-source
+development board designed for mobile robotics applications.
+It is built around the `i.MX 95 automotive applications processor 
+<https://www.nxp.com/products/iMX95>`_.
+Its heterogeneous processing cores make it well-suited for running both 
+real-time tasks and compute-intensive workloads.
+
+Features
+========
+
+- Multicore Processing [1]_
+    - 1x Arm Cortex-M7
+    - 6x Arm Cortex-A55 multicore complex
+    - 1x Arm Cortex-M33
+- Memory
+    - On-Chip Memory
+        - 1376KiB SRAM (ECC)
+    - External Memory
+        - 16 GiB LPDDR5 (Up to 6.4GT/s, with Inline ECC & Inline Encryption)
+        - 64 MiB MX25UM51345G (Octal SPI)
+
+- Connectivity
+
+    The MR-NAVQ95 is composed of a main board as its base and can be extended 
+    with optional add-on modules.
+
+.. figure:: mr-navq95b-overview.png
+
+.. [1] NuttX is currently supported exclusively on the Cortex-M7 core of the
+       MR-NAVQ95
+
+SD-card image
+=============
+
+The simplest way to run NuttX on the MR-NAVQ95's M7 core is to use the 
standard 
+SD-card image. You can find the instructions for creating this image `here 
+<https://github.com/NXP-Robotics/MR-NAVQ95>`_.
+
+Serial Console
+==============
+
+By default the console is set to UART2.
+The most convenient method to connect to the serial console is through the 
+USB-C port on the I/O expansion board (J10).
+The integrated FT2232HQ enables access to UART1 and UART2.
+UART2 is additionally exposed on the main board at connector J2, which uses a 
+JST-GH connector and therefore requires a special cable.
+
+J-Link External Debug Probe
+===========================
+
+The MR-NAVQ95 board provides a 2x5-pin 1.27mm header
+(J7) for connecting a JTAG debugger for debugging the i.MX95
+processor.
+
+PyOCD provides support for both the i.MX95's M33 and M7 cores. It also 
includes 
+support for programming the MX25UM51345G external flash.
+
+Firmware location
+=================
+
+Flash
+-----
+
+The external MX25UM51345G NOR flash on the MR_NAVQ95 is reserved for the M7 
+firmware. In the standard SD-card image, the System Manager (M33) loads 
MCUBoot 
+into ITCM.
+After initialization, MCUBoot checks the external flash for a valid firmware 
+image and, if one is found, executes it directly in place (XIP).
+To allow MCUBoot to authenticate the firmware properly, the binary must 
include 
+a valid MCUBoot header. This header can be added using the imgtool.py utility 
+provided with MCUBoot.
+
+Use the following commands to create the binary with header and to program it 
+using pyocd:
+
+.. code-block:: sh
+
+    ./imgtool.py sign --version 1.0.0 --header-size 0x800\
+        --slot-size 0x700000 --pad-header nuttx.bin\
+        nuttx.mcuboot.bin
+
+    pyocd flash -t mimx95_cm7_mx25um nuttx.mcuboot.bin
+
+Instruction Tightly Coupled Memory (ITCM)
+-----------------------------------------
+
+The purpose of the Tightly-Coupled Memory (TCM) is to provide low-latency
+memory that the processor can use without the unpredictability that is a
+feature of caches. By default the firmware will be located in this area
+(256K).
+
+.. code-block:: sh
+
+    pyocd flash -t mimx95_cm7 nuttx.bin
+
+.. note::
+
+    Please be aware that the standard SD-card uses the ITCM section to run 
+    MCUboot
+
+DDR
+---
+
+DDR memory can be used in case the code memory footprint becomes bigger than
+the ITCM size. Using this configuration implies that other cores should be
+aware of this.
+The standard SD-card image for the MR-NAVQ95 allocates the 
+0x90000000-0x90400000 memory region exclusively to the M7 core. The A55 
+subsystem is configured to avoid this range.
+
+
+Configurations
+==============
+
+nsh
+---
+
+Configures the NuttShell (nsh) located at examples/nsh.  This NSH
+configuration is focused on low level, command-line driver testing. Built-in
+applications are supported, but none are enabled. This configuration does not
+support a network.
+
+rpmsg
+-----
+
+This configuration is similar to nsh but in addition it offers the Remote
+Processing Messaging (RPMsg) service to enable heterogeneous inter-core
+communication. A virtual UART (CONFIG_RPMSG_UART) is made available on which
+an OS running on the A55 cores can connect. There is also an option to use
+the filesystem client feature in which a remote directory can be mounted to
+a local directory (CONFIG_FS_RPMSGFS).
+
+The default sd-card image has made the RPMsg UART driver and the RPMsg FS 
+driver available who are compatible to NuttX.
+
diff --git 
a/Documentation/platforms/arm/imx9/boards/mr-navq95b/mr-navq95b-overview.png 
b/Documentation/platforms/arm/imx9/boards/mr-navq95b/mr-navq95b-overview.png
new file mode 100755
index 00000000000..e56b8d5e56c
Binary files /dev/null and 
b/Documentation/platforms/arm/imx9/boards/mr-navq95b/mr-navq95b-overview.png 
differ
diff --git a/boards/Kconfig b/boards/Kconfig
index 6a381363e52..e84a90b2d57 100644
--- a/boards/Kconfig
+++ b/boards/Kconfig
@@ -895,6 +895,16 @@ config ARCH_BOARD_IMX95_EVK
                This is the board configuration for the port of NuttX to the 
NXP i.MXRT
                evaluation kit, IMX95-EVK.  This board features the IMX95 MCU.
 
+config ARCH_BOARD_MR_NAVQ95B
+       bool "NXP MR NAVQ95B"
+       depends on ARCH_CHIP_IMX9_CORTEX_M
+       select ARCH_HAVE_LEDS
+       select ARCH_HAVE_BUTTONS
+       select ARCH_HAVE_IRQBUTTONS
+       ---help---
+               This is the board configuration for the port of NuttX to the 
NXP Mobile
+               Robotics NavQ95 board.  This board features the IMX95 MCU.
+
 config ARCH_BOARD_LC823450_XGEVK
        bool "ON Semiconductor LC823450-XGEVK development board"
        depends on ARCH_CHIP_LC823450
@@ -3601,6 +3611,7 @@ config ARCH_BOARD
        default "imxrt1064-evk"                if ARCH_BOARD_IMXRT1064_EVK
        default "imxrt1170-evk"                if ARCH_BOARD_IMXRT1170_EVK
        default "imx95-evk"                    if ARCH_BOARD_IMX95_EVK
+       default "mr-navq95b"                   if ARCH_BOARD_MR_NAVQ95B
        default "kwikstik-k40"                 if ARCH_BOARD_KWIKSTIK_K40
        default "launchxl-cc1310"              if ARCH_BOARD_LAUNCHXL_CC1310
        default "launchxl-cc1312r1"            if ARCH_BOARD_LAUNCHXL_CC1312R1
@@ -4042,6 +4053,9 @@ endif
 if ARCH_BOARD_IMX95_EVK
 source "boards/arm/imx9/imx95-evk/Kconfig"
 endif
+if ARCH_BOARD_MR_NAVQ95B
+source "boards/arm/imx9/mr-navq95b/Kconfig"
+endif
 if ARCH_BOARD_TEENSY_4X
 source "boards/arm/imxrt/teensy-4.x/Kconfig"
 endif
diff --git a/boards/arm/imx9/mr-navq95b/CMakeLists.txt 
b/boards/arm/imx9/mr-navq95b/CMakeLists.txt
new file mode 100644
index 00000000000..c1fdb635d94
--- /dev/null
+++ b/boards/arm/imx9/mr-navq95b/CMakeLists.txt
@@ -0,0 +1,30 @@
+# 
##############################################################################
+# boards/arm/imx9/mr-navq95b/CMakeLists.txt
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+# 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.
+#
+# 
##############################################################################
+
+add_subdirectory(src)
+
+if(NOT CONFIG_BUILD_FLAT)
+  add_subdirectory(kernel)
+  set_property(
+    GLOBAL PROPERTY LD_SCRIPT_USER ${CMAKE_CURRENT_LIST_DIR}/scripts/memory.ld
+                    ${CMAKE_CURRENT_LIST_DIR}/scripts/user-space.ld)
+endif()
diff --git a/boards/arm/imx9/mr-navq95b/Kconfig 
b/boards/arm/imx9/mr-navq95b/Kconfig
new file mode 100644
index 00000000000..5cd5a1bca97
--- /dev/null
+++ b/boards/arm/imx9/mr-navq95b/Kconfig
@@ -0,0 +1,18 @@
+#
+# For a description of the syntax of this configuration file,
+# see the file kconfig-language.txt in the NuttX tools repository.
+#
+
+choice IMX95_CODE_LOCATION
+       prompt "Code location"
+
+config IMX95_RUN_FROM_ITCM
+       bool "Run from Instruction Tightly Coupled Memory (ITCM)"
+
+config IMX95_RUN_FROM_DDR
+       bool "Run from SDRAM (DDR)"
+
+config IMX95_RUN_FROM_FLASH
+       bool "Run from NOR flash"
+
+endchoice
diff --git a/boards/arm/imx9/mr-navq95b/configs/nsh/defconfig 
b/boards/arm/imx9/mr-navq95b/configs/nsh/defconfig
new file mode 100644
index 00000000000..4aa196b5914
--- /dev/null
+++ b/boards/arm/imx9/mr-navq95b/configs/nsh/defconfig
@@ -0,0 +1,59 @@
+#
+# 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_RAMFUNCS is not set
+# CONFIG_IMX9_WFI_AWAKES_AT_SYSTICK is not set
+# CONFIG_NDEBUG is not set
+CONFIG_ARCH="arm"
+CONFIG_ARCH_BOARD="mr-navq95b"
+CONFIG_ARCH_BOARD_MR_NAVQ95B=y
+CONFIG_ARCH_CHIP="imx9"
+CONFIG_ARCH_CHIP_IMX95_M7=y
+CONFIG_ARCH_CHIP_IMX9_CORTEX_M=y
+CONFIG_ARCH_INTERRUPTSTACK=4096
+CONFIG_ARCH_STACKDUMP=y
+CONFIG_ARMV7M_DCACHE=y
+CONFIG_ARMV7M_DCACHE_WRITETHROUGH=y
+CONFIG_ARMV7M_DTCM=y
+CONFIG_ARMV7M_ICACHE=y
+CONFIG_ARMV7M_ITCM=y
+CONFIG_ARM_MPU=y
+CONFIG_ARM_MPU_RESET=y
+CONFIG_BINFMT_DISABLE=y
+CONFIG_BOARD_LOOPSPERMSEC=2664
+CONFIG_BUILTIN=y
+CONFIG_DEBUG_BUSFAULT=y
+CONFIG_DEBUG_FEATURES=y
+CONFIG_DEBUG_HARDFAULT_ALERT=y
+CONFIG_DEBUG_HARDFAULT_INFO=y
+CONFIG_DEBUG_SYMBOLS=y
+CONFIG_DEBUG_USAGEFAULT=y
+CONFIG_DEFAULT_TASK_STACKSIZE=8192
+CONFIG_FS_PROCFS=y
+CONFIG_IDLETHREAD_STACKSIZE=8192
+CONFIG_IMX9_IOMUX_OVER_SCMI=y
+CONFIG_IMX9_LPUART2=y
+CONFIG_INIT_ENTRYPOINT="nsh_main"
+CONFIG_INTELHEX_BINARY=y
+CONFIG_LIBC_LOCALTIME=y
+CONFIG_LPUART2_SERIAL_CONSOLE=y
+CONFIG_NSH_ARCHINIT=y
+CONFIG_NSH_BUILTIN_APPS=y
+CONFIG_NSH_DISABLE_IFUPDOWN=y
+CONFIG_NSH_FILEIOSIZE=512
+CONFIG_RAM_SIZE=134217728
+CONFIG_RAM_START=0x80000000
+CONFIG_RAW_BINARY=y
+CONFIG_SCHED_BACKTRACE=y
+CONFIG_SERIAL_TERMIOS=y
+CONFIG_STACK_COLORATION=y
+CONFIG_START_DAY=14
+CONFIG_START_MONTH=3
+CONFIG_SYSTEM_NSH=y
+CONFIG_TTY_SIGINT=y
+CONFIG_TTY_SIGTSTP=y
diff --git a/boards/arm/imx9/mr-navq95b/configs/rpmsg/defconfig 
b/boards/arm/imx9/mr-navq95b/configs/rpmsg/defconfig
new file mode 100644
index 00000000000..894d672fa80
--- /dev/null
+++ b/boards/arm/imx9/mr-navq95b/configs/rpmsg/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_ARCH_LEDS is not set
+# CONFIG_ARCH_RAMFUNCS is not set
+# CONFIG_IMX9_WFI_AWAKES_AT_SYSTICK is not set
+# CONFIG_NDEBUG is not set
+CONFIG_ARCH="arm"
+CONFIG_ARCH_BOARD="mr-navq95b"
+CONFIG_ARCH_BOARD_MR_NAVQ95B=y
+CONFIG_ARCH_CHIP="imx9"
+CONFIG_ARCH_CHIP_IMX95_M7=y
+CONFIG_ARCH_CHIP_IMX9_CORTEX_M=y
+CONFIG_ARCH_INTERRUPTSTACK=4096
+CONFIG_ARCH_STACKDUMP=y
+CONFIG_ARMV7M_DCACHE=y
+CONFIG_ARMV7M_DCACHE_WRITETHROUGH=y
+CONFIG_ARMV7M_DTCM=y
+CONFIG_ARMV7M_ICACHE=y
+CONFIG_ARMV7M_ITCM=y
+CONFIG_ARM_MPU=y
+CONFIG_ARM_MPU_RESET=y
+CONFIG_BINFMT_DISABLE=y
+CONFIG_BOARD_LOOPSPERMSEC=2664
+CONFIG_BUILTIN=y
+CONFIG_DEBUG_BUSFAULT=y
+CONFIG_DEBUG_FEATURES=y
+CONFIG_DEBUG_FULLOPT=y
+CONFIG_DEBUG_HARDFAULT_ALERT=y
+CONFIG_DEBUG_HARDFAULT_INFO=y
+CONFIG_DEBUG_IPC=y
+CONFIG_DEBUG_IPC_ERROR=y
+CONFIG_DEBUG_IPC_WARN=y
+CONFIG_DEBUG_RPMSG=y
+CONFIG_DEBUG_RPMSG_ERROR=y
+CONFIG_DEBUG_RPMSG_WARN=y
+CONFIG_DEBUG_RPTUN=y
+CONFIG_DEBUG_RPTUN_ERROR=y
+CONFIG_DEBUG_RPTUN_WARN=y
+CONFIG_DEBUG_SYMBOLS=y
+CONFIG_DEBUG_USAGEFAULT=y
+CONFIG_DEFAULT_TASK_STACKSIZE=8192
+CONFIG_DEV_RPMSG=y
+CONFIG_DEV_SIMPLE_ADDRENV=y
+CONFIG_FS_PROCFS=y
+CONFIG_FS_RPMSGFS=y
+CONFIG_IDLETHREAD_STACKSIZE=8192
+CONFIG_IMX9_IOMUX_OVER_SCMI=y
+CONFIG_IMX9_LPUART2=y
+CONFIG_IMX9_MU7=y
+CONFIG_INIT_ENTRYPOINT="nsh_main"
+CONFIG_INTELHEX_BINARY=y
+CONFIG_LIBC_LOCALTIME=y
+CONFIG_LPUART2_SERIAL_CONSOLE=y
+CONFIG_MM_HEAP_MEMPOOL_THRESHOLD=0
+CONFIG_NSH_ARCHINIT=y
+CONFIG_NSH_BUILTIN_APPS=y
+CONFIG_NSH_DISABLE_IFUPDOWN=y
+CONFIG_NSH_FILEIOSIZE=512
+CONFIG_RAM_SIZE=134217728
+CONFIG_RAM_START=0x80000000
+CONFIG_RAW_BINARY=y
+CONFIG_RPMSG_LOCAL_CPUNAME="cpuapp"
+CONFIG_RPMSG_UART=y
+CONFIG_RPTUN=y
+CONFIG_SCHED_BACKTRACE=y
+CONFIG_SCHED_WAITPID=y
+CONFIG_SERIAL_TERMIOS=y
+CONFIG_STACK_COLORATION=y
+CONFIG_START_DAY=14
+CONFIG_START_MONTH=3
+CONFIG_SYSTEM_CUTERM=y
+CONFIG_SYSTEM_CUTERM_DEFAULT_DEVICE="/dev/ttyproxy"
+CONFIG_SYSTEM_NSH=y
+CONFIG_TTY_SIGINT=y
+CONFIG_TTY_SIGTSTP=y
diff --git a/boards/arm/imx9/mr-navq95b/include/board.h 
b/boards/arm/imx9/mr-navq95b/include/board.h
new file mode 100644
index 00000000000..d3c77e789e4
--- /dev/null
+++ b/boards/arm/imx9/mr-navq95b/include/board.h
@@ -0,0 +1,200 @@
+/****************************************************************************
+ * boards/arm/imx9/mr-navq95b/include/board.h
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * SPDX-FileCopyrightText: 2026 NXP
+ *
+ * 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_IMX9_MR_NAVQ95B_INCLUDE_BOARD_H
+#define __BOARDS_ARM_IMX9_MR_NAVQ95B_INCLUDE_BOARD_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+#define BOARD_XTAL_FREQUENCY       24000000
+
+#define BOARD_CPU_FREQUENCY        800000000
+
+#define LPUART2_CLK                (LPUART2_CLK_ROOT_OSC_24M_CLK | 
CLOCK_DIV(1))
+#define LPUART5_CLK                (LPUART5_CLK_ROOT_SYS_PLL1_DFS0_DIV2_CLK | 
CLOCK_DIV(8))
+#define LPI2C1_CLK                 (LPI2C1_CLK_ROOT_OSC_24M_CLK | CLOCK_DIV(1))
+#define LPI2C4_CLK                 (LPI2C4_CLK_ROOT_OSC_24M_CLK | CLOCK_DIV(1))
+#define LPI2C6_CLK                 (LPI2C6_CLK_ROOT_OSC_24M_CLK | CLOCK_DIV(1))
+#define LPSPI1_CLK                 (LPSPI1_CLK_ROOT_OSC_24M_CLK | CLOCK_DIV(1))
+#define LPSPI8_CLK                 (LPSPI8_CLK_ROOT_OSC_24M_CLK | CLOCK_DIV(1))
+#define FLEXCAN1_CLK               (CAN1_CLK_ROOT_SYS_PLL1_DFS1_DIV2_CLK | 
CLOCK_DIV(5))
+#define FLEXCAN2_CLK               (CAN2_CLK_ROOT_SYS_PLL1_DFS1_DIV2_CLK | 
CLOCK_DIV(5))
+#define FLEXCAN3_CLK               (CAN3_CLK_ROOT_SYS_PLL1_DFS1_DIV2_CLK | 
CLOCK_DIV(5))
+
+/* 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                    LED1    LED2
+ *                                                       GREEN   RED
+ *   -------------------- ----------------------------- ------- -------
+ */
+
+#define LED_STARTED       0  /* NuttX has been started   OFF     OFF   */
+#define LED_HEAPALLOCATE  0  /* Heap has been allocated  OFF     OFF   */
+#define LED_IRQSENABLED   0  /* Interrupts enabled       OFF     OFF   */
+#define LED_STACKCREATED  1  /* Idle stack created       ON      OFF   */
+#define LED_INIRQ         2  /* In an interrupt         (No change)    */
+#define LED_SIGNAL        2  /* In a signal handler     (No change)    */
+#define LED_ASSERTION     2  /* An assertion failed     (No change)    */
+#define LED_PANIC         3  /* The system has crashed   OFF     FLASH */
+#undef  LED_IDLE             /* Not used                (Not used)     */
+
+/* Default PAD configurations */
+
+#define IOMUX_LPI2C_DEFAULT  (IOMUXC_PAD_OD_ENABLE | IOMUXC_PAD_FSEL_SFAST | 
IOMUXC_PAD_DSE_X6)
+#define IOMUX_LPSPI_DEFAULT  (IOMUXC_PAD_PU_ON     | IOMUXC_PAD_FSEL_FAST  | 
IOMUXC_PAD_DSE_X6)
+#define IOMUX_GPIO_DEFAULT   (IOMUXC_PAD_FSEL_SLOW | IOMUXC_PAD_DSE_X6)
+
+/* UART pin muxings */
+
+#define MUX_LPUART2_RX       IOMUX_CFG(IOMUXC_PAD_UART2_RXD_LPUART2_RX, 0, 
IOMUXC_MUX_SION_ON)
+#define MUX_LPUART2_TX       IOMUX_CFG(IOMUXC_PAD_UART2_TXD_LPUART2_TX, 
IOMUXC_PAD_FSEL_SLOW | IOMUXC_PAD_DSE_X4, 0)
+
+#define MUX_LPUART5_RX       IOMUX_CFG(IOMUXC_PAD_GPIO_IO01_LPUART5_RX, 0, 
IOMUXC_MUX_SION_ON)
+#define MUX_LPUART5_TX       IOMUX_CFG(IOMUXC_PAD_GPIO_IO00_LPUART5_TX, 
IOMUXC_PAD_FSEL_SLOW | IOMUXC_PAD_DSE_X4, 0)
+
+/* LPI2Cs */
+
+#define MUX_LPI2C1_SCL       IOMUX_CFG(IOMUXC_PAD_I2C1_SCL_LPI2C1_SCL, 
IOMUX_LPI2C_DEFAULT, IOMUXC_MUX_SION_ON)
+#define MUX_LPI2C1_SDA       IOMUX_CFG(IOMUXC_PAD_I2C1_SDA_LPI2C1_SDA, 
IOMUX_LPI2C_DEFAULT, IOMUXC_MUX_SION_ON)
+
+#define MUX_LPI2C4_SCL       IOMUX_CFG(IOMUXC_PAD_GPIO_IO31_LPI2C4_SCL, 
IOMUX_LPI2C_DEFAULT, IOMUXC_MUX_SION_ON)
+#define MUX_LPI2C4_SDA       IOMUX_CFG(IOMUXC_PAD_GPIO_IO30_LPI2C4_SDA, 
IOMUX_LPI2C_DEFAULT, IOMUXC_MUX_SION_ON)
+
+#define MUX_LPI2C6_SCL       IOMUX_CFG(IOMUXC_PAD_GPIO_IO03_LPI2C6_SCL, 
IOMUX_LPI2C_DEFAULT, IOMUXC_MUX_SION_ON)
+#define MUX_LPI2C6_SDA       IOMUX_CFG(IOMUXC_PAD_GPIO_IO02_LPI2C6_SDA, 
IOMUX_LPI2C_DEFAULT, IOMUXC_MUX_SION_ON)
+
+/* I2C reset functionality */
+
+#define GPIO_LPI2C1_SCL_RESET  (GPIO_PORT1 | GPIO_PIN0 | GPIO_OUTPUT | 
GPIO_OUTPUT_ONE)
+#define GPIO_LPI2C1_SDA_RESET  (GPIO_PORT1 | GPIO_PIN1 | GPIO_OUTPUT | 
GPIO_OUTPUT_ONE)
+
+#define GPIO_LPI2C4_SCL_RESET  (GPIO_PORT2 | GPIO_PIN31 | GPIO_OUTPUT | 
GPIO_OUTPUT_ONE)
+#define GPIO_LPI2C4_SDA_RESET  (GPIO_PORT2 | GPIO_PIN30 | GPIO_OUTPUT | 
GPIO_OUTPUT_ONE)
+
+#define GPIO_LPI2C6_SCL_RESET  (GPIO_PORT2 | GPIO_PIN3 | GPIO_OUTPUT | 
GPIO_OUTPUT_ONE)
+#define GPIO_LPI2C6_SDA_RESET  (GPIO_PORT2 | GPIO_PIN2 | GPIO_OUTPUT | 
GPIO_OUTPUT_ONE)
+
+/* LPSPIs */
+
+#define MUX_LPSPI1_SCK       IOMUX_CFG(IOMUXC_PAD_SAI1_TXD0_LPSPI1_SCK,  
IOMUX_LPSPI_DEFAULT, IOMUXC_MUX_SION_ON)
+#define MUX_LPSPI1_MOSI      IOMUX_CFG(IOMUXC_PAD_SAI1_RXD0_LPSPI1_SOUT, 
IOMUX_LPSPI_DEFAULT, IOMUXC_MUX_SION_ON)
+#define MUX_LPSPI1_MISO      IOMUX_CFG(IOMUXC_PAD_SAI1_TXC_LPSPI1_SIN,  
IOMUX_LPSPI_DEFAULT, IOMUXC_MUX_SION_ON)
+
+#define MUX_LPSPI8_SCK       IOMUX_CFG(IOMUXC_PAD_GPIO_IO15_LPSPI8_SCK,  
IOMUX_LPSPI_DEFAULT, IOMUXC_MUX_SION_ON)
+#define MUX_LPSPI8_MOSI      IOMUX_CFG(IOMUXC_PAD_GPIO_IO14_LPSPI8_SOUT, 
IOMUX_LPSPI_DEFAULT, IOMUXC_MUX_SION_ON)
+#define MUX_LPSPI8_MISO      IOMUX_CFG(IOMUXC_PAD_GPIO_IO13_LPSPI8_SIN,  
IOMUX_LPSPI_DEFAULT, IOMUXC_MUX_SION_ON)
+
+/* SPI CS */
+
+#define MUX_LPSPI1_CS        IOMUX_CFG(IOMUXC_PAD_SAI1_TXFS_GPIO1_IO11,  
IOMUX_GPIO_DEFAULT, IOMUXC_MUX_SION_ON)
+
+#define MUX_LPSPI8_CS        IOMUX_CFG(IOMUXC_PAD_GPIO_IO12_GPIO2_IO12,  
IOMUX_LPSPI_DEFAULT, IOMUXC_MUX_SION_ON)
+#define MUX_LPSPI8_CS1       IOMUX_CFG(IOMUXC_PAD_GPIO_IO26_GPIO2_IO26,  
IOMUX_LPSPI_DEFAULT, IOMUXC_MUX_SION_ON)
+
+#define GPIO_LPSPI1_CS       (GPIO_PORT1 | GPIO_PIN11 | GPIO_OUTPUT | 
GPIO_OUTPUT_ONE)
+
+#define GPIO_LPSPI8_CS       (GPIO_PORT2 | GPIO_PIN12 | GPIO_OUTPUT | 
GPIO_OUTPUT_ONE)
+#define GPIO_LPSPI8_CS1      (GPIO_PORT2 | GPIO_PIN26 | GPIO_OUTPUT | 
GPIO_OUTPUT_ONE)
+
+/* FlexCAN */
+
+#define GPIO_FLEXCAN1_TX     IOMUX_CFG(IOMUXC_PAD_PDM_CLK_CAN1_TX,  
IOMUX_GPIO_DEFAULT, IOMUXC_MUX_SION_ON)
+#define GPIO_FLEXCAN1_RX     IOMUX_CFG(IOMUXC_PAD_PDM_BIT_STREAM0_CAN1_RX,  
IOMUX_GPIO_DEFAULT, IOMUXC_MUX_SION_ON)
+
+#define GPIO_FLEXCAN2_TX     IOMUX_CFG(IOMUXC_PAD_GPIO_IO25_CAN2_TX,  
IOMUX_GPIO_DEFAULT, IOMUXC_MUX_SION_ON)
+#define GPIO_FLEXCAN2_RX     IOMUX_CFG(IOMUXC_PAD_GPIO_IO27_CAN2_RX,  
IOMUX_GPIO_DEFAULT, IOMUXC_MUX_SION_ON)
+
+#define GPIO_FLEXCAN2_TX     IOMUX_CFG(IOMUXC_PAD_CCM_CLKO3_CAN3_TX,  
IOMUX_GPIO_DEFAULT, IOMUXC_MUX_SION_ON)
+#define GPIO_FLEXCAN2_RX     IOMUX_CFG(IOMUXC_PAD_CCM_CLKO4_CAN3_RX,  
IOMUX_GPIO_DEFAULT, IOMUXC_MUX_SION_ON)
+
+/* Set the PLL clocks as follows:
+ *
+ * - OSC24M       : 24   MHz
+ * - ARMPLL_OUT   : 1692 MHz
+ * - DRAMPLL      : 933  MHz
+ * - SYSPLL1      : 4000 MHz
+ * - SYSPLL_PFD0  : 1000 MHz
+ * - SYSPLL_PFD1  : 800  MHz
+ * - SYSPLL_PFD2  : 625  MHz
+ * - AUDIOPLL_OUT : OFF
+ * - VIDEOPLL_OUT : OFF
+ *
+ * After reset all clock sources (OSCPLL) and root clocks (CLOCK_ROOT) are
+ * running, but gated (LPCG).
+ *
+ * By default, all peripheral root clocks are set to the 24 MHz oscillator.
+ */
+
+#define ARMPLL_CFG  PLL_CFG(IMX95_ARMPLL_BASE, false, PLL_PARMS(1, 2, 141, 0, 
0))
+#define DRAMPLL_CFG PLL_CFG(IMX95_DRAMPLL_BASE, true, PLL_PARMS(1, 2, 155, 1, 
2))
+
+#define PLL_CFGS \
+  { \
+    PLL_CFG(IMX95_SYSPLL_BASE,  true, PLL_PARMS(1, 4, 166, 2, 3)), \
+  }
+
+#define PFD_CFGS \
+  { \
+    PFD_CFG(IMX95_SYSPLL_BASE, 0, PFD_PARMS(4, 0, true)), \
+    PFD_CFG(IMX95_SYSPLL_BASE, 1, PFD_PARMS(5, 0, true)), \
+    PFD_CFG(IMX95_SYSPLL_BASE, 2, PFD_PARMS(6, 2, true)), \
+  }
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+#ifndef __ASSEMBLY__
+
+#undef EXTERN
+#if defined(__cplusplus)
+#define EXTERN extern "C"
+extern "C"
+{
+#else
+#define EXTERN extern
+#endif
+
+/****************************************************************************
+ * Public Function Prototypes
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* __ASSEMBLY__ */
+#endif /* __BOARDS_ARM_IMX9_MR_NAVQ95B_INCLUDE_BOARD_H */
diff --git a/boards/arm/imx9/mr-navq95b/scripts/Make.defs 
b/boards/arm/imx9/mr-navq95b/scripts/Make.defs
new file mode 100644
index 00000000000..2b0ff980847
--- /dev/null
+++ b/boards/arm/imx9/mr-navq95b/scripts/Make.defs
@@ -0,0 +1,56 @@
+############################################################################
+# boards/arm/imx9/mr-navq95b/scripts/Make.defs
+#
+# SPDX-License-Identifier: Apache-2.0
+# SPDX-FileCopyrightText: 2026 NXP
+#
+# 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_IMX95_RUN_FROM_ITCM),y)
+LDSCRIPT = itcm.ld
+else ifeq ($(CONFIG_IMX95_RUN_FROM_DDR),y)
+LDSCRIPT = ddr.ld
+else ifeq ($(CONFIG_IMX95_RUN_FROM_FLASH),y)
+LDSCRIPT = flash.ld
+endif
+
+ARCHSCRIPT += $(BOARD_DIR)$(DELIM)scripts$(DELIM)$(LDSCRIPT)
+
+ARCHPICFLAGS = -fpic -msingle-pic-base -mpic-register=r10
+
+CFLAGS := $(ARCHCFLAGS) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHINCLUDES) 
$(ARCHDEFINES) $(EXTRAFLAGS) -pipe
+CPICFLAGS = $(ARCHPICFLAGS) $(CFLAGS)
+CXXFLAGS := $(ARCHCXXFLAGS) $(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
+LDMODULEFLAGS += -T $(call CONVERT_PATH,$(TOPDIR)/libs/libc/elf/gnu-elf.ld)
diff --git a/boards/arm/imx9/mr-navq95b/scripts/ddr.ld 
b/boards/arm/imx9/mr-navq95b/scripts/ddr.ld
new file mode 100644
index 00000000000..1646087eb4b
--- /dev/null
+++ b/boards/arm/imx9/mr-navq95b/scripts/ddr.ld
@@ -0,0 +1,137 @@
+/****************************************************************************
+ * boards/arm/imx9/mr-navq95b/scripts/ddr.ld
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * SPDX-FileCopyrightText: 2026 NXP
+ *
+ * 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.
+ *
+ *
+ ****************************************************************************/
+
+/*
+ * Flash controller
+ *    1) 32 MB of FlexSPI_1 at 0x0200:0000
+ * The on-chip SRAM is split in these parts:
+ *    1) 256Kb of program memory located at 0x0000:0000
+ *    2) 256Kb of data memory beginning at the address 0x2000:0000
+ *    3) 352Kb of OCRAM beginning at the address 0x2048:0000
+ *    4) 4Mb of SDRAM located at 0x9000:0000
+ */
+
+MEMORY
+{
+  m_interrupts (rx)  : ORIGIN = 0x90000000, LENGTH = 0x00000800
+  flash (rx)  : ORIGIN = 0x90000800, LENGTH = 0x003FF800
+  sram  (rwx) : ORIGIN = 0x20000000, LENGTH = 256K
+  ocram (rwx) : ORIGIN = 0x20480000, LENGTH = 352K
+}
+
+OUTPUT_ARCH(arm)
+EXTERN(_vectors)
+ENTRY(_stext)
+
+SECTIONS
+{
+    .interrupts :
+    {
+        __VECTOR_TABLE = .;
+        __Vectors = .;
+        . = ALIGN(4);
+        KEEP(*(.vectors))     /* Startup code */
+        . = ALIGN(4);
+    } > m_interrupts
+
+    .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(.);
+    } > flash
+
+    .resource_table :
+    {
+        . = ALIGN(8);
+        KEEP(*(.resource_table))
+        . = ALIGN(4);
+    } > flash
+
+    .init_section : {
+        _sinit = ABSOLUTE(.);
+        KEEP(*(SORT_BY_INIT_PRIORITY(.init_array.*) 
SORT_BY_INIT_PRIORITY(.ctors.*)))
+        KEEP(*(.init_array .ctors))
+        _einit = ABSOLUTE(.);
+    } > flash
+
+    .ARM.extab : {
+        *(.ARM.extab*)
+    } > flash
+
+    __exidx_start = ABSOLUTE(.);
+    .ARM.exidx : {
+        *(.ARM.exidx*)
+    } > flash
+    __exidx_end = ABSOLUTE(.);
+
+    _eronly = ABSOLUTE(.);
+
+    .data : {
+        _sdata = ABSOLUTE(.);
+        *(.data .data.*)
+        *(.gnu.linkonce.d.*)
+        CONSTRUCTORS
+        . = ALIGN(4);
+        _edata = ABSOLUTE(.);
+    } > sram AT > flash
+
+    .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) }
+
+    _ram_start = ORIGIN(sram);
+    _ram_size = LENGTH(sram);
+    _ram_end = ORIGIN(sram) + LENGTH(sram);
+    _ocram_start = ORIGIN(ocram);
+    _ocram_size = LENGTH(ocram);
+    _ocram_end = ORIGIN(ocram) + LENGTH(ocram);
+}
diff --git a/boards/arm/imx9/mr-navq95b/scripts/flash.ld 
b/boards/arm/imx9/mr-navq95b/scripts/flash.ld
new file mode 100644
index 00000000000..cc9517ba653
--- /dev/null
+++ b/boards/arm/imx9/mr-navq95b/scripts/flash.ld
@@ -0,0 +1,138 @@
+/****************************************************************************
+ * boards/arm/imx9/mr-navq95b/scripts/flash.ld
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * SPDX-FileCopyrightText: 2026 NXP
+ *
+ * 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.
+ *
+ *
+ ****************************************************************************/
+
+/*
+ * Flash controller
+ *    1) 32 MB of FlexSPI_1 at 0x0200:0000
+ * The on-chip SRAM is split in these parts:
+ *    1) 256Kb of program memory located at 0x0000:0000
+ *    2) 256Kb of data memory beginning at the address 0x2000:0000
+ *    3) 352Kb of OCRAM beginning at the address 0x2048:0000
+ *    4) 4Mb of SDRAM located at 0x9000:0000
+ */
+
+MEMORY
+{
+  mcuboot_header (rwx) : ORIGIN = 0x28000000, LENGTH = 0x00000800
+  m_interrupts (rx)    : ORIGIN = 0x28000800, LENGTH = 0x00000800
+  flash (rx)           : ORIGIN = 0x28001000, LENGTH = 0x01FFE000
+  sram  (rwx)          : ORIGIN = 0x20000000, LENGTH = 256K
+  ocram (rwx)          : ORIGIN = 0x20480000, LENGTH = 352K
+}
+
+OUTPUT_ARCH(arm)
+EXTERN(_vectors)
+ENTRY(_stext)
+
+SECTIONS
+{
+    .interrupts :
+    {
+        __VECTOR_TABLE = .;
+        __Vectors = .;
+        . = ALIGN(4);
+        KEEP(*(.vectors))     /* Startup code */
+        . = ALIGN(4);
+    } > m_interrupts
+
+    .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(.);
+    } > flash
+
+    .resource_table :
+    {
+        . = ALIGN(8);
+        KEEP(*(.resource_table))
+        . = ALIGN(4);
+    } > flash
+
+    .init_section : {
+        _sinit = ABSOLUTE(.);
+        KEEP(*(SORT_BY_INIT_PRIORITY(.init_array.*) 
SORT_BY_INIT_PRIORITY(.ctors.*)))
+        KEEP(*(.init_array .ctors))
+        _einit = ABSOLUTE(.);
+    } > flash
+
+    .ARM.extab : {
+        *(.ARM.extab*)
+    } > flash
+
+    __exidx_start = ABSOLUTE(.);
+    .ARM.exidx : {
+        *(.ARM.exidx*)
+    } > flash
+    __exidx_end = ABSOLUTE(.);
+
+    _eronly = ABSOLUTE(.);
+
+    .data : {
+        _sdata = ABSOLUTE(.);
+        *(.data .data.*)
+        *(.gnu.linkonce.d.*)
+        CONSTRUCTORS
+        . = ALIGN(4);
+        _edata = ABSOLUTE(.);
+    } > sram AT > flash
+
+    .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) }
+
+    _ram_start = ORIGIN(sram);
+    _ram_size = LENGTH(sram);
+    _ram_end = ORIGIN(sram) + LENGTH(sram);
+    _ocram_start = ORIGIN(ocram);
+    _ocram_size = LENGTH(ocram);
+    _ocram_end = ORIGIN(ocram) + LENGTH(ocram);
+}
diff --git a/boards/arm/imx9/mr-navq95b/scripts/itcm.ld 
b/boards/arm/imx9/mr-navq95b/scripts/itcm.ld
new file mode 100644
index 00000000000..3fed810537b
--- /dev/null
+++ b/boards/arm/imx9/mr-navq95b/scripts/itcm.ld
@@ -0,0 +1,137 @@
+/****************************************************************************
+ * boards/arm/imx9/mr-navq95b/scripts/itcm.ld
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * SPDX-FileCopyrightText: 2026 NXP
+ *
+ * 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.
+ *
+ *
+ ****************************************************************************/
+
+/*
+ * Flash controller
+ *    1) 32 MB of FlexSPI_1 at 0x0200:0000
+ * The on-chip SRAM is split in these parts:
+ *    1) 256Kb of program memory located at 0x0000:0000
+ *    2) 256Kb of data memory beginning at the address 0x2000:0000
+ *    3) 352Kb of OCRAM beginning at the address 0x2048:0000
+ *    4) 4Mb of SDRAM located at 0x9000:0000
+ */
+
+MEMORY
+{
+  m_interrupts (rx)  : ORIGIN = 0x00000000, LENGTH = 0x00000800
+  flash (rx)  : ORIGIN = 0x00000800, LENGTH = 0x0003F800
+  sram  (rwx) : ORIGIN = 0x20000000, LENGTH = 256K
+  ocram (rwx) : ORIGIN = 0x20480000, LENGTH = 352K
+}
+
+OUTPUT_ARCH(arm)
+EXTERN(_vectors)
+ENTRY(_stext)
+
+SECTIONS
+{
+    .interrupts :
+    {
+        __VECTOR_TABLE = .;
+        __Vectors = .;
+        . = ALIGN(4);
+        KEEP(*(.vectors))     /* Startup code */
+        . = ALIGN(4);
+    } > m_interrupts
+
+    .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(.);
+    } > flash
+
+    .resource_table :
+    {
+        . = ALIGN(8);
+        KEEP(*(.resource_table))
+        . = ALIGN(4);
+    } > flash
+
+    .init_section : {
+        _sinit = ABSOLUTE(.);
+        KEEP(*(SORT_BY_INIT_PRIORITY(.init_array.*) 
SORT_BY_INIT_PRIORITY(.ctors.*)))
+        KEEP(*(.init_array .ctors))
+        _einit = ABSOLUTE(.);
+    } > flash
+
+    .ARM.extab : {
+        *(.ARM.extab*)
+    } > flash
+
+    __exidx_start = ABSOLUTE(.);
+    .ARM.exidx : {
+        *(.ARM.exidx*)
+    } > flash
+    __exidx_end = ABSOLUTE(.);
+
+    _eronly = ABSOLUTE(.);
+
+    .data : {
+        _sdata = ABSOLUTE(.);
+        *(.data .data.*)
+        *(.gnu.linkonce.d.*)
+        CONSTRUCTORS
+        . = ALIGN(4);
+        _edata = ABSOLUTE(.);
+    } > sram AT > flash
+
+    .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) }
+
+    _ram_start = ORIGIN(sram);
+    _ram_size = LENGTH(sram);
+    _ram_end = ORIGIN(sram) + LENGTH(sram);
+    _ocram_start = ORIGIN(ocram);
+    _ocram_size = LENGTH(ocram);
+    _ocram_end = ORIGIN(ocram) + LENGTH(ocram);
+}
diff --git a/boards/arm/imx9/mr-navq95b/src/CMakeLists.txt 
b/boards/arm/imx9/mr-navq95b/src/CMakeLists.txt
new file mode 100644
index 00000000000..2a30bf6bce7
--- /dev/null
+++ b/boards/arm/imx9/mr-navq95b/src/CMakeLists.txt
@@ -0,0 +1,49 @@
+# 
##############################################################################
+# boards/arm/imx9/mr-navq95b/src/CMakeLists.txt
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+# 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.
+#
+# 
##############################################################################
+
+set(SRCS imx95_boardinit.c imx95_bringup.c)
+
+if(CONFIG_BOARDCTL)
+  list(APPEND SRCS imx95_appinit.c)
+endif()
+
+if(CONFIG_PWM)
+  list(APPEND SRCS imx95_pwm.c)
+endif()
+
+if(CONFIG_IMX9_LPI2C)
+  list(APPEND SRCS imx95_i2c.c)
+endif()
+
+if(CONFIG_IMX9_LPSPI)
+  list(APPEND SRCS imx95_spi.c)
+endif()
+
+target_sources(board PRIVATE ${SRCS})
+
+if(CONFIG_IMX95_RUN_FROM_ITCM)
+  set_property(GLOBAL PROPERTY LD_SCRIPT "${NUTTX_BOARD_DIR}/scripts/itcm.ld")
+elseif(CONFIG_IMX95_RUN_FROM_DDR)
+  set_property(GLOBAL PROPERTY LD_SCRIPT "${NUTTX_BOARD_DIR}/scripts/ddr.ld")
+elseif(CONFIG_IMX95_RUN_FROM_FLASH)
+  set_property(GLOBAL PROPERTY LD_SCRIPT "${NUTTX_BOARD_DIR}/scripts/flash.ld")
+endif()
diff --git a/boards/arm/imx9/mr-navq95b/src/Makefile 
b/boards/arm/imx9/mr-navq95b/src/Makefile
new file mode 100644
index 00000000000..5f75df705b0
--- /dev/null
+++ b/boards/arm/imx9/mr-navq95b/src/Makefile
@@ -0,0 +1,44 @@
+############################################################################
+# boards/arm/imx9/mr-navq95b/src/Makefile
+#
+# SPDX-License-Identifier: Apache-2.0
+# SPDX-FileCopyrightText: 2026 NXP
+#
+# 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 = imx95_boardinit.c imx95_bringup.c
+
+ifeq ($(CONFIG_BOARDCTL),y)
+CSRCS += imx95_appinit.c
+endif
+
+ifeq ($(CONFIG_PWM),y)
+CSRCS += imx95_pwm.c
+endif
+
+ifeq ($(CONFIG_IMX9_LPI2C),y)
+CSRCS += imx95_i2c.c
+endif
+
+ifeq ($(CONFIG_IMX9_LPSPI),y)
+CSRCS += imx95_spi.c
+endif
+
+include $(TOPDIR)/boards/Board.mk
diff --git a/boards/arm/imx9/mr-navq95b/src/imx95_appinit.c 
b/boards/arm/imx9/mr-navq95b/src/imx95_appinit.c
new file mode 100644
index 00000000000..6a3d2d40e3f
--- /dev/null
+++ b/boards/arm/imx9/mr-navq95b/src/imx95_appinit.c
@@ -0,0 +1,76 @@
+/****************************************************************************
+ * boards/arm/imx9/mr-navq95b/src/imx95_appinit.c
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * SPDX-FileCopyrightText: 2026 NXP
+ *
+ * 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 <nuttx/board.h>
+#include "mr-navq95b.h"
+
+#ifdef CONFIG_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)
+{
+  UNUSED(arg);
+#ifndef CONFIG_BOARD_LATE_INITIALIZE
+  /* Perform board initialization */
+
+  return imx95_bringup();
+#else
+  return OK;
+#endif
+}
+
+#endif /* CONFIG_BOARDCTL */
diff --git a/boards/arm/imx9/mr-navq95b/src/imx95_boardinit.c 
b/boards/arm/imx9/mr-navq95b/src/imx95_boardinit.c
new file mode 100644
index 00000000000..85ae27e8b6f
--- /dev/null
+++ b/boards/arm/imx9/mr-navq95b/src/imx95_boardinit.c
@@ -0,0 +1,116 @@
+/****************************************************************************
+ * boards/arm/imx9/mr-navq95b/src/imx95_boardinit.c
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * SPDX-FileCopyrightText: 2026 NXP
+ *
+ * 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 <stdint.h>
+#include "mr-navq95b.h"
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: imx95_memory_initialize
+ *
+ * Description:
+ *   All i.MX8 architectures must provide the following entry point.  This
+ *   entry point is called early in the initialization before memory has
+ *   been configured.  This board-specific function is responsible for
+ *   configuring any on-board memories.
+ *
+ *   Logic in imx95_memory_initialize must be careful to avoid using any
+ *   global variables because those will be uninitialized at the time this
+ *   function is called.
+ *
+ * Input Parameters:
+ *   None
+ *
+ * Returned Value:
+ *   None
+ *
+ ****************************************************************************/
+
+void imx95_memory_initialize(void)
+{
+  /* SDRAM was initialized by a bootloader in the supported configurations. */
+}
+
+/****************************************************************************
+ * Name: imx95_board_initialize
+ *
+ * Description:
+ *   All i.MX8 architectures must provide the following entry point.  This
+ *   entry point is called in the initialization phase -- after
+ *   imx_memory_initialize and after all memory has been configured and
+ *   mapped but before any devices have been initialized.
+ *
+ * Input Parameters:
+ *   None
+ *
+ * Returned Value:
+ *   None
+ *
+ ****************************************************************************/
+
+void imx9_boardinitialize(void)
+{
+#ifdef CONFIG_ARCH_LEDS
+  /* Configure on-board LEDs if LED support has been selected. */
+
+#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 */
+
+  imx95_bringup();
+}
+#endif /* CONFIG_BOARD_LATE_INITIALIZE */
diff --git a/boards/arm/imx9/mr-navq95b/src/imx95_bringup.c 
b/boards/arm/imx9/mr-navq95b/src/imx95_bringup.c
new file mode 100644
index 00000000000..1cd94db0004
--- /dev/null
+++ b/boards/arm/imx9/mr-navq95b/src/imx95_bringup.c
@@ -0,0 +1,101 @@
+/****************************************************************************
+ * boards/arm/imx9/mr-navq95b/src/imx95_bringup.c
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * SPDX-FileCopyrightText: 2026 NXP
+ *
+ * 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/fs/fs.h>
+#include <sys/types.h>
+#include <syslog.h>
+#include "mr-navq95b.h"
+
+#ifdef CONFIG_RPTUN
+#  include <imx9_rptun.h>
+#endif
+
+#ifdef CONFIG_RPMSG_UART
+#  include <nuttx/serial/uart_rpmsg.h>
+#endif
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+#ifdef CONFIG_RPMSG_UART
+void rpmsg_serialinit(void)
+{
+  uart_rpmsg_init("netcore", "proxy", 4096, true);
+}
+#endif
+
+/****************************************************************************
+ * Name: imx_bringup
+ *
+ * Description:
+ *   Bring up board features
+ *
+ ****************************************************************************/
+
+int imx95_bringup(void)
+{
+  int ret;
+
+#ifdef CONFIG_RPTUN
+  imx9_rptun_init("imx9-shmem", "netcore");
+#endif
+
+#ifdef CONFIG_FS_PROCFS
+  /* Mount the procfs file system */
+
+  ret = nx_mount(NULL, "/proc", "procfs", 0, NULL);
+  if (ret < 0)
+    {
+      syslog(LOG_ERR, "ERROR: Failed to mount procfs at /proc: %d\n", ret);
+    }
+#endif
+
+#if defined(CONFIG_IMX9_LPI2C)
+  /* Configure I2C peripheral interfaces */
+
+  ret = imx95_i2c_initialize();
+  if (ret < 0)
+    {
+      syslog(LOG_ERR, "Failed to initialize I2C driver: %d\n", ret);
+    }
+#endif
+
+#if defined(CONFIG_IMX9_LPSPI1)
+  /* Configure SPI peripheral interfaces */
+
+  ret = imx95_spi_initialize();
+  if (ret < 0)
+    {
+      syslog(LOG_ERR, "Failed to initialize SPI driver: %d\n", ret);
+    }
+#endif
+
+  UNUSED(ret);
+  return OK;
+}
diff --git a/boards/arm/imx9/mr-navq95b/src/imx95_i2c.c 
b/boards/arm/imx9/mr-navq95b/src/imx95_i2c.c
new file mode 100644
index 00000000000..0e7689f6f3c
--- /dev/null
+++ b/boards/arm/imx9/mr-navq95b/src/imx95_i2c.c
@@ -0,0 +1,88 @@
+/****************************************************************************
+ * boards/arm/imx9/mr-navq95b/src/imx95_i2c.c
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * SPDX-FileCopyrightText: 2026 NXP
+ *
+ * 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/i2c/i2c_master.h>
+#include <nuttx/sensors/bmm150.h>
+#include <debug.h>
+#include <errno.h>
+#include <sys/types.h>
+
+#include "imx9_lpi2c.h"
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: board_i2c_init
+ *
+ * Description:
+ *   Configure the I2C driver.
+ *
+ * Returned Value:
+ *   Zero (OK) is returned on success; A negated errno value is returned
+ *   to indicate the nature of any failure.
+ *
+ ****************************************************************************/
+
+int imx95_i2c_initialize(void)
+{
+  int ret = OK;
+
+#ifdef CONFIG_IMX9_LPI2C6
+  struct i2c_master_s *i2c;
+
+  i2c = imx9_i2cbus_initialize(6);
+  if (i2c == NULL)
+    {
+      i2cerr("ERROR: Failed to init I2C6 interface\n");
+      return -ENODEV;
+    }
+
+#ifdef CONFIG_SENSORS_BMM150
+  struct bmm150_config_s bmm150_config = {
+    .i2c = i2c,
+    .addr = 0x12,
+  };
+
+  bmm150_register_uorb(0, &bmm150_config);
+#endif
+
+#ifdef CONFIG_I2C_DRIVER
+  ret = i2c_register(i2c, 0);
+  if (ret < 0)
+    {
+      i2cerr("ERROR: Failed to register I2C6 driver: %d\n", ret);
+      imx9_i2cbus_uninitialize(i2c);
+      return ret;
+    }
+#endif
+
+#endif
+  return OK;
+}
diff --git a/boards/arm/imx9/mr-navq95b/src/imx95_spi.c 
b/boards/arm/imx9/mr-navq95b/src/imx95_spi.c
new file mode 100644
index 00000000000..846f9146608
--- /dev/null
+++ b/boards/arm/imx9/mr-navq95b/src/imx95_spi.c
@@ -0,0 +1,164 @@
+/****************************************************************************
+ * boards/arm/imx9/mr-navq95b/src/imx95_spi.c
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * SPDX-FileCopyrightText: 2026 NXP
+ *
+ * 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/spi/spi_transfer.h>
+#include <debug.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <arch/board/board.h>
+
+#include "imx9_gpio.h"
+#include "imx9_lpspi.h"
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+#ifdef CONFIG_IMX9_LPSPI1
+static struct spi_dev_s *g_spi1;
+#endif
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+#ifdef CONFIG_IMX9_LPSPI
+
+/****************************************************************************
+ * Name: imx95_lpspix_select
+ *
+ * Description:
+ *   Enable/disable the SPI chip select.  The implementation of this method
+ *   must include handshaking:  If a device is selected, it must hold off
+ *   all other attempts to select the device until the device is deselected.
+ *   Required.
+ *
+ * Input Parameters:
+ *   dev -      Device-specific state data
+ *   devid -    Identifies the device to select
+ *   selected - true: slave selected, false: slave de-selected
+ *
+ * Returned Value:
+ *   None
+ *
+ ****************************************************************************/
+
+void imx9_lpspi_select(struct spi_dev_s *dev, uint32_t devid, bool selected)
+{
+#ifdef CONFIG_IMX9_LPSPI1
+  if (dev == g_spi1)
+    {
+      imx9_gpio_write(GPIO_LPSPI1_CS, !selected);
+    }
+#endif
+}
+
+/****************************************************************************
+ * Name: imx95_lpspix_status
+ *
+ * Description:
+ *   Get SPI/MMC status.  Optional.
+ *
+ * Input Parameters:
+ *   dev   - Device-specific state data
+ *   devid - Identifies the device to report status on
+ *
+ * Returned Value:
+ *   Returns a bitset of status values (see SPI_STATUS_* defines)
+ *
+ ****************************************************************************/
+
+uint8_t imx9_lpspi_status(struct spi_dev_s *dev, uint32_t devid)
+{
+  return 0;
+}
+
+/****************************************************************************
+ * Name: imx95_lpspixcmddata
+ *
+ * Description:
+ *   Some devices require an additional out-of-band bit to specify if the
+ *   next word sent to the device is a command or data. This is typical, for
+ *   example, in "9-bit" displays where the 9th bit is the CMD/DATA bit.
+ *   This function provides selection of command or data.
+ *
+ *   This "latches" the CMD/DATA state.  It does not have to be called before
+ *   every word is transferred; only when the CMD/DATA state changes.  This
+ *   method is required if CONFIG_SPI_CMDDATA is selected in the NuttX
+ *   configuration
+ *
+ * Input Parameters:
+ *   dev - Device-specific state data
+ *   cmd - TRUE: The following word is a command; FALSE: the following words
+ *         are data.
+ *
+ * Returned Value:
+ *   OK unless an error occurs.  Then a negated errno value is returned
+ *
+ ****************************************************************************/
+
+int imx95_lpspi_cmddata(struct spi_dev_s *dev, uint32_t devid, bool cmd)
+{
+  return -ENODEV;
+}
+#endif
+
+/****************************************************************************
+ * Name: board_spi_initialize
+ *
+ * Description:
+ *   Initialize and register SPI driver for the defined SPI ports.
+ *
+ ****************************************************************************/
+
+int imx95_spi_initialize(void)
+{
+  int ret = OK;
+
+#if defined(CONFIG_IMX9_LPSPI1)
+  /* Initialize SPI device */
+
+  g_spi1 = imx9_lpspibus_initialize(1);
+  if (g_spi1 == NULL)
+    {
+      spierr("Failed to initialize SPI1\n");
+      return -ENODEV;
+    }
+
+#ifdef CONFIG_SPI_DRIVER
+  ret = spi_register(g_spi1, 0);
+  if (ret < 0)
+    {
+      spierr("Failed to register /dev/spi0: %d\n", ret);
+    }
+#endif /* CONFIG_SPI_DRIVER */
+
+#endif /* CONFIG_MPFS_SPI0 */
+
+  return OK;
+}
diff --git a/boards/arm/imx9/mr-navq95b/src/mr-navq95b.h 
b/boards/arm/imx9/mr-navq95b/src/mr-navq95b.h
new file mode 100644
index 00000000000..3b2c83631c7
--- /dev/null
+++ b/boards/arm/imx9/mr-navq95b/src/mr-navq95b.h
@@ -0,0 +1,98 @@
+/****************************************************************************
+ * boards/arm/imx9/mr-navq95b/src/mr-navq95b.h
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * SPDX-FileCopyrightText: 2026 NXP
+ *
+ * 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_IMX9_MR_NAVQ95B_SRC_MR_NAVQ95B_H
+#define __BOARDS_ARM_IMX9_MR_NAVQ95B_SRC_MR_NAVQ95B_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdint.h>
+
+/****************************************************************************
+ * Public Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+#ifndef __ASSEMBLY__
+
+/****************************************************************************
+ * Public Functions Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: imx95_bringup
+ *
+ * Description:
+ *   Bring up board features
+ *
+ ****************************************************************************/
+
+#if defined(CONFIG_BOARDCTL) || defined(CONFIG_BOARD_LATE_INITIALIZE)
+int imx95_bringup(void);
+#endif
+
+/****************************************************************************
+ * Name: imx95_pwm_setup
+ *
+ * Description:
+ *   Initialize PWM outputs
+ *
+ ****************************************************************************/
+
+#if defined(CONFIG_PWM)
+int imx95_pwm_setup(void);
+#endif
+
+/****************************************************************************
+ * Name: imx95_i2c_setup
+ *
+ * Description:
+ *   Initialize I2C devices and driver
+ *
+ ****************************************************************************/
+
+#if defined(CONFIG_I2C_DRIVER)
+int imx95_i2c_initialize(void);
+#endif
+
+/****************************************************************************
+ * Name: imx95_spi_setup
+ *
+ * Description:
+ *   Initialize SPI devices and driver
+ *
+ ****************************************************************************/
+
+#if defined(CONFIG_SPI_DRIVER)
+int imx95_spi_initialize(void);
+#endif
+
+#endif /* __ASSEMBLY__ */
+#endif /* __BOARDS_ARM_IMX9_MR_NAVQ95B_SRC_MR_NAVQ95B_H */

Reply via email to