public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* Re: [PATCH 4/4] imx9: Kconfig: Enable remoteproc for i.MX95 EVK
  2026-01-29 10:25 ` [PATCH 4/4] imx9: Kconfig: Enable remoteproc for i.MX95 EVK Peng Fan (OSS)
@ 2026-01-29 10:01   ` Francesco Dolcini
  2026-01-30  2:06     ` Peng Fan
  0 siblings, 1 reply; 11+ messages in thread
From: Francesco Dolcini @ 2026-01-29 10:01 UTC (permalink / raw)
  To: Peng Fan (OSS)
  Cc: NXP i.MX U-Boot Team, u-boot, Stefano Babic, Fabio Estevam, Ye Li,
	Alice Guo, Peng Fan

Hello Peng,

On Thu, Jan 29, 2026 at 06:25:00PM +0800, Peng Fan (OSS) wrote:
> From: Peng Fan <peng.fan@nxp.com>
> 
> Select remoteproc related configs for i.MX95 EVK to support manage CM7
> using 'rproc' cmd with steps as below:
> 
> load mmc 1:2 ${loadaddr} imx95-15x15-evk_m7_TCM_rpmsg_lite_str_echo_rtos.elf
> rproc load 0 ${loadaddr} ${filesize}
> rproc start 0
> 
> Signed-off-by: Peng Fan <peng.fan@nxp.com>
> ---
>  arch/arm/mach-imx/imx9/Kconfig | 12 ++++++++++++
>  1 file changed, 12 insertions(+)
> 
> diff --git a/arch/arm/mach-imx/imx9/Kconfig b/arch/arm/mach-imx/imx9/Kconfig
> index d9f97e4328c..7051e086072 100644
> --- a/arch/arm/mach-imx/imx9/Kconfig
> +++ b/arch/arm/mach-imx/imx9/Kconfig
> @@ -134,6 +134,12 @@ config TARGET_IMX95_19X19_EVK
>  	imply BOOTSTD_BOOTCOMMAND
>  	imply BOOTSTD_FULL
>  	imply OF_UPSTREAM
> +	select CMD_REMOTEPROC
> +	select REMOTEPROC_IMX
> +	select REGMAP
> +	select SYSCON
> +	select IMX_SM_LMM
> +	select IMX_SM_CPU

Why doing this with a select in the Kconfig?

I would expect either
 - you enable what you need in the defconfig
 - you add the select to the imx95 soc

Francesco


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH 3/4] arm: dts: imx95: Add cm7 node
  2026-01-29 10:24 ` [PATCH 3/4] arm: dts: imx95: Add cm7 node Peng Fan (OSS)
@ 2026-01-29 10:08   ` Fabio Estevam
  2026-01-30  2:00     ` Peng Fan
  0 siblings, 1 reply; 11+ messages in thread
From: Fabio Estevam @ 2026-01-29 10:08 UTC (permalink / raw)
  To: Peng Fan (OSS)
  Cc: NXP i.MX U-Boot Team, u-boot, Stefano Babic, Ye Li, Alice Guo,
	Peng Fan

Hi Peng,

On Thu, Jan 29, 2026 at 6:10 AM Peng Fan (OSS) <peng.fan@oss.nxp.com> wrote:
>
> From: Peng Fan <peng.fan@nxp.com>
>
> Add i.MX95 CM7 node for remoteproc usage.

Please explain in the commit message why this is being added to
u-boot.dtsi for now.

Also, as part of this series, please add a new patch that adds an
i.MX95 entry to doc/board/nxp/rproc.rst.

Thanks

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH 0/4] remoteproc: support i.MX95
@ 2026-01-29 10:24 Peng Fan (OSS)
  2026-01-29 10:24 ` [PATCH 1/4] remoteproc: imx: Support ECC initialization Peng Fan (OSS)
                   ` (3 more replies)
  0 siblings, 4 replies; 11+ messages in thread
From: Peng Fan (OSS) @ 2026-01-29 10:24 UTC (permalink / raw)
  To: NXP i.MX U-Boot Team, u-boot, Stefano Babic, Fabio Estevam
  Cc: Ye Li, Alice Guo, Peng Fan

Support i.MX95 remoteproc. i.MX95 use SCMI Vendor protocol to manage
remote cores.

There are three cases for M7:
(1) M7 in a separate Logical Machine(LM) that Linux couldn't control it.
(2) M7 in a separate Logical Machine that Linux could control it using
    LMM protocol
(3) M7 runs in same Logical Machine as A55, so Linux could control it
    using CPU protocol

