On Wed, Feb 04, 2026 at 04:47:13PM +0900, Joseph Guo wrote:
>Add boot support and peripherals like eMMC/SD, UART, I2C, GPIO, ENETC0/1
>and PCIE0/1 for iMX95 15x15 FRDM.
>Updated doc for build instructions.
>
>Signed-off-by: Lei Xu <[email protected]>
>Signed-off-by: Joseph Guo <[email protected]>
>---
> arch/arm/dts/imx95-15x15-frdm-u-boot.dtsi |  85 ++++++++++++++++++
> arch/arm/mach-imx/imx9/Kconfig            |   8 ++
> board/nxp/imx95_frdm/Kconfig              |  12 +++
> board/nxp/imx95_frdm/MAINTAINERS          |   6 ++
> board/nxp/imx95_frdm/Makefile             |  11 +++
> board/nxp/imx95_frdm/imx95_frdm.c         |  31 +++++++
> board/nxp/imx95_frdm/imx95_frdm.env       |  91 +++++++++++++++++++
> board/nxp/imx95_frdm/spl.c                |  79 +++++++++++++++++
> configs/imx95_15x15_frdm_defconfig        | 143 ++++++++++++++++++++++++++++++
> doc/board/nxp/imx95_frdm.rst              | 131 +++++++++++++++++++++++++++
> doc/board/nxp/index.rst                   |   1 +
> include/configs/imx95_frdm.h              |  25 ++++++
> 12 files changed, 623 insertions(+)
>
>diff --git a/arch/arm/dts/imx95-15x15-frdm-u-boot.dtsi 
>b/arch/arm/dts/imx95-15x15-frdm-u-boot.dtsi
>new file mode 100644
>index 
>0000000000000000000000000000000000000000..651352e0883a6a5213b4173e321448edef97fca9
>--- /dev/null
>+++ b/arch/arm/dts/imx95-15x15-frdm-u-boot.dtsi
>@@ -0,0 +1,85 @@
>+// SPDX-License-Identifier: GPL-2.0+
>+/*
>+ * Copyright 2026 NXP
>+ */
>+
>+#include "imx95-u-boot.dtsi"
>+
>+/ {
>+      aliases {
>+              pci0 = &netc_bus0;
>+              pci1 = &netc_bus1;
>+      };
>+};
>+
>+&{/binman/m33-oei-ddrfw/imx-lpddr/imx-lpddr-imem} {
>+      filename = "lpddr4x_imem_v202409.bin";
>+};
>+
>+&{/binman/m33-oei-ddrfw/imx-lpddr/imx-lpddr-dmem} {
>+      filename = "lpddr4x_dmem_v202409.bin";
>+};
>+
>+&{/binman/m33-oei-ddrfw/imx-lpddr-qb/imx-lpddr-imem-qb} {
>+      filename = "lpddr4x_imem_qb_v202409.bin";
>+};
>+
>+&{/binman/m33-oei-ddrfw/imx-lpddr-qb/imx-lpddr-dmem-qb} {
>+      filename = "lpddr4x_dmem_qb_v202409.bin";
>+};
>+
>+&lpuart1 {
>+      bootph-pre-ram;
>+};
>+
>+&reg_usdhc2_vmmc {
>+      bootph-pre-ram;
>+};
>+
>+&usdhc1 {
>+      bootph-pre-ram;
>+};
>+
>+&usdhc2 {
>+      bootph-pre-ram;
>+};
>+
>+&wdog3 {
>+      status = "disabled";
>+};
>+
>+&pinctrl_uart1 {
>+      bootph-pre-ram;
>+};
>+
>+&pinctrl_usdhc1 {
>+      bootph-pre-ram;
>+};
>+
>+&pinctrl_usdhc1_100mhz {
>+      bootph-pre-ram;
>+};
>+
>+&pinctrl_usdhc1_200mhz {
>+      bootph-pre-ram;
>+};
>+
>+&pinctrl_usdhc2 {
>+      bootph-pre-ram;
>+};
>+
>+&pinctrl_usdhc2_100mhz {
>+      bootph-pre-ram;
>+};
>+
>+&pinctrl_usdhc2_200mhz {
>+      bootph-pre-ram;
>+};
>+
>+&pinctrl_usdhc2_gpio {
>+      bootph-pre-ram;
>+};
>+
>+&pinctrl_reg_usdhc2_vmmc {
>+      bootph-pre-ram;
>+};
>diff --git a/arch/arm/mach-imx/imx9/Kconfig b/arch/arm/mach-imx/imx9/Kconfig
>index 
>d9f97e4328c956554c777eebdf64e7024128dd42..bf8608fd838a41c9e235aa44e8c08a4cf7f2c45d
> 100644
>--- a/arch/arm/mach-imx/imx9/Kconfig
>+++ b/arch/arm/mach-imx/imx9/Kconfig
>@@ -142,6 +142,13 @@ config TARGET_IMX95_15X15_EVK
>       imply BOOTSTD_FULL
>       imply OF_UPSTREAM
> 
>+config TARGET_IMX95_15X15_FRDM
>+      bool "imx95_frdm"
>+      select IMX95
>+      imply BOOTSTD_FULL
>+      imply BOOTSTD_BOOTCOMMAND
>+      imply OF_UPSTREAM
>+
> config TARGET_IMX943_EVK
>       bool "imx943_evk"
>       select IMX94
>@@ -165,6 +172,7 @@ source "board/phytec/phycore_imx93/Kconfig"
> source "board/variscite/imx93_var_som/Kconfig"
> source "board/nxp/imx94_evk/Kconfig"
> source "board/nxp/imx95_evk/Kconfig"
>+source "board/nxp/imx95_frdm/Kconfig"
> source "board/toradex/smarc-imx95/Kconfig"
> 
> endif
>diff --git a/board/nxp/imx95_frdm/Kconfig b/board/nxp/imx95_frdm/Kconfig
>new file mode 100644
>index 
>0000000000000000000000000000000000000000..0da9a56adadec661792c38b1258e4eb914af5aa5
>--- /dev/null
>+++ b/board/nxp/imx95_frdm/Kconfig
>@@ -0,0 +1,12 @@
>+if TARGET_IMX95_15X15_FRDM
>+
>+config SYS_BOARD
>+      default "imx95_frdm"
>+
>+config SYS_VENDOR
>+      default "nxp"
>+
>+config SYS_CONFIG_NAME
>+      default "imx95_frdm"
>+
>+endif
>diff --git a/board/nxp/imx95_frdm/MAINTAINERS 
>b/board/nxp/imx95_frdm/MAINTAINERS
>new file mode 100644
>index 
>0000000000000000000000000000000000000000..33870f054e7452ed3af36f19236163d451c93665
>--- /dev/null
>+++ b/board/nxp/imx95_frdm/MAINTAINERS
>@@ -0,0 +1,6 @@
>+i.MX95 FRDM BOARD
>+M:    Joseph Guo <[email protected]>
>+S:    Maintained
>+F:    board/nxp/imx95_frdm/
>+F:    include/configs/imx95_frdm.h
>+F:    configs/imx95_15x15_frdm_defconfig
>diff --git a/board/nxp/imx95_frdm/Makefile b/board/nxp/imx95_frdm/Makefile
>new file mode 100644
>index 
>0000000000000000000000000000000000000000..6965c61a281d44950d2619d3bfebceab39351c4d
>--- /dev/null
>+++ b/board/nxp/imx95_frdm/Makefile
>@@ -0,0 +1,11 @@
>+#
>+# Copyright 2026 NXP
>+#
>+# SPDX-License-Identifier:      GPL-2.0+
>+#
>+
>+obj-y += imx95_frdm.o
>+
>+ifdef CONFIG_SPL_BUILD
>+obj-y += spl.o
>+endif
>diff --git a/board/nxp/imx95_frdm/imx95_frdm.c 
>b/board/nxp/imx95_frdm/imx95_frdm.c
>new file mode 100644
>index 
>0000000000000000000000000000000000000000..fe0111be5081dc1c0e60c9a195fbbf0d3f39321b
>--- /dev/null
>+++ b/board/nxp/imx95_frdm/imx95_frdm.c
>@@ -0,0 +1,31 @@
>+// SPDX-License-Identifier: GPL-2.0+
>+/*
>+ * Copyright 2025 NXP
>+ */
>+
>+#include <asm/arch/clock.h>
>+#include <asm/gpio.h>
>+#include <asm/mach-imx/sys_proto.h>

