public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
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

      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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox