> Hi Joseph,
> 
Hi Fabio,

Thanks for your comment.
> [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.
> 

I will add a patch to avoid this.

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

Peng is trying to solve this 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.
> 

The alias only works on u-boot stage. Can you explain why this should be 
upstream to kernel? Thanks.

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

No, whether this config_board_fixup need or not is determined by the board.
Not all board need to enable this config.

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

Will remove it.

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

Ok sure.

> > +
> > +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://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww
> .nxp.com%2Flgfiles%2FNMG%2FMAD%2FYOCTO%2Ffirmware-ele-imx-2.0.2-
> 89161a8.bin&data=05%7C02%7Cqijian.guo%40nxp.com%7C0281e1b4a91d4f1
> 8e01508dee8e65e0a%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7C0%7C
> 639204273289082886%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOn
> RydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyf
> Q%3D%3D%7C0%7C%7C%7C&sdata=VhZccXgvfj%2BfoipCXBb7rVPV5Rylie2fa
> aqXVWaKq3w%3D&reserved=0
> > +   $ 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.
> 

You are right. I will remove A0 support.

> > +
> > +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://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fde
> > + veloper.arm.com%2F-
> %2Fmedia%2FFiles%2Fdownloads%2Fgnu%2F13.3.rel1%2F
> > + binrel%2Farm-gnu-toolchain-13.3.rel1-x86_64-arm-none-eabi.tar.xz&dat
> > +
> a=05%7C02%7Cqijian.guo%40nxp.com%7C0281e1b4a91d4f18e01508dee8e65
> e0a%
> > +
> 7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7C0%7C639204273289103277%
> 7CUn
> > +
> known%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAw
> MCIsIlAi
> > +
> OiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata
> =6ndT
> > +
> 3mwgGURzm3QVf0%2FwJ%2BnSeOZEnDvEP8w0ZhEXGp8%3D&reserved=0
> 
> I had to install 15.2.Rel1 instead. Please update.
> 

Will update
> > +   $ tar xvf arm-gnu-toolchain-13.3.rel1-x86_64-arm-none-eabi.tar.xz
> > +   $ export TOOLS=$PWD
> > +   $ git clone -b master
> https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithu
> b.com%2Fnxp-imx%2Fimx-
> oei.git&data=05%7C02%7Cqijian.guo%40nxp.com%7C0281e1b4a91d4f18e015
> 08dee8e65e0a%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7C0%7C63920
> 4273289113150%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydW
> UsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D
> %3D%7C0%7C%7C%7C&sdata=tgUPAONBWRYl%2Boe29wHBVWIbVnB3EltJR
> 0mo7%2BicmXo%3D&reserved=0
> > +   $ 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://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgit
> > +hub.com%2Fnxp-imx%2Fimx-
> sm&data=05%7C02%7Cqijian.guo%40nxp.com%7C0281
> >
> +e1b4a91d4f18e01508dee8e65e0a%7C686ea1d3bc2b4c6fa92cd99c5c301635%
> 7C0%7
> >
> +C0%7C639204273289122700%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1
> hcGkiOnRyd
> >
> +WUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%
> 3D%
> >
> +3D%7C0%7C%7C%7C&sdata=YVQ7Z6ciAXYh73dApc6fJpdFA0JzII9G6GnNMo
> vAycE%3D&
> > +reserved=0
> > +branch: master
> > +
> > +.. code-block:: bash
> > +
> > +   $ sudo apt -y install make gcc g++-multilib srecord
> > +   $ wget
> https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fdevel
> oper.arm.com%2F-
> %2Fmedia%2FFiles%2Fdownloads%2Fgnu%2F13.3.rel1%2Fbinrel%2Farm-
> gnu-toolchain-13.3.rel1-x86_64-arm-none-
> eabi.tar.xz&data=05%7C02%7Cqijian.guo%40nxp.com%7C0281e1b4a91d4f18
> e01508dee8e65e0a%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7C0%7C6
> 39204273289132068%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnR
> ydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ
> %3D%3D%7C0%7C%7C%7C&sdata=WVIV5nSBx%2FSD0M9HNSkliPjP9DhFzg
> MZxFAQWecFvNw%3D&reserved=0
> > +   $ 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.
> 
Will add it.
> > +#ifndef __IMX95_EVK_H
> > +#define __IMX95_EVK_H
> 
> This is not the EVK.
> 
Will fix it.
> Tested-by: Fabio Estevam <[email protected]>

Reply via email to