From: Peng Fan <peng.fan@oss.nxp.com>
To: alice.guo@oss.nxp.com
Cc: "NXP i.MX U-Boot Team" <uboot-imx@nxp.com>,
u-boot@lists.denx.de, "Stefano Babic" <sbabic@nabladev.com>,
"Fabio Estevam" <festevam@gmail.com>,
"Tom Rini" <trini@konsulko.com>, "Peng Fan" <peng.fan@nxp.com>,
"Ye Li" <ye.li@nxp.com>, "Jindong Yue" <jindong.yue@nxp.com>,
"Jacky Bai" <ping.bai@nxp.com>,
"Marek Vasut" <marek.vasut+renesas@mailbox.org>,
"Rasmus Villemoes" <ravi@prevas.dk>,
"Fedor Ross" <fedor.ross@ifm.com>,
"João Paulo Gonçalves" <joao.goncalves@toradex.com>,
"Patrice Chotard" <patrice.chotard@foss.st.com>,
"Valentin Caron" <valentin.caron@foss.st.com>,
"Vinh Nguyen" <vinh.nguyen.xz@renesas.com>,
"Sam Protsenko" <semen.protsenko@linaro.org>,
"Ranjani Vaidyanathan" <Ranjani.Vaidyanathan@nxp.com>,
"Ji Luo" <ji.luo@nxp.com>, "Frank Li" <Frank.Li@nxp.com>,
"Sumit Garg" <sumit.garg@oss.qualcomm.com>,
"Adam Ford" <aford173@gmail.com>,
"Frieder Schrempf" <frieder.schrempf@kontron.de>,
"David Zang" <davidzangcs@gmail.com>,
"Andrew Goodbody" <andrew.goodbody@linaro.org>,
"Sumit Garg" <sumit.garg@kernel.org>,
"Marek Vasut" <marex@nabladev.com>,
"Joseph Guo" <qijian.guo@nxp.com>,
"Tim Harvey" <tharvey@gateworks.com>,
"Alice Guo" <alice.guo@nxp.com>
Subject: Re: [PATCH v1 12/12] board: nxp: imx952_evk: Add i.MX952 15x15 lpddr4x board support
Date: Fri, 6 Feb 2026 09:24:35 +0800 [thread overview]
Message-ID: <aYVC07WtB/p6zQWI@shlinux89> (raw)
In-Reply-To: <20260205-imx952-v1-12-2103d0222a0b@nxp.com>
On Thu, Feb 05, 2026 at 09:55:18PM +0800, alice.guo@oss.nxp.com wrote:
>From: Peng Fan <peng.fan@nxp.com>
>
>Add support for i.MX952 15x15 lpddr4x board support.
>
>Signed-off-by: Peng Fan <peng.fan@nxp.com>
>Signed-off-by: Ye Li <ye.li@nxp.com>
>Signed-off-by: Alice Guo <alice.guo@nxp.com>
>---
> arch/arm/mach-imx/Makefile | 2 +-
> arch/arm/mach-imx/imx9/Kconfig | 14 ++
> board/nxp/imx952_evk/Kconfig | 12 ++
> board/nxp/imx952_evk/MAINTAINERS | 6 +
> board/nxp/imx952_evk/Makefile | 14 ++
> board/nxp/imx952_evk/imx952_evk.c | 297 ++++++++++++++++++++++++++++++++++++
> board/nxp/imx952_evk/imx952_evk.env | 137 +++++++++++++++++
> board/nxp/imx952_evk/spl.c | 115 ++++++++++++++
> configs/imx952_evk_defconfig | 178 +++++++++++++++++++++
> doc/board/nxp/imx952_evk.rst | 112 ++++++++++++++
> doc/board/nxp/index.rst | 1 +
> include/configs/imx952_evk.h | 31 ++++
> 12 files changed, 918 insertions(+), 1 deletion(-)
>
>diff --git a/arch/arm/mach-imx/Makefile b/arch/arm/mach-imx/Makefile
>index 0f6e737c0b9..bf6820de655 100644
>--- a/arch/arm/mach-imx/Makefile
>+++ b/arch/arm/mach-imx/Makefile
>@@ -223,7 +223,7 @@ endif
>
> ifeq ($(CONFIG_ARCH_IMX9)$(CONFIG_ARCH_IMX8ULP), y)
>
>-ifneq ($(and $(CONFIG_BINMAN),$(or $(CONFIG_IMX95),$(CONFIG_IMX94))),)
>+ifneq ($(and $(CONFIG_BINMAN),$(or $(CONFIG_IMX95),$(CONFIG_IMX94),$(CONFIG_IMX952))),)
> SPL: spl/u-boot-spl.bin FORCE
> $(call if_changed,mkimage)
>
>diff --git a/arch/arm/mach-imx/imx9/Kconfig b/arch/arm/mach-imx/imx9/Kconfig
>index 716940930a6..2ba088c49c5 100644
>--- a/arch/arm/mach-imx/imx9/Kconfig
>+++ b/arch/arm/mach-imx/imx9/Kconfig
>@@ -162,6 +162,19 @@ config TARGET_TORADEX_SMARC_IMX95
> bool "Support Toradex SMARC iMX95"
> select IMX95
>
>+config TARGET_IMX952_EVK
>+ bool "imx952_evk"
>+ select CMD_REMOTEPROC
>+ select IMX_SM_CPU
>+ select IMX_SM_LMM
>+ select IMX952
>+ select REMOTEPROC_IMX
>+ select REGMAP
>+ select SYSCON
Move the remoteproc related to defconfig.
>+ imply BOOTSTD_BOOTCOMMAND
>+ imply BOOTSTD_FULL
>+ imply OF_UPSTREAM
>+
> endchoice
>
> source "board/nxp/imx91_evk/Kconfig"
>@@ -175,5 +188,6 @@ source "board/variscite/imx93_var_som/Kconfig"
> source "board/nxp/imx94_evk/Kconfig"
> source "board/nxp/imx95_evk/Kconfig"
> source "board/toradex/smarc-imx95/Kconfig"
>+source "board/nxp/imx952_evk/Kconfig"
>
> endif
>diff --git a/board/nxp/imx952_evk/Kconfig b/board/nxp/imx952_evk/Kconfig
>new file mode 100644
>index 00000000000..96f01323aca
>--- /dev/null
>+++ b/board/nxp/imx952_evk/Kconfig
>@@ -0,0 +1,12 @@
>+if TARGET_IMX952_EVK
>+
>+config SYS_BOARD
>+ default "imx952_evk"
>+
>+config SYS_VENDOR
>+ default "nxp"
>+
>+config SYS_CONFIG_NAME
>+ default "imx952_evk"
>+
>+endif
>diff --git a/board/nxp/imx952_evk/MAINTAINERS b/board/nxp/imx952_evk/MAINTAINERS
>new file mode 100644
>index 00000000000..cc004f9467e
>--- /dev/null
>+++ b/board/nxp/imx952_evk/MAINTAINERS
>@@ -0,0 +1,6 @@
>+i.MX952 EVK BOARD
>+M: Alice Guo <alice.guo@nxp.com>
>+S: Maintained
>+F: board/nxp/imx952_evk/
>+F: include/configs/imx952_evk.h
>+F: configs/imx952_evk_defconfig
>diff --git a/board/nxp/imx952_evk/Makefile b/board/nxp/imx952_evk/Makefile
>new file mode 100644
>index 00000000000..1581721dc78
>--- /dev/null
>+++ b/board/nxp/imx952_evk/Makefile
>@@ -0,0 +1,14 @@
>+#
>+# Copyright 2025-2026 NXP
>+#
>+# SPDX-License-Identifier: GPL-2.0+
>+#
>+
>+# Add include path for NXP device tree header files from Linux.
>+ccflags-y += -I$(srctree)/dts/upstream/src/arm64/freescale/
>+
>+obj-y += imx952_evk.o
>+
>+ifdef CONFIG_SPL_BUILD
>+obj-y += spl.o
>+endif
>diff --git a/board/nxp/imx952_evk/imx952_evk.c b/board/nxp/imx952_evk/imx952_evk.c
>new file mode 100644
>index 00000000000..8b4b2083a20
>--- /dev/null
>+++ b/board/nxp/imx952_evk/imx952_evk.c
>@@ -0,0 +1,297 @@
>+// SPDX-License-Identifier: GPL-2.0+
>+/*
>+ * Copyright 2025-2026 NXP
>+ */
>+
>+#include <asm/arch/clock.h>
>+#include <asm/arch/sys_proto.h>
>+#include <asm/gpio.h>
>+#include <dm/uclass.h>
>+#include <dm/uclass-internal.h>
>+#include <env.h>
>+#include <fdt_support.h>
>+#include <imx952-power.h>
>+#include <init.h>
>+#include <linux/delay.h>
>+#include <power/regulator.h>
>+#include <scmi_agent.h>
>+#include <usb.h>
sort the headers.
Generic headers
asm/headers
asm/arch/headers
asm/mach/headers
>+
>+#define PD_HSIO_TOP IMX952_PD_HSIO_TOP
>+#define PD_NETC IMX952_PD_NETC
>+#define PD_DISPLAY IMX952_PD_DISPLAY
>+#define PD_CAMERA IMX952_PD_CAMERA
Use tab to align the macros.
>+
>+#if CONFIG_IS_ENABLED(EFI_HAVE_CAPSULE_SUPPORT)
>+#define IMX_BOOT_IMAGE_GUID \
>+ EFI_GUID(0x58a661f3, 0xe7c7, 0x4173, 0x80, 0x21, \
>+ 0xa3, 0x1b, 0x95, 0xc8, 0x6e, 0x9b)
>+
>+struct efi_fw_image fw_images[] = {
>+ {
>+ .image_type_id = IMX_BOOT_IMAGE_GUID,
>+ .fw_name = u"IMX952-EVK-RAW",
>+ .image_index = 1,
>+ },
>+};
>+
>+struct efi_capsule_update_info update_info = {
>+ .dfu_string = "mmc 0=flash-bin raw 0 0x2000 mmcpart 1",
>+ .num_images = ARRAY_SIZE(fw_images),
>+ .images = fw_images,
>+};
>+#endif /* EFI_HAVE_CAPSULE_SUPPORT */
>+
>+int board_early_init_f(void)
>+{
>+ /* UART1: A55, UART2: M33, UART3: M7 */
>+ init_uart_clk(0);
Drop this. no need.
>+
>+ return 0;
>+}
>+
>+#ifdef CONFIG_USB_TCPC
>+struct tcpc_port port;
>+struct tcpc_port_config port_config = {
>+ .i2c_bus = 6, /* i2c7 */
>+ .addr = 0x50,
>+ .port_type = TYPEC_PORT_DRP,
>+ .disable_pd = true,
>+};
>+
>+static int setup_typec(void)
>+{
>+ int ret;
>+
>+ debug("tcpc_init port 1\n");
>+ ret = tcpc_init(&port, port_config, NULL);
>+ if (ret) {
>+ printf("%s: tcpc port init failed, err=%d\n",
>+ __func__, ret);
>+ }
>+
>+ return ret;
>+}
>+#endif
Drop the tcpc part. this is not supported in upstream.
>+
>+static int imx9_scmi_power_domain_enable(u32 domain, bool enable)
>+{
>+ struct udevice *dev;
>+ int ret;
>+
>+ ret = uclass_get_device_by_name(UCLASS_CLK, "protocol@14", &dev);
>+ if (ret)
>+ return ret;
>+
>+ return scmi_pwd_state_set(dev, 0, domain, enable ? 0 : BIT(30));
>+}
>+
>+int board_usb_init(int index, enum usb_init_type init)
>+{
>+ int ret = 0;
>+
>+ if (index == 0 && init == USB_INIT_DEVICE) {
>+ ret = imx9_scmi_power_domain_enable(PD_HSIO_TOP, true);
>+ if (ret) {
>+ printf("SCMI_POWWER_STATE_SET Failed for USB\n");
>+ return ret;
>+ }
>+ } else if (index == 0 && init == USB_INIT_HOST) {
>+ return ret;
>+ }
>+
>+ return 0;
>+}
>+
>+int board_usb_cleanup(int index, enum usb_init_type init)
>+{
>+ int ret = 0;
>+
>+ if (index == 0 && init == USB_INIT_HOST) {
>+#ifdef CONFIG_USB_TCPC
>+ ret = tcpc_disable_src_vbus(&port);
>+#endif
>+ }
>+
>+ return ret;
>+}
Drop the tcpc part. one more question, does the usb host and gadget both
work?
>+
>+static void netc_phy_rst(const char *gpio_name, const char *label)
>+{
>+ int ret;
>+ struct gpio_desc desc;
>+
>+ /* ENET_RST_B */
>+ ret = dm_gpio_lookup_name(gpio_name, &desc);
>+ if (ret) {
>+ printf("%s lookup %s failed ret = %d\n", __func__, gpio_name, ret);
>+ return;
>+ }
>+
>+ ret = dm_gpio_request(&desc, label);
>+ if (ret) {
>+ printf("%s request %s failed ret = %d\n", __func__, label, ret);
>+ return;
>+ }
>+
>+ /* assert the ENET_RST_B */
>+ dm_gpio_set_dir_flags(&desc, GPIOD_IS_OUT | GPIOD_IS_OUT_ACTIVE | GPIOD_ACTIVE_LOW);
>+ udelay(10000);
>+ dm_gpio_set_value(&desc, 0); /* deassert the ENET_RST_B */
>+ udelay(80000);
>+}
>+
>+void netc_init(void)
>+{
>+ int ret;
>+
>+ ret = imx9_scmi_power_domain_enable(PD_NETC, false);
error check is not added.
>+ udelay(10000);
>+
>+ /* Power up the NETC MIX. */
>+ ret = imx9_scmi_power_domain_enable(PD_NETC, true);
An comment is required on why power down , then power up again.
>+ if (ret) {
>+ printf("SCMI_POWWER_STATE_SET Failed for NETC MIX\n");
>+ return;
>+ }
>+
>+ netc_phy_rst("i2c6_io@21_13", "ENET1_RST_B");
This is not good to put here. Could phy rst be done in drivers?
>+
>+ pci_init();
>+}
>+
>+static void pcie_setup(void)
>+{
>+ int ret;
>+ struct udevice *dev;
>+
>+ ret = regulator_get_by_devname("regulator-m2-pwr", &dev);
>+ if (ret) {
>+ printf("Get regulator-m2-pwr regulator failed %d\n", ret);
>+ return;
>+ }
>+
>+ ret = regulator_set_enable_if_allowed(dev, true);
>+ if (ret) {
>+ printf("Enable regulator-m2-pwr regulator %d\n", ret);
>+ return;
>+ }
>+}
>+
>+void lvds_backlight_on(void)
>+{
>+ /* None */
>+}
Drop.
Two much code added from downstream. Please cleanup this patch
to make it as i.MX95/4 EVK board code.
Then add more features step by step.
Regards
Peng
prev parent reply other threads:[~2026-02-06 1:23 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-05 13:55 [PATCH 00/12] imx: add i.MX952 support alice.guo
2026-02-05 13:55 ` [PATCH v1 01/12] imx9: scmi: Get DDR size through SM SCMI API alice.guo
2026-02-06 0:34 ` Peng Fan
2026-02-05 13:55 ` [PATCH v1 02/12] imx95/imx94: Remove board_phys_sdram_size from each board alice.guo
2026-02-06 0:35 ` Peng Fan
2026-02-05 13:55 ` [PATCH v1 03/12] pinctrl: nxp: Add i.MX952 support alice.guo
2026-02-06 0:36 ` Peng Fan
2026-02-05 13:55 ` [PATCH v1 04/12] arm: imx: Add i.MX952 CPU type support alice.guo
2026-02-06 0:37 ` Peng Fan
2026-02-05 13:55 ` [PATCH v1 05/12] imx: ele_ahab: Add i.MX952 support to display_life_cycle() alice.guo
2026-02-06 0:38 ` Peng Fan
2026-02-05 13:55 ` [PATCH v1 06/12] imx: container: Add i.MX952 support to get_imageset_end() alice.guo
2026-02-06 0:40 ` Peng Fan
2026-02-05 13:55 ` [PATCH v1 07/12] arm: imx952: Add watchdog base address definitions alice.guo
2026-02-06 0:41 ` Peng Fan
2026-02-06 3:59 ` Fabio Estevam
2026-02-09 10:24 ` 回复: " Alice Guo (OSS)
2026-02-09 11:21 ` Fabio Estevam
2026-02-05 13:55 ` [PATCH v1 08/12] arm: imx9: Add i.MX952 SoC support alice.guo
2026-02-06 0:45 ` Peng Fan
2026-02-22 1:34 ` David Zang
2026-02-05 13:55 ` [PATCH v1 09/12] cpu: imx952: Add i.MX952 support alice.guo
2026-02-06 0:46 ` Peng Fan
2026-02-05 13:55 ` [PATCH v1 10/12] dts: upstream: arm64: freescale: Sync i.MX952 device tree from Linux alice.guo
2026-02-05 15:38 ` Tom Rini
2026-02-09 10:34 ` 回复: " Alice Guo (OSS)
2026-02-09 14:03 ` Tom Rini
2026-02-05 13:55 ` [PATCH v1 11/12] arm: dts: Add U-Boot device tree for i.MX952 EVK alice.guo
2026-02-06 0:51 ` Peng Fan
2026-02-06 1:27 ` Tom Rini
2026-02-05 13:55 ` [PATCH v1 12/12] board: nxp: imx952_evk: Add i.MX952 15x15 lpddr4x board support alice.guo
2026-02-05 15:45 ` Tom Rini
2026-02-06 1:24 ` Peng Fan [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aYVC07WtB/p6zQWI@shlinux89 \
--to=peng.fan@oss.nxp.com \
--cc=Frank.Li@nxp.com \
--cc=Ranjani.Vaidyanathan@nxp.com \
--cc=aford173@gmail.com \
--cc=alice.guo@nxp.com \
--cc=alice.guo@oss.nxp.com \
--cc=andrew.goodbody@linaro.org \
--cc=davidzangcs@gmail.com \
--cc=fedor.ross@ifm.com \
--cc=festevam@gmail.com \
--cc=frieder.schrempf@kontron.de \
--cc=ji.luo@nxp.com \
--cc=jindong.yue@nxp.com \
--cc=joao.goncalves@toradex.com \
--cc=marek.vasut+renesas@mailbox.org \
--cc=marex@nabladev.com \
--cc=patrice.chotard@foss.st.com \
--cc=peng.fan@nxp.com \
--cc=ping.bai@nxp.com \
--cc=qijian.guo@nxp.com \
--cc=ravi@prevas.dk \
--cc=sbabic@nabladev.com \
--cc=semen.protsenko@linaro.org \
--cc=sumit.garg@kernel.org \
--cc=sumit.garg@oss.qualcomm.com \
--cc=tharvey@gateworks.com \
--cc=trini@konsulko.com \
--cc=u-boot@lists.denx.de \
--cc=uboot-imx@nxp.com \
--cc=valentin.caron@foss.st.com \
--cc=vinh.nguyen.xz@renesas.com \
--cc=ye.li@nxp.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.