From nobody Wed Jun 17 04:05:56 2026 Received: from inva021.nxp.com (inva021.nxp.com [92.121.34.21]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D41343D6673 for ; Tue, 28 Apr 2026 09:05:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=92.121.34.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777367140; cv=none; b=MxOO4sH8bVsQUcESKH3ShjyutxD+tXCZv1UTsoVYLyRPDA2ffhgXktnRweAb14ucmrn5vYCOhaiQTU1HdofHyrGyOyexUIZYnnJiU4Ak2vfCvRqIKDJOa+J4LqPUwWFOw47ohJYBRTJgGpPGSBQTkawX6hJ2FTfamEyncUip8qA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777367140; c=relaxed/simple; bh=jyNlr5Eqqnlnz9lPryB7rWBX44L7XcjPFgCNW2QI+/A=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References; b=s6s+xHZInFftHxx3J1k363dkpTPl3NLbTg5ZipsFsfwKgYcoSmNig2VpfdKByrxVH1JIxSbOX11fyD5JqPSFEKkDITqM007rLqHpX3j6Uro56TYbS1jhAlZPM53MRj+g8tLwuGkwNoJMg7t9lkwJaBZqahPBBCsLanZ2qfzypSI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; arc=none smtp.client-ip=92.121.34.21 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Received: from inva021.nxp.com (localhost [127.0.0.1]) by inva021.eu-rdc02.nxp.com (Postfix) with ESMTP id DAE04201607; Tue, 28 Apr 2026 11:05:35 +0200 (CEST) Received: from aprdc01srsp001v.ap-rdc01.nxp.com (aprdc01srsp001v.ap-rdc01.nxp.com [165.114.16.16]) by inva021.eu-rdc02.nxp.com (Postfix) with ESMTP id A1D4A20153F; Tue, 28 Apr 2026 11:05:35 +0200 (CEST) Received: from localhost.localdomain (mega.ap.freescale.net [10.192.208.232]) by aprdc01srsp001v.ap-rdc01.nxp.com (Postfix) with ESMTP id 8D69D1800083; Tue, 28 Apr 2026 17:05:33 +0800 (+08) From: Jiafei Pan To: andersson@kernel.org, mathieu.poirier@linaro.org, peng.fan@nxp.com, Frank.Li@nxp.com, s.hauer@pengutronix.de, kernel@pengutronix.de, festevam@gmail.com, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Cc: Zhiqiang.Hou@nxp.com, mingkai.hu@nxp.com, Jiafei Pan Subject: [PATCH 1/5] dt-bindings: remoteproc: add imx-rproc-psci binding Date: Tue, 28 Apr 2026 17:08:15 +0800 Message-Id: <20260428090819.17761-2-Jiafei.Pan@nxp.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20260428090819.17761-1-Jiafei.Pan@nxp.com> References: <20260428090819.17761-1-Jiafei.Pan@nxp.com> X-Virus-Scanned: ClamAV using ClamSMTP Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Add compatible string "fsl,imx-rproc-psci" for i.MX Cortex-A Core's remoteproc support. Signed-off-by: Jiafei Pan --- .../remoteproc/fsl,imx-rproc-psci.yaml | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 Documentation/devicetree/bindings/remoteproc/fsl,imx-rp= roc-psci.yaml diff --git a/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc-psc= i.yaml b/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc-psci.ya= ml new file mode 100644 index 000000000000..cdab9566e588 --- /dev/null +++ b/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc-psci.yaml @@ -0,0 +1,64 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/remoteproc/fsl,imx-rproc-psci.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: NXP i.MX Cortex-A Core Remote Processor via PSCI + +maintainers: + - Jiafei Pan + +description: + This binding provides support for managing Cortex-A cores as remote + processors on i.MX platforms using the PSCI (Power State Coordination + Interface) for CPU power management operations. This allows single + Cortex-A core or multiple Cortex-A cores to be controlled by Linux as + a remote processor, enabling them to run RTOS or bare-metal applications. + +properties: + compatible: + const: fsl,imx-rproc-psci + + fsl,cpus-bits: + $ref: /schemas/types.yaml#/definitions/uint32 + description: + Bitmask indicating which CPU cores are assigned to this remote + processor instance. Each bit represents a CPU core, where bit N + corresponds to CPU N. For example, 0x2 (0b10) assigns CPU core 1, + while 0x6 (0b110) assigns CPU cores 1 and 2. + + memory-region: + maxItems: 1 + description: + Phandle to a reserved memory region to be used for the remote + processor's code and data. + +required: + - compatible + - fsl,cpus-bits + - memory-region + +additionalProperties: false + +examples: + - | + / { + reserved-memory { + #address-cells =3D <2>; + #size-cells =3D <2>; + ranges; + + rtos_ca55_reserved: rtos-ca55@d0000000 { + reg =3D <0 0xd0000000 0 0x10000000>; + no-map; + }; + }; + + remoteproc-ca55-1 { + compatible =3D "fsl,imx-rproc-psci"; + /* bitmask: 0b10, assign A55 Core 1 */ + fsl,cpus-bits =3D <0x2>; + memory-region =3D <&rtos_ca55_reserved>; + }; + }; --=20 2.43.0 From nobody Wed Jun 17 04:05:56 2026 Received: from inva021.nxp.com (inva021.nxp.com [92.121.34.21]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5D14D3D6CC2 for ; Tue, 28 Apr 2026 09:05:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=92.121.34.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777367141; cv=none; b=bMMQZ3XiE386HkiE9Mtvg8OH8TSKZC313VnlzGqMLO5kdkGkeKrNI8T8Qfm2H9ET4NQKgR3rm4zkiI0oDAkKDY9AegW0V7eUUsRYGcCYU7dSShdYBKTMp7bsFgchLmnXDQn0pU2CGW3MPEjeZxxK6gVXOuKW7y1eMAWwWp3PVHQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777367141; c=relaxed/simple; bh=4mp2ezuOxgaNTicIuF1O96Jr0R2GoLm0gTPpNMZZ6sI=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References; b=E7fKd2To4lwHom923CcfG1wgmUzfX12OzvS12SJnDoHZbZcDFfIbHSd/R72h586al6xesenOHU4DDDXDg0COSx9A21+p/TTgBizigzaQsjvm5Bqd5PveS7rji2B5OBXJJjghArW30BmmYZqRpsDFtAOHSDFDBOnSJGONqQZWIH0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; arc=none smtp.client-ip=92.121.34.21 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Received: from inva021.nxp.com (localhost [127.0.0.1]) by inva021.eu-rdc02.nxp.com (Postfix) with ESMTP id 1961A2015FA; Tue, 28 Apr 2026 11:05:38 +0200 (CEST) Received: from aprdc01srsp001v.ap-rdc01.nxp.com (aprdc01srsp001v.ap-rdc01.nxp.com [165.114.16.16]) by inva021.eu-rdc02.nxp.com (Postfix) with ESMTP id D429620153F; Tue, 28 Apr 2026 11:05:37 +0200 (CEST) Received: from localhost.localdomain (mega.ap.freescale.net [10.192.208.232]) by aprdc01srsp001v.ap-rdc01.nxp.com (Postfix) with ESMTP id C0295180026F; Tue, 28 Apr 2026 17:05:35 +0800 (+08) From: Jiafei Pan To: andersson@kernel.org, mathieu.poirier@linaro.org, peng.fan@nxp.com, Frank.Li@nxp.com, s.hauer@pengutronix.de, kernel@pengutronix.de, festevam@gmail.com, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Cc: Zhiqiang.Hou@nxp.com, mingkai.hu@nxp.com, Jiafei Pan Subject: [PATCH 2/5] drivers: remoteproc: imx: add support for Cortex-A Core Date: Tue, 28 Apr 2026 17:08:16 +0800 Message-Id: <20260428090819.17761-3-Jiafei.Pan@nxp.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20260428090819.17761-1-Jiafei.Pan@nxp.com> References: <20260428090819.17761-1-Jiafei.Pan@nxp.com> X-Virus-Scanned: ClamAV using ClamSMTP Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Add Cortex-A Core remoteproc support, it use PSCI and SIP SMC call to manage Cortex-A Core to be on or off. Signed-off-by: Jiafei Pan --- drivers/remoteproc/imx_rproc.c | 134 +++++++++++++++++++++++++++++++++ drivers/remoteproc/imx_rproc.h | 2 + 2 files changed, 136 insertions(+) diff --git a/drivers/remoteproc/imx_rproc.c b/drivers/remoteproc/imx_rproc.c index 0dd80e688b0e..8a3de27c96b7 100644 --- a/drivers/remoteproc/imx_rproc.c +++ b/drivers/remoteproc/imx_rproc.c @@ -6,6 +6,7 @@ #include #include #include +#include #include #include #include @@ -20,12 +21,17 @@ #include #include #include +#include #include #include #include #include #include =20 +#include + +#include + #include "imx_rproc.h" #include "remoteproc_internal.h" =20 @@ -72,6 +78,8 @@ #define IMX_SIP_RPROC_STARTED 0x01 #define IMX_SIP_RPROC_STOP 0x02 =20 +#define IMX_SIP_CPU_OFF 0xC2000012 + #define IMX_SC_IRQ_GROUP_REBOOTED 5 =20 /** @@ -131,6 +139,9 @@ struct imx_rproc { * BIT 0: IMX_RPROC_FLAGS_SM_LMM_CTRL(RPROC LM is under Linux control ) */ u32 flags; + /* used by Cortex-A Core remoteproc to manage all CPU Cores */ + cpumask_t cpus; + cpumask_t offlined_cpus; }; =20 static const struct imx_rproc_att imx_rproc_att_imx95_m7[] =3D { @@ -381,6 +392,45 @@ static int imx_rproc_sm_lmm_start(struct rproc *rproc) return 0; } =20 +static int imx_rproc_psci_start(struct rproc *rproc) +{ + struct imx_rproc *priv =3D rproc->priv; + struct device *dev =3D priv->dev; + unsigned int cpu; + int ret; + + if (cpumask_empty(&priv->cpus)) { + dev_err(dev, "No CPU Core assigned!\n"); + return -ENODEV; + } + + for_each_cpu(cpu, &priv->cpus) { + if (cpu_online(cpu)) { + ret =3D remove_cpu(cpu); + if (ret) + goto err; + cpumask_set_cpu(cpu, &priv->offlined_cpus); + } + } + + cpu =3D cpumask_first(&priv->cpus); + ret =3D psci_ops.cpu_on(cpu_logical_map(cpu), rproc->bootaddr); + if (ret) { + dev_err(dev, "Boot failed on CPU Core %d\n", cpu); + goto err; + } + + return 0; + +err: + for_each_cpu(cpu, &priv->cpus) { + if (!cpu_online(cpu) && add_cpu(cpu) =3D=3D 0) + cpumask_clear_cpu(cpu, &priv->offlined_cpus); + } + + return ret; +} + static int imx_rproc_start(struct rproc *rproc) { struct imx_rproc *priv =3D rproc->priv; @@ -456,6 +506,50 @@ static int imx_rproc_sm_lmm_stop(struct rproc *rproc) return scmi_imx_lmm_operation(dcfg->lmid, SCMI_IMX_LMM_SHUTDOWN, 0); } =20 +static int imx_rproc_psci_stop(struct rproc *rproc) +{ + struct imx_rproc *priv =3D rproc->priv; + struct device *dev =3D priv->dev; + struct arm_smccc_res res; + unsigned int cpu; + unsigned long start, end; + int err; + + for_each_cpu(cpu, &priv->cpus) { + /* Check CPU status */ + err =3D psci_ops.affinity_info(cpu_logical_map(cpu), 0); + if (err =3D=3D PSCI_0_2_AFFINITY_LEVEL_OFF) + continue; + + /* Bring CPU to be off */ + arm_smccc_smc(IMX_SIP_CPU_OFF, cpu, 0, + 0, 0, 0, 0, 0, &res); + start =3D jiffies; + end =3D start + msecs_to_jiffies(100); + do { + err =3D psci_ops.affinity_info(cpu_logical_map(cpu), 0); + if (err =3D=3D PSCI_0_2_AFFINITY_LEVEL_OFF) { + pr_info("CPU%d is killed (polled %d ms)\n", cpu, + jiffies_to_msecs(jiffies - start)); + break; + } + + usleep_range(100, 1000); + } while (time_before(jiffies, end)); + } + + /* Return back freed CPU Core to Linux kernel */ + for_each_cpu(cpu, &priv->cpus) { + if (cpumask_test_cpu(cpu, &priv->offlined_cpus)) { + if (add_cpu(cpu) !=3D 0) + dev_err(dev, "Failed to bring CPU %d back to be online", cpu); + cpumask_clear_cpu(cpu, &priv->offlined_cpus); + } + } + + return 0; +} + static int imx_rproc_stop(struct rproc *rproc) { struct imx_rproc *priv =3D rproc->priv; @@ -480,6 +574,12 @@ static int imx_rproc_da_to_sys(struct imx_rproc *priv,= u64 da, const struct imx_rproc_dcfg *dcfg =3D priv->dcfg; int i; =20 + /* No need to translate for Cortex-A Core */ + if (dcfg->flags & IMX_RPROC_NO_ADDR_TRANS) { + *sys =3D da; + return 0; + } + /* parse address translation table */ for (i =3D 0; i < dcfg->att_size; i++) { const struct imx_rproc_att *att =3D &dcfg->att[i]; @@ -1184,6 +1284,13 @@ static int imx_rproc_sm_detect_mode(struct rproc *rp= roc) return imx_rproc_sm_lmm_check(rproc, started); } =20 +static int imx_rproc_psci_detect_mode(struct rproc *rproc) +{ + rproc->state =3D RPROC_OFFLINE; + + return 0; +} + static int imx_rproc_detect_mode(struct imx_rproc *priv) { /* @@ -1228,6 +1335,8 @@ static int imx_rproc_probe(struct platform_device *pd= ev) struct imx_rproc *priv; struct rproc *rproc; const struct imx_rproc_dcfg *dcfg; + unsigned int cpus; + unsigned long cpus_bits; int ret; =20 /* set some other name then imx */ @@ -1274,6 +1383,17 @@ static int imx_rproc_probe(struct platform_device *p= dev) if (ret) return dev_err_probe(dev, ret, "failed on imx_rproc_addr_init\n"); =20 + ret =3D of_property_read_u32(dev->of_node, "fsl,cpus-bits", &cpus); + if (ret) { + cpumask_clear(&priv->cpus); + } else { + cpus_bits =3D cpus; + bitmap_copy(cpumask_bits(&priv->cpus), &cpus_bits, + min((unsigned int)nr_cpumask_bits, + (unsigned int)sizeof(unsigned long))); + rproc->auto_boot =3D false; + } + ret =3D imx_rproc_detect_mode(priv); if (ret) return dev_err_probe(dev, ret, "failed on detect mode\n"); @@ -1372,6 +1492,12 @@ static const struct imx_rproc_plat_ops imx_rproc_ops= _sm_cpu =3D { .stop =3D imx_rproc_sm_cpu_stop, }; =20 +static const struct imx_rproc_plat_ops imx_rproc_ops_psci =3D { + .start =3D imx_rproc_psci_start, + .stop =3D imx_rproc_psci_stop, + .detect_mode =3D imx_rproc_psci_detect_mode, +}; + static const struct imx_rproc_dcfg imx_rproc_cfg_imx8mn_mmio =3D { .src_reg =3D IMX7D_SRC_SCR, .src_mask =3D IMX7D_M4_RST_MASK, @@ -1464,6 +1590,13 @@ static const struct imx_rproc_dcfg imx_rproc_cfg_imx= 95_m7 =3D { .lmid =3D 1, /* Use 1 as Logical Machine ID where M7 resides */ }; =20 +static const struct imx_rproc_dcfg imx_rproc_cfg_psci =3D { + .att =3D NULL, + .att_size =3D 0, + .ops =3D &imx_rproc_ops_psci, + .flags =3D IMX_RPROC_NO_ADDR_TRANS, +}; + static const struct of_device_id imx_rproc_of_match[] =3D { { .compatible =3D "fsl,imx7ulp-cm4", .data =3D &imx_rproc_cfg_imx7ulp }, { .compatible =3D "fsl,imx7d-cm4", .data =3D &imx_rproc_cfg_imx7d }, @@ -1479,6 +1612,7 @@ static const struct of_device_id imx_rproc_of_match[]= =3D { { .compatible =3D "fsl,imx8ulp-cm33", .data =3D &imx_rproc_cfg_imx8ulp }, { .compatible =3D "fsl,imx93-cm33", .data =3D &imx_rproc_cfg_imx93 }, { .compatible =3D "fsl,imx95-cm7", .data =3D &imx_rproc_cfg_imx95_m7 }, + { .compatible =3D "fsl,imx-rproc-psci", .data =3D &imx_rproc_cfg_psci }, {}, }; MODULE_DEVICE_TABLE(of, imx_rproc_of_match); diff --git a/drivers/remoteproc/imx_rproc.h b/drivers/remoteproc/imx_rproc.h index d37e6f90548c..be6709971042 100644 --- a/drivers/remoteproc/imx_rproc.h +++ b/drivers/remoteproc/imx_rproc.h @@ -18,6 +18,8 @@ struct imx_rproc_att { /* dcfg flags */ #define IMX_RPROC_NEED_SYSTEM_OFF BIT(0) #define IMX_RPROC_NEED_CLKS BIT(1) +/* No need address translation */ +#define IMX_RPROC_NO_ADDR_TRANS BIT(2) =20 struct imx_rproc_plat_ops { int (*start)(struct rproc *rproc); --=20 2.43.0 From nobody Wed Jun 17 04:05:56 2026 Received: from inva020.nxp.com (inva020.nxp.com [92.121.34.13]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 303E527A916 for ; Tue, 28 Apr 2026 09:05:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=92.121.34.13 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777367142; cv=none; b=gkjb5IIph2JtaTlNlckayQuM1S1zr68GcuMVztPW922TKz8Rdc+qoBcRFIKwL6zPny58VUqtwur0nPZCeHnR2npoFn36rTTgWmH7T3al5Rqeyog6pvelc+QUVfcy4gcrKIqLkE2aWnUg0KUYOYbjmjTDPoElTUP96KBcuf781rs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777367142; c=relaxed/simple; bh=pm8owCSvi5laK7dQAogzpytS3J+UVBzTzFwDIhOLVBM=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References; b=VtRR7yLBvHffGi5qruzp+SUA2oe2LuB4LkG6Eqv1hiSmPij8P8sn80aaN4UL3ZCU2PA0HqstBcoUooi6yZnoK4kvWUTSCBCxxwSucZxTHk2fV06gGf9/DH3mRbAHvQmz9bMkOxtBJ+gSAEHCY04N68IzAGOai936u0V6A+gs8lM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; arc=none smtp.client-ip=92.121.34.13 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Received: from inva020.nxp.com (localhost [127.0.0.1]) by inva020.eu-rdc02.nxp.com (Postfix) with ESMTP id C8DAA1A34CE; Tue, 28 Apr 2026 11:05:39 +0200 (CEST) Received: from aprdc01srsp001v.ap-rdc01.nxp.com (aprdc01srsp001v.ap-rdc01.nxp.com [165.114.16.16]) by inva020.eu-rdc02.nxp.com (Postfix) with ESMTP id 8F9E21A15F5; Tue, 28 Apr 2026 11:05:39 +0200 (CEST) Received: from localhost.localdomain (mega.ap.freescale.net [10.192.208.232]) by aprdc01srsp001v.ap-rdc01.nxp.com (Postfix) with ESMTP id EB0C3180028E; Tue, 28 Apr 2026 17:05:37 +0800 (+08) From: Jiafei Pan To: andersson@kernel.org, mathieu.poirier@linaro.org, peng.fan@nxp.com, Frank.Li@nxp.com, s.hauer@pengutronix.de, kernel@pengutronix.de, festevam@gmail.com, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Cc: Zhiqiang.Hou@nxp.com, mingkai.hu@nxp.com Subject: [PATCH 3/5] drivers: remoteproc: imx: add autoboot support for A-core remoteproc Date: Tue, 28 Apr 2026 17:08:17 +0800 Message-Id: <20260428090819.17761-4-Jiafei.Pan@nxp.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20260428090819.17761-1-Jiafei.Pan@nxp.com> References: <20260428090819.17761-1-Jiafei.Pan@nxp.com> X-Virus-Scanned: ClamAV using ClamSMTP Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Hou Zhiqiang Add autoboot support for Cortex-A Core remoteproc. Signed-off-by: Hou Zhiqiang --- drivers/remoteproc/imx_rproc.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/drivers/remoteproc/imx_rproc.c b/drivers/remoteproc/imx_rproc.c index 8a3de27c96b7..e8d239bef5c9 100644 --- a/drivers/remoteproc/imx_rproc.c +++ b/drivers/remoteproc/imx_rproc.c @@ -1286,7 +1286,24 @@ static int imx_rproc_sm_detect_mode(struct rproc *rp= roc) =20 static int imx_rproc_psci_detect_mode(struct rproc *rproc) { - rproc->state =3D RPROC_OFFLINE; + struct imx_rproc *priv =3D rproc->priv; + unsigned int cpu; + int cpu_aff; + + rproc->state =3D RPROC_DETACHED; + for_each_cpu(cpu, &priv->cpus) { + cpu_aff =3D psci_ops.affinity_info(cpu_logical_map(cpu), 0); + if (cpu_aff =3D=3D PSCI_0_2_AFFINITY_LEVEL_OFF) { + rproc->state =3D RPROC_OFFLINE; + break; + } + + /* in psci on state but running Linux */ + if (cpu_online(cpu)) { + rproc->state =3D RPROC_OFFLINE; + break; + } + } =20 return 0; } @@ -1391,7 +1408,6 @@ static int imx_rproc_probe(struct platform_device *pd= ev) bitmap_copy(cpumask_bits(&priv->cpus), &cpus_bits, min((unsigned int)nr_cpumask_bits, (unsigned int)sizeof(unsigned long))); - rproc->auto_boot =3D false; } =20 ret =3D imx_rproc_detect_mode(priv); --=20 2.43.0 From nobody Wed Jun 17 04:05:56 2026 Received: from inva021.nxp.com (inva021.nxp.com [92.121.34.21]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C20343EF0DA for ; Tue, 28 Apr 2026 09:05:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=92.121.34.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777367145; cv=none; b=Rx5WEw4etUzd3hxYON4kbiGp5wnVu+KFVgwl31QbdXT0QcgqHjK6ZjVm2J67YriZIFHQOArbHyUamObhbn8kHiWQpYVE3SXViXyu75Qr0LyQt9P6k+qK18zbVNpBPuADFuvlr2j+CvZUOgYANOJbOoPC7cpQOL6WKv5J01YaSEY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777367145; c=relaxed/simple; bh=aigFFuG6HH6aSAfLMc9C4iosY1vOdZElDT7mLXUDN4c=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References; b=Q1ONPK0GjKbvC5OD4AVzR7ViXxuWXXTGCryrvf2jGXuKocUDjYRCSNcnZKC+pwozB005aZGORvoAtOllIEitAUmhCPQS2MOpck9eyptJL/sXfrdc35b2R7uTdief00vj9nh3xIO7k+M/Pq7a2VDc5NJWbu4r+MXqao0+WhRGjEY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; arc=none smtp.client-ip=92.121.34.21 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Received: from inva021.nxp.com (localhost [127.0.0.1]) by inva021.eu-rdc02.nxp.com (Postfix) with ESMTP id 6211D20153F; Tue, 28 Apr 2026 11:05:42 +0200 (CEST) Received: from aprdc01srsp001v.ap-rdc01.nxp.com (aprdc01srsp001v.ap-rdc01.nxp.com [165.114.16.16]) by inva021.eu-rdc02.nxp.com (Postfix) with ESMTP id 284F8201613; Tue, 28 Apr 2026 11:05:42 +0200 (CEST) Received: from localhost.localdomain (mega.ap.freescale.net [10.192.208.232]) by aprdc01srsp001v.ap-rdc01.nxp.com (Postfix) with ESMTP id 15FFA1800083; Tue, 28 Apr 2026 17:05:39 +0800 (+08) From: Jiafei Pan To: andersson@kernel.org, mathieu.poirier@linaro.org, peng.fan@nxp.com, Frank.Li@nxp.com, s.hauer@pengutronix.de, kernel@pengutronix.de, festevam@gmail.com, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Cc: Zhiqiang.Hou@nxp.com, mingkai.hu@nxp.com, Jiafei Pan Subject: [PATCH 4/5] arm64: dts: imx93: Cortex-A Core remoteproc device node Date: Tue, 28 Apr 2026 17:08:18 +0800 Message-Id: <20260428090819.17761-5-Jiafei.Pan@nxp.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20260428090819.17761-1-Jiafei.Pan@nxp.com> References: <20260428090819.17761-1-Jiafei.Pan@nxp.com> X-Virus-Scanned: ClamAV using ClamSMTP Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Create device tree for i.MX93 14x14 evk and 11x11 evk, add Cortex-A Core remoteproc device nodes in these device tree. Signed-off-by: Jiafei Pan Signed-off-by: Hou Zhiqiang --- .../imx93-11x11-evk-multicore-rtos.dts | 39 +++++++++++++++++++ .../imx93-14x14-evk-multicore-rtos.dts | 39 +++++++++++++++++++ .../boot/dts/freescale/imx93-rproc-ca55.dtsi | 14 +++++++ 3 files changed, 92 insertions(+) create mode 100644 arch/arm64/boot/dts/freescale/imx93-11x11-evk-multicore= -rtos.dts create mode 100644 arch/arm64/boot/dts/freescale/imx93-14x14-evk-multicore= -rtos.dts create mode 100644 arch/arm64/boot/dts/freescale/imx93-rproc-ca55.dtsi diff --git a/arch/arm64/boot/dts/freescale/imx93-11x11-evk-multicore-rtos.d= ts b/arch/arm64/boot/dts/freescale/imx93-11x11-evk-multicore-rtos.dts new file mode 100644 index 000000000000..9fb2b94b83b4 --- /dev/null +++ b/arch/arm64/boot/dts/freescale/imx93-11x11-evk-multicore-rtos.dts @@ -0,0 +1,39 @@ +// SPDX-License-Identifier: (GPL-2.0 OR MIT) +/* + * Copyright 2023-2026 NXP + */ + +/dts-v1/; +#include "imx93-11x11-evk.dts" +#include "imx93-rproc-ca55.dtsi" + +/ { + reserved-memory { + #address-cells =3D <2>; + #size-cells =3D <2>; + ranges; + + /* + * Reserve up to 16MB for one possible RTOS instances running on + * one Cortex-A Cores when booting Linux on at least one Cortex-A Core. + */ + rtos_ca55_reserved: rtos-ca55@d0000000 { + no-map; + reg =3D <0 0xd0000000 0x0 0x1000000>; + }; + + /* Reserve 16MB for FreeRTOS on M33 */ + m33_reserved: m33@a5000000 { + no-map; + reg =3D <0 0xa5000000 0 0x1000000>; + }; + }; +}; + +&lpuart2 { + status =3D "disabled"; +}; + +&clk { + init-on-array =3D ; +}; diff --git a/arch/arm64/boot/dts/freescale/imx93-14x14-evk-multicore-rtos.d= ts b/arch/arm64/boot/dts/freescale/imx93-14x14-evk-multicore-rtos.dts new file mode 100644 index 000000000000..b2481bf19b4a --- /dev/null +++ b/arch/arm64/boot/dts/freescale/imx93-14x14-evk-multicore-rtos.dts @@ -0,0 +1,39 @@ +// SPDX-License-Identifier: (GPL-2.0 OR MIT) +/* + * Copyright 2024-2026 NXP + */ + +/dts-v1/; +#include "imx93-14x14-evk.dts" +#include "imx93-rproc-ca55.dtsi" + +/ { + reserved-memory { + #address-cells =3D <2>; + #size-cells =3D <2>; + ranges; + + /* + * Reserve up to 16MB for one possible RTOS instances running on + * one Cortex-A Cores when booting Linux on at least one Cortex-A Core. + */ + rtos_ca55_reserved: rtos-ca55@d0000000 { + no-map; + reg =3D <0 0xd0000000 0x0 0x1000000>; + }; + + /* Reserve 16MB for FreeRTOS on M33 */ + m33_reserved: m33@a5000000 { + no-map; + reg =3D <0 0xa5000000 0 0x1000000>; + }; + }; +}; + +&lpuart2 { + status =3D "disabled"; +}; + +&clk { + init-on-array =3D ; +}; diff --git a/arch/arm64/boot/dts/freescale/imx93-rproc-ca55.dtsi b/arch/arm= 64/boot/dts/freescale/imx93-rproc-ca55.dtsi new file mode 100644 index 000000000000..9d9a60404d2b --- /dev/null +++ b/arch/arm64/boot/dts/freescale/imx93-rproc-ca55.dtsi @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: (GPL-2.0 OR MIT) +/* + * Copyright 2024-2026 NXP + */ + +/ { + ca55_1: remoteproc-ca55-1 { + compatible =3D "fsl,imx-rproc-psci"; + /* bitmask:0b10, assign A55 Core 1 */ + fsl,cpus-bits =3D <0x2>; + memory-region =3D <&rtos_ca55_reserved>; + }; +}; + --=20 2.43.0 From nobody Wed Jun 17 04:05:56 2026 Received: from inva021.nxp.com (inva021.nxp.com [92.121.34.21]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EE9833EF651 for ; Tue, 28 Apr 2026 09:05:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=92.121.34.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777367147; cv=none; b=SpNHaMRN7I/RXwPK201A5utAJCY4pCgWjFgT1lbjrHO2PAw8VTgkiDzVlpOfvgfZG5RfT7lP8tPgpl05Fk/0mGrhOblcQMqUHpbeGkCV5NzZsE5miy83bGqOBY7Yny8kNlTL7SbYiEiuXgzey30Rh46H3rl/KEJcIcdh+sTUSpc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777367147; c=relaxed/simple; bh=lQoUiY+lt3bjHsPzg5VqObWgbpGt7W1tAnizhzeKrxQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References; b=H6McyqIuAUTzu3THLdskEHMGcjU6V77rxlWsc2ip5IF+rLLKEsjyr9l+wUN/IbOPC9B7S+jgj3j2atepN4xtvqbQFyDVXWP+dSZV4etg4PfcatcYgBSRpj3piXWHPH5QlKn4BZj+56MHjtKEfs7zI70yLd5bp5NfNYzMLnaHzgg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; arc=none smtp.client-ip=92.121.34.21 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Received: from inva021.nxp.com (localhost [127.0.0.1]) by inva021.eu-rdc02.nxp.com (Postfix) with ESMTP id 9C967203504; Tue, 28 Apr 2026 11:05:44 +0200 (CEST) Received: from aprdc01srsp001v.ap-rdc01.nxp.com (aprdc01srsp001v.ap-rdc01.nxp.com [165.114.16.16]) by inva021.eu-rdc02.nxp.com (Postfix) with ESMTP id 622E4201613; Tue, 28 Apr 2026 11:05:44 +0200 (CEST) Received: from localhost.localdomain (mega.ap.freescale.net [10.192.208.232]) by aprdc01srsp001v.ap-rdc01.nxp.com (Postfix) with ESMTP id 432461800091; Tue, 28 Apr 2026 17:05:42 +0800 (+08) From: Jiafei Pan To: andersson@kernel.org, mathieu.poirier@linaro.org, peng.fan@nxp.com, Frank.Li@nxp.com, s.hauer@pengutronix.de, kernel@pengutronix.de, festevam@gmail.com, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Cc: Zhiqiang.Hou@nxp.com, mingkai.hu@nxp.com, Jiafei Pan Subject: [PATCH 5/5] remoteproc: imx: use device node name as processor name Date: Tue, 28 Apr 2026 17:08:19 +0800 Message-Id: <20260428090819.17761-6-Jiafei.Pan@nxp.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20260428090819.17761-1-Jiafei.Pan@nxp.com> References: <20260428090819.17761-1-Jiafei.Pan@nxp.com> X-Virus-Scanned: ClamAV using ClamSMTP Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" As currently there are maybe multiple remote processors, so change from using fixed name to using device node name as remote processor name in order to make them can be distinguished by through of name in sys filesystem. Signed-off-by: Jiafei Pan --- drivers/remoteproc/imx_rproc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/remoteproc/imx_rproc.c b/drivers/remoteproc/imx_rproc.c index e8d239bef5c9..17026e390e88 100644 --- a/drivers/remoteproc/imx_rproc.c +++ b/drivers/remoteproc/imx_rproc.c @@ -1357,7 +1357,7 @@ static int imx_rproc_probe(struct platform_device *pd= ev) int ret; =20 /* set some other name then imx */ - rproc =3D devm_rproc_alloc(dev, "imx-rproc", &imx_rproc_ops, + rproc =3D devm_rproc_alloc(dev, np->name, &imx_rproc_ops, NULL, sizeof(*priv)); if (!rproc) return -ENOMEM; --=20 2.43.0