I prefer order:

generic headers
linux/generic headers
asm/headers
asm/arch/headers
asm/mach-x/headers

>+
>+int board_early_init_f(void)
>+{
>+      /* UART1: A55, UART2: M33, UART3: M7 */
>+      init_uart_clk(0);
>+
>+      return 0;
>+}
>+
>+int board_late_init(void)
>+{
>+      if (IS_ENABLED(CONFIG_ENV_IS_IN_MMC))
>+              board_late_mmc_env_init();
>+
>+      return 0;
>+}
>+
>+int board_phys_sdram_size(phys_size_t *size)
>+{
>+      *size = PHYS_SDRAM_SIZE + PHYS_SDRAM_2_SIZE;
>+
>+      return 0;
>+}
>diff --git a/board/nxp/imx95_frdm/imx95_frdm.env 
>b/board/nxp/imx95_frdm/imx95_frdm.env
>new file mode 100644
>index 
>0000000000000000000000000000000000000000..a7309d734b0d3b98b2dd405a975610c24f7f6a32
>--- /dev/null
>+++ b/board/nxp/imx95_frdm/imx95_frdm.env
>@@ -0,0 +1,91 @@
>+sec_boot=no
>+initrd_addr=0x93800000
>+emmc_dev=0
>+sd_dev=1
>+scriptaddr=0x93500000
>+kernel_addr_r=CONFIG_SYS_LOAD_ADDR
>+image=Image
>+splashimage=0xA0000000
>+console=ttyLP0,115200 earlycon
>+fdt_addr_r=0x93000000
>+fdt_addr=0x93000000
>+cntr_addr=0xA8000000
>+cntr_file=os_cntr_signed.bin
>+boot_fit=no
>+fdtfile=CONFIG_DEFAULT_FDT_FILE
>+bootm_size=0x10000000
>+mmcdev=CONFIG_ENV_MMC_DEVICE_INDEX
>+mmcautodetect=yes
>+mmcargs=setenv bootargs console=${console} root=${mmcroot}
>+loadbootscript=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${script};
>+bootscript=echo Running bootscript from mmc ...; source
>+loadimage=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}
>+loadfdt=fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr_r} ${fdtfile}
>+loadcntr=fatload mmc ${mmcdev}:${mmcpart} ${cntr_addr} ${cntr_file}
>+auth_os=auth_cntr ${cntr_addr}
>+boot_os=booti ${loadaddr} - ${fdt_addr_r};
>+mmcboot=echo Booting from mmc ...;
>+              run mmcargs;
>+              if test ${sec_boot} = yes; then
>+                      if run auth_os; then
>+                              run boot_os;
>+                      else
>+                              echo ERR: failed to authenticate;
>+                      fi;
>+              else
>+                      if test ${boot_fit} = yes || test ${boot_fit} = try; 
>then
>+                              bootm ${loadaddr};
>+                      else
>+                              if run loadfdt; then
>+                                      run boot_os;
>+                              else
>+                                      echo WARN: Cannot load the DT;
>+                              fi;
>+                      fi;
>+              fi;
>+netargs=setenv bootargs console=${console} root=/dev/nfs
>+              ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp
>+netboot=echo Booting from net ...;
>+              run netargs;
>+              if test ${ip_dyn} = yes; then
>+                      setenv get_cmd dhcp;
>+              else
>+                      setenv get_cmd tftp;
>+              fi;
>+              if test ${sec_boot} = yes; then
>+                      ${get_cmd} ${cntr_addr} ${cntr_file};
>+                      if run auth_os; then
>+                              run boot_os;
>+                      else
>+                              echo ERR: failed to authenticate;
>+                      fi;
>+              else
>+                      ${get_cmd} ${loadaddr} ${image};
>+                      if test ${boot_fit} = yes || test ${boot_fit} = try; 
>then
>+                              bootm ${loadaddr};
>+                      else
>+                              if ${get_cmd} ${fdt_addr_r} ${fdtfile}; then
>+                                      run boot_os;
>+                              else
>+                                      echo WARN: Cannot load the DT;
>+                              fi;
>+                      fi;
>+              fi;
>+bsp_bootcmd=echo Running BSP bootcmd ...;
>+                      mmc dev ${mmcdev}; if mmc rescan; then
>+                      if run loadbootscript; then
>+                              run bootscript;
>+                      else
>+                              if test ${sec_boot} = yes; then
>+                                      if run loadcntr; then
>+                                              run mmcboot;
>+                                      else run netboot;
>+                                      fi;
>+                              else
>+                                      if run loadimage; then
>+                                              run mmcboot;
>+                                      else run netboot;
>+                                      fi;
>+                              fi;
>+                      fi;
>+              fi;
>diff --git a/board/nxp/imx95_frdm/spl.c b/board/nxp/imx95_frdm/spl.c
>new file mode 100644
>index 
>0000000000000000000000000000000000000000..97e5549c337e66de22a5fc5627185dbe7f9286fd
>--- /dev/null
>+++ b/board/nxp/imx95_frdm/spl.c
>@@ -0,0 +1,79 @@
>+// SPDX-License-Identifier: GPL-2.0+
>+/*
>+ * Copyright 2026 NXP
>+ */
>+
>+#include <asm/arch/clock.h>
>+#include <asm/arch/mu.h>
>+#include <asm/arch/sys_proto.h>
>+#include <asm/mach-imx/boot_mode.h>
>+#include <asm/mach-imx/ele_api.h>
>+#include <asm/sections.h>
>+#include <hang.h>
>+#include <init.h>
>+#include <spl.h>