And because needs to do ECC initialization, patch 1 introduces a new
flag ATT_ECC to indicate whether the area needs to be cleared for ECC
initialization

In patch 2:
The current setup only targets for (2) and (3) to let U-Boot start
CM7. Need to extend the driver to using LMM and CPU protocol to manage the M7
core.
 - Compare linux LM ID(got using scmi_imx_lmm_info) and M7 LM ID(the ID
   is fixed as 1 in SM firmware if M7 is in a separate LM),
   if Linux LM ID is not same as M7 LM ID(linux and M7 in same LM), use
   LMM protocol to start/stop. Whether using CPU or LMM protocol to start/stop,
   the M7 status detection could use CPU protocol to detect started or not. So
   in imx_rproc_is_running, use scmi_imx_cpu_started to check the
   status of M7.
 - For above case (2), Use scmi_imx_lmm_power_boot to detect whether
   the M7 LM is under control of A55 LM.
 - For above case , after using SCMI_IMX_LMM_POWER_ON to check
   permission, scmi_imx_lmm_shutdown API should be called to shutdown
   the M7 LM.

patch 3 and 4 is for enabling remoteproc for i.MX95 EVK. The compatible
string is in linux-next tree, after it was added to linux upstream
imx95.dtsi, we could remove the changes in patch 3 in future.

CI build pass.

Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
Peng Fan (4):
      remoteproc: imx: Support ECC initialization
      remoteproc: imx: Add i.MX95 support
      arm: dts: imx95: Add cm7 node
      imx9: Kconfig: Enable remoteproc for i.MX95 EVK

 arch/arm/dts/imx95-u-boot.dtsi |   4 +
 arch/arm/mach-imx/imx9/Kconfig |  12 +++
 drivers/remoteproc/imx_rproc.c | 189 +++++++++++++++++++++++++++++++++++++++--
 drivers/remoteproc/imx_rproc.h |   3 +
 4 files changed, 203 insertions(+), 5 deletions(-)
---
base-commit: 6a1bdb7e952d5841f42742fefa907cae5dc8d50a
change-id: 20260129-imx95-rproc-b1b65c8b54cb

Best regards,
-- 
Peng Fan <peng.fan@nxp.com>


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH 1/4] remoteproc: imx: Support ECC initialization
  2026-01-29 10:24 [PATCH 0/4] remoteproc: support i.MX95 Peng Fan (OSS)
@ 2026-01-29 10:24 ` Peng Fan (OSS)
  2026-01-29 10:24 ` [PATCH 2/4] remoteproc: imx: Add i.MX95 support Peng Fan (OSS)
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 11+ messages in thread
From: Peng Fan (OSS) @ 2026-01-29 10:24 UTC (permalink / raw)
  To: NXP i.MX U-Boot Team, u-boot, Stefano Babic, Fabio Estevam
  Cc: Ye Li, Alice Guo, Peng Fan

From: Peng Fan <peng.fan@nxp.com>

Add a new flag ATT_ECC which indicates the memory region needs ECC
initialization. If the flag is set, clearing the whole memory region to
initialize ECC. If ECC is not initialized, remote core will crash if
directly access the area.

Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
 drivers/remoteproc/imx_rproc.c | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/drivers/remoteproc/imx_rproc.c b/drivers/remoteproc/imx_rproc.c
