Hi Joseph,

[No need to have such a long CC list. Reducing it]

Thanks for working on this.

On Wed, Jul 15, 2026 at 11:55 PM Joseph Guo <[email protected]> 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]>

I tested this patch:

U-Boot SPL 2026.07-00872-gc20daeac29e7 (Jul 23 2026 - 14:52:43 -0300)
SYS Boot reason: por, origin: -1, errid: -1

I know this is not related to your patch, but please suppress this
origin and errid information. They are just noise.

WDT:   Started watchdog@42490000 with servicing every 1000ms (40s timeout)
Normal Boot
Trying to boot from MMC2
Load image from MMC/SD 0xd5800
NOTICE:  BL31: v2.12.0(release):lf-6.18.2-1.0.0
NOTICE:  BL31: Built : 14:51:35, Jul 23 2026


U-Boot 2026.07-00872-gc20daeac29e7 (Jul 23 2026 - 14:52:43 -0300)

CPU:   NXP i.MX9596 Rev2.0 A55 at 1800 MHz
CPU:   Extended Industrial temperature grade (-40C to 125C)
Model: NXP i.MX95 15X15 FRDM board
DRAM:  Delete node /soc/pcie@4c380000
Delete node /soc/pcie-ep@4c380000
7.8 GiB
ERROR: reserving fdt memory region failed (addr=88000000 size=8000 flags=2): -22
ERROR: reserving fdt memory region failed (addr=88008000 size=8000 flags=2): -22
ERROR: reserving fdt memory region failed (addr=88010000 size=8000 flags=2): -22
ERROR: reserving fdt memory region failed (addr=88018000 size=8000 flags=2): -22
ERROR: reserving fdt memory region failed (addr=88020000 size=100000
flags=2): -22
ERROR: reserving fdt memory region failed (addr=88220000 size=1000 flags=2): -22

This error is unrelated to your patch and others have reported.

Core:  272 devices, 23 uclasses, devicetree: separate
WDT:   Started watchdog@42490000 with servicing every 1000ms (40s timeout)
MMC:   FSL_SDHC: 0, FSL_SDHC: 1, FSL_SDHC: 2
Reading from MMC(1)... Loading Environment from MMC... OK
clk_register: failed to get hsiopll device (parent of hsio_blk_ctl_clk)
PCIe PLL lock timeout
pcie_dw_imx pcie@4c300000: failed to wait pll lock

Please fix this PLL lock error.

In:    serial@44380000
Out:   serial@44380000
Err:   serial@44380000

BuildInfo:
  - ELE firmware version 2.0.2-2a118457

switch to partitions #0, OK
mmc1 is current device
Net:   eth0: enetc-0 [PRIME], eth1: enetc-1
Hit any key to stop autoboot: 0
u-boot=>

> --- /dev/null
> +++ b/arch/arm/dts/imx95-15x15-frdm-u-boot.dtsi
> @@ -0,0 +1,81 @@
> +// 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";
...
> +&pinctrl_reg_usdhc2_vmmc {
> +       bootph-pre-ram;

Please help upstream the alias and bootph-pre-ram properties in the kernel.

> +#if IS_ENABLED(CONFIG_OF_BOARD_FIXUP)
> +int board_fix_fdt(void *fdt)
> +{
> +       /* Remove nodes based on fuses. */
> +       return imx9_uboot_fixup_by_fuse(fdt);

Shouldn't this be done at SoC level instead of per board?

> +++ b/board/nxp/imx95_frdm/imx95_frdm.env
> @@ -0,0 +1,93 @@
> +sec_boot=no

Could you please add i.MX95 Secure Boot via another series?

Has Secure Boot been tested with mainline U-Boot?

If secure boot is not planned to be added for now, please remove sec_boot.

> +imx95_frdm
> +=======================

Please align the underline with the title length; otherwise, building
htmldoc will warn.

This applies globally.

For v4, please make sure it passes CI and share the green CI URL.

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

Please remove this. There is no A0 FRDM board in production, right?

Keep only the B0 instruction.

> +
> +i.MX95 B0 silicon version
> +
> +.. code-block:: bash
> +
> +   $ cp firmware-ele-imx-2.0.2-89161a8/mx95b0-ahab-container.img $(srctree)

> +
> +   $ 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

I had to install 15.2.Rel1 instead. Please update.

> +   $ 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

No need to install the toolchain twice.

> +--------------------------
> +
> +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

Better explain to the users here how to force the SW1 switch to SD card boot.

> +#ifndef __IMX95_EVK_H
> +#define __IMX95_EVK_H

This is not the EVK.

Tested-by: Fabio Estevam <[email protected]>

Reply via email to