Sort header.

>+
>+DECLARE_GLOBAL_DATA_PTR;
>+
>+int spl_board_boot_device(enum boot_device boot_dev_spl)
>+{
>+      switch (boot_dev_spl) {
>+      case SD1_BOOT:
>+      case MMC1_BOOT:
>+              return BOOT_DEVICE_MMC1;
>+      case SD2_BOOT:
>+      case MMC2_BOOT:
>+              return BOOT_DEVICE_MMC2;
>+      case USB_BOOT:
>+              return BOOT_DEVICE_BOARD;
>+      default:
>+              return BOOT_DEVICE_NONE;
>+      }
>+}
>+
>+void spl_board_init(void)
>+{
>+      int ret;
>+
>+      puts("Normal Boot\n");
>+
>+      ret = ele_start_rng();
>+      if (ret)
>+              printf("Fail to start RNG: %d\n", ret);
>+}
>+
>+void board_init_f(ulong dummy)
>+{
>+      int ret;
>+
>+      /* Clear the BSS. */
>+      memset(__bss_start, 0, __bss_end - __bss_start);
>+
>+#ifdef CONFIG_SPL_RECOVER_DATA_SECTION
>+      if (IS_ENABLED(CONFIG_SPL_BUILD))
>+              spl_save_restore_data();
>+#endif
>+
>+      timer_init();
>+
>+      /* Need dm_init() to run before any SCMI calls can be made. */
>+      spl_early_init();
>+
>+      /* Need enable SCMI drivers and ELE driver before enabling console */
>+      ret = imx9_probe_mu();
>+      if (ret)
>+              hang(); /* if MU not probed, nothing can output, just hang here 
>*/
>+
>+      arch_cpu_init();
>+
>+      board_early_init_f();
>+
>+      preloader_console_init();
>+
>+      debug("SOC: 0x%x\n", gd->arch.soc_rev);
>+      debug("LC: 0x%x\n", gd->arch.lifecycle);
>+
>+      get_reset_reason(true, false);
>+
>+      board_init_r(NULL, 0);
>+}
>diff --git a/configs/imx95_15x15_frdm_defconfig 
>b/configs/imx95_15x15_frdm_defconfig
>new file mode 100644
>index 
>0000000000000000000000000000000000000000..c3d9819bde454f35216eee189afd86ad3ea7e5b1
>--- /dev/null
>+++ b/configs/imx95_15x15_frdm_defconfig
>@@ -0,0 +1,143 @@
>+CONFIG_ARM=y
>+CONFIG_ARCH_IMX9=y
>+CONFIG_TEXT_BASE=0x90200000
>+CONFIG_SYS_MALLOC_LEN=0x2000000
>+CONFIG_SYS_MALLOC_F_LEN=0x10000
>+CONFIG_SPL_GPIO=y
>+CONFIG_SPL_LIBCOMMON_SUPPORT=y
>+CONFIG_SPL_LIBGENERIC_SUPPORT=y
>+CONFIG_ENV_SOURCE_FILE="imx95_frdm"
>+CONFIG_NR_DRAM_BANKS=3
>+CONFIG_SF_DEFAULT_SPEED=40000000
>+CONFIG_ENV_SIZE=0x4000
>+CONFIG_ENV_OFFSET=0x700000
>+CONFIG_IMX_CONFIG="arch/arm/mach-imx/imx9/scmi/imximage.cfg"
>+CONFIG_DM_GPIO=y
>+CONFIG_DEFAULT_DEVICE_TREE="freescale/imx95-15x15-frdm"
>+CONFIG_TARGET_IMX95_15X15_FRDM=y
>+CONFIG_OF_LIBFDT_OVERLAY=y
>+CONFIG_SYS_MONITOR_LEN=524288
>+CONFIG_SPL_MMC=y
>+CONFIG_SPL_SERIAL=y
>+CONFIG_SPL_DRIVERS_MISC=y
>+CONFIG_SPL_TEXT_BASE=0x20480000
>+CONFIG_SPL_HAS_BSS_LINKER_SECTION=y
>+CONFIG_SPL_BSS_START_ADDR=0x204d6000
>+CONFIG_SPL_BSS_MAX_SIZE=0x2000
>+CONFIG_SYS_LOAD_ADDR=0x90400000
>+CONFIG_SPL=y
>+CONFIG_SPL_RECOVER_DATA_SECTION=y
>+CONFIG_PCI=y
>+CONFIG_SYS_MEMTEST_START=0x90000000
>+CONFIG_SYS_MEMTEST_END=0xA0000000
>+CONFIG_REMAKE_ELF=y
>+CONFIG_FIT=y
>+CONFIG_FIT_VERBOSE=y
>+CONFIG_OF_SYSTEM_SETUP=y
>+CONFIG_BOOTCOMMAND="bootflow scan -l; run bsp_bootcmd"
>+CONFIG_DEFAULT_FDT_FILE="imx95-15x15-frdm.dtb"
>+CONFIG_SYS_CBSIZE=2048
>+CONFIG_SYS_PBSIZE=2074
>+CONFIG_BOARD_EARLY_INIT_F=y
>+# CONFIG_BOARD_INIT is not set
>+CONFIG_BOARD_LATE_INIT=y
>+CONFIG_PCI_INIT_R=y
>+CONFIG_SPL_MAX_SIZE=0x20000
>+CONFIG_SPL_BOARD_INIT=y
>+CONFIG_SPL_LOAD_IMX_CONTAINER=y
>+CONFIG_IMX_CONTAINER_CFG="arch/arm/mach-imx/imx9/scmi/container.cfg"
>+# CONFIG_SPL_SHARES_INIT_SP_ADDR is not set
>+CONFIG_SPL_SYS_MALLOC=y
>+CONFIG_SPL_HAS_CUSTOM_MALLOC_START=y
>+CONFIG_SPL_CUSTOM_SYS_MALLOC_ADDR=0x93200000
>+CONFIG_SPL_SYS_MALLOC_SIZE=0x80000
>+CONFIG_SPL_SYS_MMCSD_RAW_MODE=y
>+CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR=0x1040
>+CONFIG_SPL_I2C=y
>+CONFIG_SPL_DM_MAILBOX=y
>+CONFIG_SPL_POWER=y
>+CONFIG_SPL_WATCHDOG=y
>+CONFIG_SYS_PROMPT="u-boot=> "
>+CONFIG_CMD_ERASEENV=y
>+CONFIG_CMD_NVEDIT_EFI=y
>+CONFIG_CRC32_VERIFY=y
>+CONFIG_CMD_MEMTEST=y
>+CONFIG_CMD_CLK=y
>+CONFIG_CMD_DFU=y
>+CONFIG_CMD_FUSE=y
>+CONFIG_CMD_GPIO=y
>+CONFIG_CMD_GPT=y
>+CONFIG_CMD_I2C=y
>+CONFIG_CMD_MMC=y
>+CONFIG_CMD_PCI=y
>+CONFIG_CMD_POWEROFF=y
>+CONFIG_CMD_SNTP=y
>+CONFIG_CMD_CACHE=y
>+CONFIG_CMD_EFIDEBUG=y
>+CONFIG_CMD_RTC=y
>+CONFIG_CMD_TIME=y
>+CONFIG_CMD_GETTIME=y
>+CONFIG_CMD_TIMER=y
>+CONFIG_CMD_REGULATOR=y
>+CONFIG_CMD_HASH=y
>+CONFIG_CMD_EXT4_WRITE=y
>+CONFIG_OF_CONTROL=y
>+CONFIG_SPL_OF_CONTROL=y
>+CONFIG_ENV_OVERWRITE=y
>+CONFIG_ENV_IS_NOWHERE=y
>+CONFIG_ENV_IS_IN_MMC=y
>+CONFIG_ENV_RELOC_GD_ENV_ADDR=y
>+CONFIG_ENV_MMC_DEVICE_INDEX=1
>+CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y
>+CONFIG_USE_ETHPRIME=y
>+CONFIG_ETHPRIME="eth0"
>+CONFIG_NET_RANDOM_ETHADDR=y
>+CONFIG_SYS_RX_ETH_BUFFER=8
>+CONFIG_SPL_DM=y
>+CONFIG_SPL_OF_TRANSLATE=y
>+CONFIG_SPL_CLK=y
>+CONFIG_SPL_CLK_CCF=y
>+CONFIG_CLK_SCMI=y
>+CONFIG_SPL_CLK_SCMI=y
>+CONFIG_CLK_IMX95_BLKCTRL=y
>+CONFIG_DFU_MMC=y
>+CONFIG_DFU_RAM=y
>+CONFIG_SPL_FIRMWARE=y
>+# CONFIG_SCMI_AGENT_SMCCC is not set
>+CONFIG_IMX_RGPIO2P=y
>+CONFIG_DM_PCA953X=y
>+CONFIG_ADP5585_GPIO=y
>+CONFIG_DM_I2C=y
>+CONFIG_SYS_I2C_IMX_LPI2C=y
>+CONFIG_IMX_MU_MBOX=y
>+CONFIG_SUPPORT_EMMC_BOOT=y
>+CONFIG_MMC_IO_VOLTAGE=y
>+CONFIG_MMC_UHS_SUPPORT=y
>+CONFIG_MMC_HS400_ES_SUPPORT=y
>+CONFIG_MMC_HS400_SUPPORT=y
>+CONFIG_FSL_USDHC=y
>+CONFIG_MTD=y
>+CONFIG_PHYLIB=y
>+CONFIG_PHY_AQUANTIA=y
>+CONFIG_PHY_MOTORCOMM=y
>+CONFIG_DM_MDIO=y
>+CONFIG_MII=y
>+CONFIG_FSL_ENETC=y
>+CONFIG_PCIE_ECAM_GENERIC=y
>+CONFIG_PCIE_DW_IMX=y
>+CONFIG_PHY=y
>+CONFIG_PINCTRL=y
>+CONFIG_SPL_PINCTRL=y
>+CONFIG_PINCTRL_IMX_SCMI=y
>+CONFIG_POWER_DOMAIN=y
>+CONFIG_SCMI_POWER_DOMAIN=y
>+CONFIG_SPL_DM_REGULATOR=y
>+CONFIG_DM_REGULATOR_FIXED=y
>+CONFIG_SPL_DM_REGULATOR_FIXED=y
>+CONFIG_DM_REGULATOR_GPIO=y
>+CONFIG_DM_RTC=y
>+CONFIG_DM_SERIAL=y
>+CONFIG_FSL_LPUART=y
>+CONFIG_ULP_WATCHDOG=y
>+CONFIG_LZO=y
>+CONFIG_BZIP2=y
>diff --git a/doc/board/nxp/imx95_frdm.rst b/doc/board/nxp/imx95_frdm.rst
>new file mode 100644
>index 
>0000000000000000000000000000000000000000..85ef9022e76fc0d8f2a5524128309939f22f4715
>--- /dev/null
>+++ b/doc/board/nxp/imx95_frdm.rst
>@@ -0,0 +1,131 @@
>+.. SPDX-License-Identifier: GPL-2.0+
>+
>+imx95_frdm
>+=======================
>+
>+U-Boot for the NXP i.MX95 15x15 FRDM board
>+
>+Quick Start
>+-----------
>+
>+- Get ahab-container.img
>+- Get DDR PHY Firmware Images
>+- Get and Build OEI Images
>+- Get and Build System Manager Image
>+- Get and Build the ARM Trusted Firmware
>+- Build the Bootloader Image
>+- Boot
>+
>+Get ahab-container.img
>+--------------------------------------
>+
>+Note: srctree is U-Boot source directory
>+
>+.. code-block:: bash
>+
>+   $ wget 
>https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/firmware-ele-imx-2.0.2-89161a8.bin
>+   $ sh firmware-ele-imx-2.0.2-89161a8.bin --auto-accept
>+
>+i.MX95 A0 silicon version
>+
>+.. code-block:: bash
>+
>+   $ cp firmware-ele-imx-2.0.2-89161a8/mx95a0-ahab-container.img $(srctree)
>+
>+i.MX95 B0 silicon version
>+
>+.. code-block:: bash
>+
>+   $ cp firmware-ele-imx-2.0.2-89161a8/mx95b0-ahab-container.img $(srctree)
>+
>+Get DDR PHY Firmware Images
>+--------------------------------------
>+
>+Note: srctree is U-Boot source directory
>+
>+.. code-block:: bash
>+
>+   $ wget 
>https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/firmware-imx-8.28-994fa14.bin
>+   $ sh firmware-imx-8.28-994fa14.bin --auto-accept
>+   $ cp firmware-imx-8.28-994fa14/firmware/ddr/synopsys/lpddr5*v202409.bin 
>$(srctree)
>+   $ cp firmware-imx-8.28-994fa14/firmware/ddr/synopsys/lpddr4x*v202409.bin 
>$(srctree)
>+
>+Get and Build OEI Images
>+--------------------------------------
>+
>+Note: srctree is U-Boot source directory
>+Get OEI from: https://github.com/nxp-imx/imx-oei
>+branch: master
>+
>+.. code-block:: bash
>+
>+   $ sudo apt -y install make gcc g++-multilib srecord
>+   $ wget 
>https://developer.arm.com/-/media/Files/downloads/gnu/13.3.rel1/binrel/arm-gnu-toolchain-13.3.rel1-x86_64-arm-none-eabi.tar.xz
>+   $ tar xvf arm-gnu-toolchain-13.3.rel1-x86_64-arm-none-eabi.tar.xz
>+   $ export TOOLS=$PWD
>+   $ git clone -b master https://github.com/nxp-imx/imx-oei.git
>+   $ cd imx-oei
>+
>+i.MX95 B0 silicon version on 15x15 LPDDR4X FRDM Board
>+
>+.. code-block:: bash
>+
>+   $ make board=mx95lp4x-15 oei=ddr DEBUG=1 r=B0 all
>+   $ cp build/mx95lp4x-15/ddr/oei-m33-ddr.bin $(srctree)
>+
>+Get and Build System Manager Image
>+--------------------------------------
>+
>+Note: srctree is U-Boot source directory
>+Get System Manager from: https://github.com/nxp-imx/imx-sm
>+branch: master
>+
>+.. code-block:: bash
>+
>+   $ sudo apt -y install make gcc g++-multilib srecord
>+   $ wget 
>https://developer.arm.com/-/media/Files/downloads/gnu/13.3.rel1/binrel/arm-gnu-toolchain-13.3.rel1-x86_64-arm-none-eabi.tar.xz
>+   $ tar xvf arm-gnu-toolchain-13.3.rel1-x86_64-arm-none-eabi.tar.xz
>+   $ export TOOLS=$PWD
>+   $ git clone -b master https://github.com/nxp-imx/imx-sm.git
>+   $ cd imx-sm
>+   $ make config=mx95evk all
>+   $ cp build/mx95evk/m33_image.bin $(srctree)
>+
>+Get and Build the ARM Trusted Firmware
>+--------------------------------------
>+
>+Note: srctree is U-Boot source directory
>+Get ATF from: https://github.com/nxp-imx/imx-atf/
>+branch: lf_v2.12
>+
>+.. code-block:: bash
>+
>+   $ export CROSS_COMPILE=aarch64-poky-linux-
>+   $ unset LDFLAGS
>+   $ unset AS
>+   $ git clone -b lf_v2.12 https://github.com/nxp-imx/imx-atf.git
>+   $ cd imx-atf
>+   $ make PLAT=imx95 bl31
>+   $ cp build/imx95/release/bl31.bin $(srctree)
>+
>+Build the Bootloader Image
>+--------------------------
>+
>+i.MX95 B0 silicon version on 15x15 LPDDR4X FRDM Board
>+
>+.. code-block:: bash
>+
>+   $ export CROSS_COMPILE=aarch64-poky-linux-
>+   $ make imx95_15x15_frdm_defconfig
>+   $ make
>+
>+Copy imx-boot-imx95.bin to the MicroSD card:
>+
>+.. code-block:: bash
>+
>+   $ sudo dd if=flash.bin of=/dev/sd[x] bs=1k seek=32 conv=fsync
>+
>+Boot
>+----
>+
>+Set i.MX95 boot device to MicroSD card
>diff --git a/doc/board/nxp/index.rst b/doc/board/nxp/index.rst
>index 
>01d3468a47da8ddd25cf45b52920a35e4e131c48..c7d5bf36f1145186d8bfc77939fdd7d77e5d0953
> 100644
>--- a/doc/board/nxp/index.rst
>+++ b/doc/board/nxp/index.rst
>@@ -17,6 +17,7 @@ NXP Semiconductors
>    imx93_9x9_qsb
>    imx93_11x11_evk
>    imx93_frdm
>+   imx95_frdm
>    imx943_evk
>    imx95_evk
>    imxrt1020-evk
>diff --git a/include/configs/imx95_frdm.h b/include/configs/imx95_frdm.h
>new file mode 100644
>index 
>0000000000000000000000000000000000000000..815b6c4fa66982688825ff20de07c7fe525dc99a
>--- /dev/null
>+++ b/include/configs/imx95_frdm.h
>@@ -0,0 +1,25 @@
>+/* SPDX-License-Identifier: GPL-2.0+ */
>+/*
>+ * Copyright 2026 NXP
>+ */
>+
>+#ifndef __IMX95_EVK_H
>+#define __IMX95_EVK_H
>+
>+#include <linux/sizes.h>
>+#include <linux/stringify.h>
>+#include <asm/arch/imx-regs.h>
>+
>+#define CFG_SYS_INIT_RAM_ADDR 0x90000000
>+#define CFG_SYS_INIT_RAM_SIZE 0x200000
>+
>+#define CFG_SYS_SDRAM_BASE            0x90000000
>+#define PHYS_SDRAM                            0x90000000
>+
>+#define PHYS_SDRAM_SIZE                       0x70000000 /* 2GB - 256MB DDR */
>+
>+#define PHYS_SDRAM_2_SIZE             0x180000000 /* 6GB (Totally 8GB) */
>+
>+#define WDOG_BASE_ADDR                        WDG3_BASE_ADDR

Align the macros, some used more tabs.

Regards
Peng

>+
>+#endif
>
>-- 
>2.34.1
>

Reply via email to