index 9bb55327998..9eecbe70f0b 100644
--- a/drivers/remoteproc/imx_rproc.c
+++ b/drivers/remoteproc/imx_rproc.c
@@ -46,6 +46,7 @@ struct imx_rproc {
 /* M4 own area. Can be mapped at probe */
 #define ATT_OWN         BIT(31)
 #define ATT_IOMEM       BIT(30)
+#define ATT_ECC         BIT(29)
 
 static int imx_rproc_arm_smc_start(struct udevice *dev)
 {
@@ -202,6 +203,26 @@ static void *imx_rproc_device_to_virt(struct udevice *dev, ulong da, ulong size,
 
 static int imx_rproc_load(struct udevice *dev, ulong addr, ulong size)
 {
+	struct imx_rproc *priv = dev_get_priv(dev);
+	const struct imx_rproc_dcfg *dcfg = priv->dcfg;
+	int i;
+
+	/*
+	 * Before loading elf, need do ECC initialization by clearing the memory
+	 * region, if ATT_ECC is set.
+	 */
+	for (i = 0; i < dcfg->att_size; i++) {
+		const struct imx_rproc_att *att = &dcfg->att[i];
+
+		if (!(att->flags & ATT_ECC))
+			continue;
+
+		if (att->flags & ATT_IOMEM)
+			memset_io((void __iomem *)(long)att->sa, 0, att->size);
+		else
+			memset((void *)(long)att->sa, 0, att->size);
+	}
+
 	return rproc_elf_load_image(dev, addr, size);
 }
 

-- 
2.51.0


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH 2/4] remoteproc: imx: Add i.MX95 support
  2026-01-29 10:24 [PATCH 0/4] remoteproc: support i.MX95 Peng Fan (OSS)
  2026-01-29 10:24 ` [PATCH 1/4] remoteproc: imx: Support ECC initialization Peng Fan (OSS)
@ 2026-01-29 10:24 ` Peng Fan (OSS)
  2026-01-29 10:24 ` [PATCH 3/4] arm: dts: imx95: Add cm7 node Peng Fan (OSS)
  2026-01-29 10:25 ` [PATCH 4/4] imx9: Kconfig: Enable remoteproc for i.MX95 EVK Peng Fan (OSS)
  3 siblings, 0 replies; 11+ messages in thread
From: Peng Fan (OSS) @ 2026-01-29 10:24 UTC (permalink / raw)
  To: NXP i.MX U-Boot Team, u-boot, Stefano Babic, Fabio Estevam
  Cc: Ye Li, Alice Guo, Peng Fan

From: Peng Fan <peng.fan@nxp.com>

i.MX95 uses System Manager(sm) API to start/stop logical machine or cpu.
There are two modes:
 M7 in a dedicated logical machine, use LMM API
 M7 and A55 in same logical machine, use CPU API

Extend the driver to using LMM and CPU protocol to manage the M7 core:
 - Detect using LMM or CPU API in probe using API scmi_imx_lmm_info().
 - Compare linux LM ID(got using scmi_imx_lmm_info) and M7 LM ID(the ID
   is fixed as 1 in SM firmware if M7 is in a separate LM),
   if Linux LM ID is not same as M7 LM ID(linux and M7 in same LM), use
   LMM protocol to start/stop. Whether using CPU or LMM protocol to
   start/stop, the M7 status detection could use CPU protocol to detect
   started or not. So in imx_rproc_is_running, use scmi_imx_cpu_started to
   check the status of M7.
 - For above case (2), Use scmi_imx_lmm_power_boot to detect whether
   the M7 LM is under control of A55 LM.
 - For above case , after using SCMI_IMX_LMM_POWER_ON to check
   permission, scmi_imx_lmm_shutdown API should be called to shutdown
   the M7 LM.
 - Add a new ops imx_rproc_ops_sm.

Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
 drivers/remoteproc/imx_rproc.c | 168 +++++++++++++++++++++++++++++++++++++++--
 drivers/remoteproc/imx_rproc.h |   3 +
 2 files changed, 166 insertions(+), 5 deletions(-)

diff --git a/drivers/remoteproc/imx_rproc.c b/drivers/remoteproc/imx_rproc.c
index 9eecbe70f0b..3f8cea127ec 100644
--- a/drivers/remoteproc/imx_rproc.c
+++ b/drivers/remoteproc/imx_rproc.c
@@ -11,6 +11,7 @@
 #include <linux/types.h>
 #include <regmap.h>
 #include <remoteproc.h>
+#include <scmi_nxp_protocols.h>
 #include <syscon.h>
 
 #include "imx_rproc.h"
@@ -37,9 +38,25 @@
 #define IMX_SIP_RPROC_STARTED		0x01
 #define IMX_SIP_RPROC_STOP		0x02
 
+/* Must align with System Manager Firmware */
+#define IMX95_M7_CPUID			1
+#define IMX95_M7_LMID			1
+
+/* Logical Machine API Operation */
+#define IMX_RPROC_FLAGS_SM_LMM_OP	BIT(0)
+/* CPU API Operation */
+#define IMX_RPROC_FLAGS_SM_CPU_OP	BIT(1)
+/* Linux has permission to handle the Logical Machine of remote cores */
+#define IMX_RPROC_FLAGS_SM_LMM_AVAIL	BIT(2)
+
 struct imx_rproc {
 	const struct imx_rproc_dcfg	*dcfg;
 	struct regmap *regmap;
+	u32				flags;
+	/* For System Manager based system */
+	struct udevice			*lmm_dev;
+	struct udevice			*cpu_dev;
+	ulong				reset_vector;
 };
 
 /* att flags: lower 16 bits specifying core, higher 16 bits for flags  */
@@ -65,6 +82,41 @@ static int imx_rproc_mmio_start(struct udevice *dev)
 	return regmap_update_bits(priv->regmap, dcfg->src_reg, dcfg->src_mask, dcfg->src_start);
 }
 
+static int imx_rproc_sm_start(struct udevice *dev)
+{
+	struct imx_rproc *priv = dev_get_priv(dev);
+	const struct imx_rproc_dcfg *dcfg = priv->dcfg;
+	int ret;
+
+	if (priv->flags & IMX_RPROC_FLAGS_SM_CPU_OP) {
+		ret = scmi_imx_cpu_reset_vector_set(priv->cpu_dev, dcfg->cpuid, 0,
+						    priv->reset_vector, true, false, false);
+		if (ret) {
+			dev_err(dev, "Failed to set reset vector cpuid(%u): %d\n",
+				dcfg->cpuid, ret);
+			return ret;
+		}
+
+		return scmi_imx_cpu_start(priv->cpu_dev, dcfg->cpuid, true);
+	}
+
+	ret = scmi_imx_lmm_reset_vector_set(priv->lmm_dev, dcfg->lmid, dcfg->cpuid, 0,
+					    priv->reset_vector);
+	if (ret) {
+		dev_err(dev, "Failed to set reset vector lmid(%u), cpuid(%u): %d\n",
+			dcfg->lmid, dcfg->cpuid, ret);
+		return ret;
+	}
+
+	ret = scmi_imx_lmm_power_boot(priv->lmm_dev, dcfg->lmid, true);
+	if (ret) {
+		dev_err(dev, "Failed to boot lmm(%d): %d\n", ret, dcfg->lmid);
+		return ret;
+	}
+
+	return 0;
+}
+
 static int imx_rproc_start(struct udevice *dev)
 {
 	struct imx_rproc *priv = dev_get_priv(dev);
@@ -100,6 +152,17 @@ static int imx_rproc_mmio_stop(struct udevice *dev)
 	return regmap_update_bits(priv->regmap, dcfg->src_reg, dcfg->src_mask, dcfg->src_stop);
 }
 
+static int imx_rproc_sm_stop(struct udevice *dev)
+{
+	struct imx_rproc *priv = dev_get_priv(dev);
+	const struct imx_rproc_dcfg *dcfg = priv->dcfg;
+
+	if (priv->flags & IMX_RPROC_FLAGS_SM_CPU_OP)
+		return scmi_imx_cpu_start(priv->cpu_dev, dcfg->cpuid, false);
+
+	return scmi_imx_lmm_shutdown(priv->lmm_dev, dcfg->lmid, 0);
+}
+
 static int imx_rproc_stop(struct udevice *dev)
 {
 	struct imx_rproc *priv = dev_get_priv(dev);
@@ -146,6 +209,20 @@ static int imx_rproc_mmio_is_running(struct udevice *dev)
 	return 1;
 }
 
+static int imx_rproc_sm_is_running(struct udevice *dev)
+{
+	struct imx_rproc *priv = dev_get_priv(dev);
+	const struct imx_rproc_dcfg *dcfg = priv->dcfg;
+	int ret;
+	bool started = false;
+
+	ret = scmi_imx_cpu_started(priv->cpu_dev, dcfg->cpuid, &started);
+	if (ret || !started)
+		return 1;
+
+	return 0;
+}
+
 static int imx_rproc_is_running(struct udevice *dev)
 {
 	struct imx_rproc *priv = dev_get_priv(dev);
@@ -207,6 +284,14 @@ static int imx_rproc_load(struct udevice *dev, ulong addr, ulong size)
 	const struct imx_rproc_dcfg *dcfg = priv->dcfg;
 	int i;
 
+	if (IS_ENABLED(CONFIG_IMX_SM_LMM)) {
+		if (!(priv->flags & (IMX_RPROC_FLAGS_SM_LMM_AVAIL | IMX_RPROC_FLAGS_SM_CPU_OP)))
+			return -EACCES;
+	}
+
+	/* Only used for SM based System */
+	priv->reset_vector = rproc_elf_get_boot_addr(dev, addr) & GENMASK(31, 16);
+
 	/*
 	 * Before loading elf, need do ECC initialization by clearing the memory
 	 * region, if ATT_ECC is set.
@@ -239,19 +324,65 @@ static int imx_rproc_probe(struct udevice *dev)
 {
 	struct imx_rproc *priv = dev_get_priv(dev);
 	struct imx_rproc_dcfg *dcfg = (struct imx_rproc_dcfg *)dev_get_driver_data(dev);
+	struct scmi_imx_lmm_info info;
 	ofnode node;
+	int ret;
 
 	node = dev_ofnode(dev);
 
 	priv->dcfg = dcfg;
 
-	if (dcfg->method != IMX_RPROC_MMIO)
+	if (dcfg->method == IMX_RPROC_MMIO) {
+		priv->regmap = syscon_regmap_lookup_by_phandle(dev, "syscon");
+		if (IS_ERR(priv->regmap)) {
+			dev_err(dev, "No syscon: %ld\n", PTR_ERR(priv->regmap));
+			return PTR_ERR(priv->regmap);
+		}
 		return 0;
+	} else {
+		if (IS_ENABLED(CONFIG_IMX_SM_LMM)) {
+			struct udevice *lmm_dev;
+
+			ret = uclass_get_device_by_name(UCLASS_SCMI_BASE, "protocol@80", &lmm_dev);
+			if (ret) {
+				dev_err(dev, "Failed to get SM LMM protocol dev\n");
+				return ret;
+			}
+
+			priv->lmm_dev = lmm_dev;
+
+			ret = scmi_imx_lmm_info(lmm_dev, LMM_ID_DISCOVER, &info);
+			if (ret) {
+				dev_err(dev, "Failed to get lmm info\n");
+				return ret;
+			}
+
+			if (dcfg->lmid != info.lmid) {
+				ret = scmi_imx_lmm_power_boot(lmm_dev, dcfg->lmid, false);
+				if (ret == -EACCES) {
+					dev_err(dev, "Remoteproc not under U-boot control: only support detect running\n");
+				} else if (ret) {
+					dev_err(dev, "power on lmm fail:%d\n", ret);
+					return ret;
+				} else {
+					priv->flags |= IMX_RPROC_FLAGS_SM_LMM_AVAIL;
+				}
+			} else {
+				priv->flags |= IMX_RPROC_FLAGS_SM_CPU_OP;
+			}
+		}
+
+		if (IS_ENABLED(CONFIG_IMX_SM_CPU)) {
+			struct udevice *cpu_dev;
 
-	priv->regmap = syscon_regmap_lookup_by_phandle(dev, "syscon");
-	if (IS_ERR(priv->regmap)) {
-		dev_err(dev, "No syscon: %ld\n", PTR_ERR(priv->regmap));
-		return PTR_ERR(priv->regmap);
+			ret = uclass_get_device_by_name(UCLASS_SCMI_BASE, "protocol@82", &cpu_dev);
+			if (ret) {
+				dev_err(dev, "Failed to get SM LMM protocol dev\n");
+				return ret;
+			}
+
+			priv->cpu_dev = cpu_dev;
+		}
 	}
 
 	return 0;
@@ -372,12 +503,39 @@ static const struct imx_rproc_dcfg imx_rproc_cfg_imx93 = {
 	.ops		= &imx_rproc_ops_arm_smc,
 };
 
+static const struct imx_rproc_att imx_rproc_att_imx95_m7[] = {
+	/* dev addr , sys addr  , size	    , flags */
+	/* TCM CODE NON-SECURE */
+	{ 0x00000000, 0x203C0000, 0x00040000, ATT_OWN | ATT_IOMEM | ATT_ECC },
+
+	/* TCM SYS NON-SECURE*/
+	{ 0x20000000, 0x20400000, 0x00040000, ATT_OWN | ATT_IOMEM | ATT_ECC },
+
+	/* DDR */
+	{ 0x80000000, 0x80000000, 0x50000000, 0 },
+};
+
+static const struct imx_rproc_plat_ops imx_rproc_ops_sm = {
+	.start		= imx_rproc_sm_start,
+	.stop		= imx_rproc_sm_stop,
+	.is_running	= imx_rproc_sm_is_running,
+};
+
+static const struct imx_rproc_dcfg imx_rproc_cfg_imx95_m7 = {
+	.att		= imx_rproc_att_imx95_m7,
+	.att_size	= ARRAY_SIZE(imx_rproc_att_imx95_m7),
+	.ops		= &imx_rproc_ops_sm,
+	.cpuid		= IMX95_M7_CPUID,
+	.lmid		= IMX95_M7_LMID,
+};
+
 static const struct udevice_id imx_rproc_ids[] = {
 	{ .compatible = "fsl,imx8mm-cm4", .data = (ulong)&imx_rproc_cfg_imx8mq },
 	{ .compatible = "fsl,imx8mn-cm7", .data = (ulong)&imx_rproc_cfg_imx8mn, },
 	{ .compatible = "fsl,imx8mp-cm7", .data = (ulong)&imx_rproc_cfg_imx8mn, },
 	{ .compatible = "fsl,imx8mq-cm4", .data = (ulong)&imx_rproc_cfg_imx8mq },
 	{ .compatible = "fsl,imx93-cm33", .data = (ulong)&imx_rproc_cfg_imx93 },
+	{ .compatible = "fsl,imx95-cm7", .data = (ulong)&imx_rproc_cfg_imx95_m7 },
 	{}
 };
 
diff --git a/drivers/remoteproc/imx_rproc.h b/drivers/remoteproc/imx_rproc.h
index 7a82dc4a195..1629bc7f6e7 100644
--- a/drivers/remoteproc/imx_rproc.h
+++ b/drivers/remoteproc/imx_rproc.h
@@ -51,6 +51,9 @@ struct imx_rproc_dcfg {
 	enum imx_rproc_method		method;
 	u32				flags;
 	const struct imx_rproc_plat_ops	*ops;
+	/* For System Manager(SM) based SoCs, the IDs are from SM firmware */
+	u32				cpuid;
+	u32				lmid;
 };
 
 #endif /* _IMX_RPROC_H */

-- 
2.51.0


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH 3/4] arm: dts: imx95: Add cm7 node
  2026-01-29 10:24 [PATCH 0/4] remoteproc: support i.MX95 Peng Fan (OSS)
  2026-01-29 10:24 ` [PATCH 1/4] remoteproc: imx: Support ECC initialization Peng Fan (OSS)
  2026-01-29 10:24 ` [PATCH 2/4] remoteproc: imx: Add i.MX95 support Peng Fan (OSS)
