On 1/3/25 7:45 AM, Alice Guo wrote:
From: Ye Li <[email protected]>

This patch adds i.MX95 19x19 EVK board basic support.

Signed-off-by: Ye Li <[email protected]>
Signed-off-by: Alice Guo <[email protected]>
Reviewed-by: Peng Fan <[email protected]>


[...]

diff --git a/arch/arm/dts/imx95-19x19-evk-u-boot.dtsi 
b/arch/arm/dts/imx95-19x19-evk-u-boot.dtsi
new file mode 100644
index 
0000000000000000000000000000000000000000..36169b56ef3075a5c243f7fb1afd6399b0df77ad
--- /dev/null
+++ b/arch/arm/dts/imx95-19x19-evk-u-boot.dtsi
@@ -0,0 +1,68 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright 2024 NXP
+ */
+
+#include "imx95-u-boot.dtsi"
+
+&gpio1 {
+       reg = <0 0x47400000 0 0x1000>, <0 0x47400040 0 0x40>;
+};
+
+&lpuart1 {
+       clocks = <&scmi_clk IMX95_CLK_LPUART1>, <&scmi_clk IMX95_CLK_LPUART1>;
+       clock-names = "ipg", "per";
+       bootph-pre-ram;
+};
+
+&pinctrl_uart1 {
+       bootph-pre-ram;
+};
+
+&usdhc1 {
+       bootph-pre-ram;
+};
+
+&pinctrl_usdhc1 {
+       bootph-pre-ram;
+};

Keep this DT sorted alphabetically .

[...]

