* 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