@ 2026-01-29 10:24 ` Peng Fan (OSS)
  2026-01-29 10:08   ` Fabio Estevam
  2026-01-29 10:25 ` [PATCH 4/4] imx9: Kconfig: Enable remoteproc for i.MX95 EVK Peng Fan (OSS)
  3 siblings, 1 reply; 11+ messages in thread
From: Peng Fan (OSS) @ 2026-01-29 10:24 UTC (permalink / raw)
  To: NXP i.MX U-Boot Team, u-boot, Stefano Babic, Fabio Estevam
  Cc: Ye Li, Alice Guo, Peng Fan

From: Peng Fan <peng.fan@nxp.com>

Add i.MX95 CM7 node for remoteproc usage.

Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
 arch/arm/dts/imx95-u-boot.dtsi | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/arch/arm/dts/imx95-u-boot.dtsi b/arch/arm/dts/imx95-u-boot.dtsi
index 591cb317508..6dec159752b 100644
--- a/arch/arm/dts/imx95-u-boot.dtsi
+++ b/arch/arm/dts/imx95-u-boot.dtsi
@@ -96,6 +96,10 @@
 			};
 		};
 	};
+
+	imx95-cm7 {
+		compatible = "fsl,imx95-cm7";
+	};
 };
 
 &A55_0 {

-- 
2.51.0


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH 4/4] imx9: Kconfig: Enable remoteproc for i.MX95 EVK
  2026-01-29 10:24 [PATCH 0/4] remoteproc: support i.MX95 Peng Fan (OSS)
                   ` (2 preceding siblings ...)
  2026-01-29 10:24 ` [PATCH 3/4] arm: dts: imx95: Add cm7 node Peng Fan (OSS)
@ 2026-01-29 10:25 ` Peng Fan (OSS)
  2026-01-29 10:01   ` Francesco Dolcini
  3 siblings, 1 reply; 11+ messages in thread
From: Peng Fan (OSS) @ 2026-01-29 10:25 UTC (permalink / raw)
  To: NXP i.MX U-Boot Team, u-boot, Stefano Babic, Fabio Estevam
  Cc: Ye Li, Alice Guo, Peng Fan

From: Peng Fan <peng.fan@nxp.com>

Select remoteproc related configs for i.MX95 EVK to support manage CM7
using 'rproc' cmd with steps as below:

load mmc 1:2 ${loadaddr} imx95-15x15-evk_m7_TCM_rpmsg_lite_str_echo_rtos.elf
rproc load 0 ${loadaddr} ${filesize}
rproc start 0

Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
 arch/arm/mach-imx/imx9/Kconfig | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/arch/arm/mach-imx/imx9/Kconfig b/arch/arm/mach-imx/imx9/Kconfig
index d9f97e4328c..7051e086072 100644
--- a/arch/arm/mach-imx/imx9/Kconfig
+++ b/arch/arm/mach-imx/imx9/Kconfig
@@ -134,6 +134,12 @@ config TARGET_IMX95_19X19_EVK
 	imply BOOTSTD_BOOTCOMMAND
 	imply BOOTSTD_FULL
 	imply OF_UPSTREAM
+	select CMD_REMOTEPROC
+	select REMOTEPROC_IMX
+	select REGMAP
+	select SYSCON
+	select IMX_SM_LMM
+	select IMX_SM_CPU
 
 config TARGET_IMX95_15X15_EVK
 	bool "imx95_15x15_evk"
@@ -141,6 +147,12 @@ config TARGET_IMX95_15X15_EVK
 	imply BOOTSTD_BOOTCOMMAND
 	imply BOOTSTD_FULL
 	imply OF_UPSTREAM
+	select CMD_REMOTEPROC
+	select REMOTEPROC_IMX
+	select REGMAP
+	select SYSCON
+	select IMX_SM_LMM
+	select IMX_SM_CPU
 
 config TARGET_IMX943_EVK
 	bool "imx943_evk"

-- 
2.51.0


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* RE: [PATCH 3/4] arm: dts: imx95: Add cm7 node
  2026-01-29 10:08   ` Fabio Estevam