+++ b/arch/arm/dts/imx95-u-boot.dtsi
@@ -0,0 +1,173 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright 2024 NXP
+ */
+
+/ {
+    binman {
+        multiple-images;

Indent with tabs, consistently.

+        m33-oei-ddrfw {
+            pad-byte = <0x00>;
+            align-size = <0x8>;
+            filename = "m33-oei-ddrfw.bin";
+
+            oei-m33-ddr {
+                align-size = <0x4>;
+                filename = "oei-m33-ddr.bin";
+                type = "blob-ext";
+            };
+
+            imx-lpddr {
+                type = "nxp-header-ddrfw";
+
+                imx-lpddr-imem {
+                    filename = "lpddr5_imem_v202311.bin";
+                    type = "blob-ext";
+                };
+
+                imx-lpddr-dmem {
+                    filename = "lpddr5_dmem_v202311.bin";
+                    type = "blob-ext";
+                };
+            };
+
+            imx-lpddr-qb {
+                type = "nxp-header-ddrfw";
+
+                imx-lpddr-imem-qb {
+                    filename = "lpddr5_imem_qb_v202311.bin";
+                    type = "blob-ext";
+                };
+
+                imx-lpddr-dmem-qb {
+                    filename = "lpddr5_dmem_qb_v202311.bin";
+                    type = "blob-ext";
+                };
+            };
+        };


Can you include a totem-pole illustration of the firmware format in the docs ? Like the one in doc/imx/habv4/guides/mx8m_spl_secure_boot.txt , search for 'Image Vector Table' .

+               imx-boot {
+                       filename = "flash.bin";
+                       pad-byte = <0x00>;
+
+            spl {
+                align = <0x400>;
+                align-size = <0x400>;
+                type = "mkimage";
+                args = "-n spl/u-boot-spl.cfgout -T imx8image";
+            };
+
+            u-boot {
+                type = "mkimage";
+                args = "-n u-boot-container.cfgout -T imx8image";
+            };
+               };

I have a feeling this will have to be restructured to assemble the image correctly .

+       };
+};
+
+&{/soc} {
+       bootph-all;
+       bootph-pre-ram;

Are both bootph-all and bootph-pre-ram needed ?

[...]

diff --git a/arch/arm/mach-imx/imx9/scmi/soc.c 
b/arch/arm/mach-imx/imx9/scmi/soc.c
index 
8a7df24afecc1d6d77b7162be639b56af95fd975..38ade99964b64512ba93423efcaa0cfb58094b00
 100644
--- a/arch/arm/mach-imx/imx9/scmi/soc.c
+++ b/arch/arm/mach-imx/imx9/scmi/soc.c
@@ -43,6 +43,7 @@
  #endif
  #include <spl.h>
  #include <mmc.h>
+#include <asm/arch/mu.h>

Should this change be part of this patch ?

  DECLARE_GLOBAL_DATA_PTR;

[...]

diff --git a/board/freescale/imx95_evk/imx95_19x19_evk.env 
b/board/freescale/imx95_evk/imx95_19x19_evk.env
new file mode 100644
index 
0000000000000000000000000000000000000000..8d2b5dfcf07d251c77440bae44d62bff6253dfc7
--- /dev/null
+++ b/board/freescale/imx95_evk/imx95_19x19_evk.env
@@ -0,0 +1,90 @@
+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
+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 ...;

Why not use bootmethod ?

[...]

diff --git a/board/freescale/imx95_evk/spl.c b/board/freescale/imx95_evk/spl.c
new file mode 100644
index 
0000000000000000000000000000000000000000..54f56c8049876fde335485a5c3bd54dff6e4f730
--- /dev/null
+++ b/board/freescale/imx95_evk/spl.c
@@ -0,0 +1,96 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright 2024 NXP
+ */
+
+#include <command.h>
+#include <cpu_func.h>
+#include <clk.h>
+#include <hang.h>
+#include <image.h>
+#include <init.h>
+#include <log.h>
+#include <spl.h>
+#include <asm/global_data.h>
+#include <asm/io.h>
+#include <asm/arch/clock.h>
+#include <asm/arch/sys_proto.h>
+#include <asm/mach-imx/boot_mode.h>
+#include <asm/mach-imx/syscounter.h>
+#include <asm/mach-imx/ele_api.h>
+#include <asm/sections.h>

Are all these headers really needed ?

Remove the unneeded ones .

+#include <dm/uclass.h>
+#include <dm/device.h>
+#include <dm/uclass-internal.h>
+#include <dm/device-internal.h>
+#include <linux/delay.h>
+#include <linux/iopoll.h>
+#include <asm/arch/clock.h>
+#include <asm/arch/ccm_regs.h>
+#ifdef CONFIG_SCMI_FIRMWARE
+#include <scmi_agent.h>
+#include <scmi_protocols.h>
+#include "../../../dts/upstream/src/arm64/freescale/imx95-clock.h"
+#include "../../../dts/upstream/src/arm64/freescale/imx95-power.h"
+#endif
+#include <asm/arch/mu.h>
+
+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)
+{
+       puts("Normal Boot\n");
+}
+
+void board_init_f(ulong dummy)
+{
+       int ret;
+
+       /* Clear the BSS. */
+       memset(__bss_start, 0, __bss_end - __bss_start);

Is memset this necessary ? I don't think it is.

[...]

diff --git a/doc/board/nxp/imx95_evk.rst b/doc/board/nxp/imx95_evk.rst
new file mode 100644
index 
0000000000000000000000000000000000000000..132c45ed485148366533ee31485a4d5a41556eb0
--- /dev/null
+++ b/doc/board/nxp/imx95_evk.rst
@@ -0,0 +1,116 @@
+.. SPDX-License-Identifier: GPL-2.0+
+
+imx95_evk
+=======================
+
+U-Boot for the NXP i.MX95 19x19 EVK 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-1.3.0-17945fc.bin
+   $ chmod +x firmware-ele-imx-1.3.0-17945fc.bin
+   $ ./firmware-ele-imx-1.3.0-17945fc.bin

It is possible to somehow only download and extract the file, without running script that was downloaded from the internet, without any validation ?

[...]

+++ b/include/configs/imx95_evk.h
@@ -0,0 +1,30 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * Copyright 2024 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_UBOOT_BASE     \
+       (QSPI0_AMBA_BASE + CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR * 512)
+
+#define CFG_SYS_INIT_RAM_ADDR        0x90000000
+#define CFG_SYS_INIT_RAM_SIZE        0x200000
+
+#define CFG_SYS_SDRAM_BASE           0x90000000
+#define PHYS_SDRAM                      0x90000000
+/* Totally 16GB */
+#define PHYS_SDRAM_SIZE                        0x70000000 /* 2GB  - 256MB DDR 
*/
+#define PHYS_SDRAM_2_SIZE              0x380000000 /* 14GB */
+
+#define CFG_SYS_FSL_USDHC_NUM  2

Is this still needed ?

+/* Using ULP WDOG for reset */
+#define WDOG_BASE_ADDR          WDG3_BASE_ADDR
Is this still needed ? DM WDT should be able to look up the address from DT .

Reply via email to