@ 2026-01-30  2:00     ` Peng Fan
  0 siblings, 0 replies; 11+ messages in thread
From: Peng Fan @ 2026-01-30  2:00 UTC (permalink / raw)
  To: Fabio Estevam, Peng Fan (OSS)
  Cc: dl-uboot-imx, u-boot@lists.denx.de, Stefano Babic, Ye Li,
	Alice Guo

Hi Fabio,

> Subject: Re: [PATCH 3/4] arm: dts: imx95: Add cm7 node
> 
> Hi Peng,
> 
> On Thu, Jan 29, 2026 at 6:10 AM Peng Fan (OSS)
> <peng.fan@oss.nxp.com> wrote:
> >
> > From: Peng Fan <peng.fan@nxp.com>
> >
> > Add i.MX95 CM7 node for remoteproc usage.
> 
> Please explain in the commit message why this is being added to u-
> boot.dtsi for now.

I need to upstream this to linux, indeed.
Same as i.MX8M series, but I have not put efforts to do that.

After 6.20 merge window close, I will prepare to add the CM[X]
nodes in upstream linux.

Adding here in U-Boot dtsi is just to let driver probe. It should
be removed after linux upstream dts has this node.

> 
> Also, as part of this series, please add a new patch that adds an
> i.MX95 entry to doc/board/nxp/rproc.rst.

Thanks for reminding, I missed to add this. V2 will include the doc
update.

Thanks,
Peng.

> 
> Thanks

^ permalink raw reply	[flat|nested] 11+ messages in thread

* RE: [PATCH 4/4] imx9: Kconfig: Enable remoteproc for i.MX95 EVK
  2026-01-29 10:01   ` Francesco Dolcini
@ 2026-01-30  2:06     ` Peng Fan
  2026-01-31  7:26       ` Francesco Dolcini
  2026-01-31 12:37       ` Fabio Estevam
  0 siblings, 2 replies; 11+ messages in thread
From: Peng Fan @ 2026-01-30  2:06 UTC (permalink / raw)
  To: Francesco Dolcini, Peng Fan (OSS)
  Cc: dl-uboot-imx, u-boot@lists.denx.de, Stefano Babic, Fabio Estevam,
	Ye Li, Alice Guo

Hi Francesco,

> Subject: Re: [PATCH 4/4] imx9: Kconfig: Enable remoteproc for i.MX95
...
> >
> > diff --git a/arch/arm/mach-imx/imx9/Kconfig
> > b/arch/arm/mach-imx/imx9/Kconfig index
> d9f97e4328c..7051e086072 100644
> > --- a/arch/arm/mach-imx/imx9/Kconfig
> > +++ b/arch/arm/mach-imx/imx9/Kconfig
> > @@ -134,6 +134,12 @@ config TARGET_IMX95_19X19_EVK
> >  	imply BOOTSTD_BOOTCOMMAND
> >  	imply BOOTSTD_FULL
> >  	imply OF_UPSTREAM
> > +	select CMD_REMOTEPROC
> > +	select REMOTEPROC_IMX
> > +	select REGMAP
> > +	select SYSCON
> > +	select IMX_SM_LMM
> > +	select IMX_SM_CPU
> 
> Why doing this with a select in the Kconfig?
> 
> I would expect either
>  - you enable what you need in the defconfig
>  - you add the select to the imx95 soc

There are many defconfigs in NXP downstream for
a single board:
$ls -l configs/imx95_19x19_* | wc -l
21
I would not changes so many defconfigs.

I understand there is only 1 defconfig for this
board in upstream, but to ease NXP upgrading U-Boot
to new version, I choose to change Kconfig.

Changing to upstream defconfig in upstream is fine
for now.

Fabio,

What's your opinion here?

Thanks,
Peng. 

> 
> Francesco


^ permalink raw reply	[flat|nested] 11+ messages in thread

* RE: [PATCH 4/4] imx9: Kconfig: Enable remoteproc for i.MX95 EVK
  2026-01-30  2:06     ` Peng Fan
@ 2026-01-31  7:26       ` Francesco Dolcini
  2026-01-31 12:37       ` Fabio Estevam
  1 sibling, 0 replies; 11+ messages in thread
From: Francesco Dolcini @ 2026-01-31  7:26 UTC (permalink / raw)
  To: Peng Fan, Peng Fan (OSS)
  Cc: dl-uboot-imx, u-boot@lists.denx.de, Stefano Babic, Fabio Estevam,
	Ye Li, Alice Guo

Hi Peng

On January 30, 2026 3:06:04 AM GMT+01:00, Peng Fan <peng.fan@nxp.com> wrote:
>Hi Francesco,
>
>> Subject: Re: [PATCH 4/4] imx9: Kconfig: Enable remoteproc for i.MX95
>...
>> >
>> > diff --git a/arch/arm/mach-imx/imx9/Kconfig
>> > b/arch/arm/mach-imx/imx9/Kconfig index
>> d9f97e4328c..7051e086072 100644
>> > --- a/arch/arm/mach-imx/imx9/Kconfig
>> > +++ b/arch/arm/mach-imx/imx9/Kconfig
>> > @@ -134,6 +134,12 @@ config TARGET_IMX95_19X19_EVK
>> >  	imply BOOTSTD_BOOTCOMMAND
>> >  	imply BOOTSTD_FULL
>> >  	imply OF_UPSTREAM
>> > +	select CMD_REMOTEPROC
>> > +	select REMOTEPROC_IMX
>> > +	select REGMAP
>> > +	select SYSCON
>> > +	select IMX_SM_LMM
>> > +	select IMX_SM_CPU
>> 
>> Why doing this with a select in the Kconfig?
>> 
>> I would expect either
>>  - you enable what you need in the defconfig
>>  - you add the select to the imx95 soc
>
>There are many defconfigs in NXP downstream for
>a single board:
>$ls -l configs/imx95_19x19_* | wc -l
>21
>I would not changes so many defconfigs.

Why don't you have the common part shared in a single defconfig fragment and reuse it without duplicating the content?


Francesco 

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH 4/4] imx9: Kconfig: Enable remoteproc for i.MX95 EVK
  2026-01-30  2:06     ` Peng Fan
  2026-01-31  7:26       ` Francesco Dolcini
@ 2026-01-31 12:37       ` Fabio Estevam
  1 sibling, 0 replies; 11+ messages in thread
From: Fabio Estevam @ 2026-01-31 12:37 UTC (permalink / raw)
  To: Peng Fan
  Cc: Francesco Dolcini, Peng Fan (OSS), dl-uboot-imx,
	u-boot@lists.denx.de, Stefano Babic, Ye Li, Alice Guo

Hi Peng,

On Thu, Jan 29, 2026 at 11:06 PM Peng Fan <peng.fan@nxp.com> wrote:

> Fabio,
>
> What's your opinion here?

We should only add "select" in the board or SoC Kconfig if the option
is vital for booting.

The remoteproc options do not fall into this category, so placing them
into the defconfig makes more sense.

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2026-01-31 12:38 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-01-29 10:24 [PATCH 0/4] remoteproc: support i.MX95 Peng Fan (OSS)
2026-01-29 10:24 ` [PATCH 1/4] remoteproc: imx: Support ECC initialization Peng Fan (OSS)
2026-01-29 10:24 ` [PATCH 2/4] remoteproc: imx: Add i.MX95 support Peng Fan (OSS)
2026-01-29 10:24 ` [PATCH 3/4] arm: dts: imx95: Add cm7 node Peng Fan (OSS)
2026-01-29 10:08   ` Fabio Estevam
2026-01-30  2:00     ` Peng Fan
2026-01-29 10:25 ` [PATCH 4/4] imx9: Kconfig: Enable remoteproc for i.MX95 EVK Peng Fan (OSS)
2026-01-29 10:01   ` Francesco Dolcini
2026-01-30  2:06     ` Peng Fan
2026-01-31  7:26       ` Francesco Dolcini
2026-01-31 12:37       ` Fabio Estevam

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox