From nobody Tue Sep 29 04:42:53 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 B36BE409121; Wed, 12 Aug 2026 10:47:01 +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=1786531623; cv=none; b=YPH7z8zibzTE56lXUiSKX4SLy5UPyPOmPQXLd4EoLwCCRukz4MpKfIYdnS7vU8ZCOfn8c8tvR8dlY1BnvTLkWT0GysSdCNxrkseLRqyZHrCp7xsAZFNK2pNMBoWDwHO2r3I2Tx79KHgQ0zwevd7eSBId33V+oaNvu0scn5n1SPk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786531623; c=relaxed/simple; bh=0eEBJcdkU5y3abHYLXfT7KFHqo1WFkpFzA3GHFW+6dE=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References; b=IrblGmyCaOroEAOt0e3WLZklPvReh8b3pcdIRkR6LsIIrWWkG6TPdVRnV1+LuNsSMyNFYIly5UwC35ig0j6eK22aPT2YEu0Dh34cwPdTZPy64tJ1nXplzflo/RnCRmSHnnwJM8OFuG09qdpzcp4xAyHe0gC6koQYAQk0a0xdfdo= 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 3E53D200016; Wed, 12 Aug 2026 12:47:00 +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 00472200011; Wed, 12 Aug 2026 12:47:00 +0200 (CEST) Received: from localhost.localdomain (mega.ap.freescale.net [10.192.208.232]) by aprdc01srsp001v.ap-rdc01.nxp.com (Postfix) with ESMTP id AAA4418000B1; Wed, 12 Aug 2026 18:46:57 +0800 (+08) From: Jiafei Pan To: andersson@kernel.org, mathieu.poirier@linaro.org Cc: krzysztof.kozlowski@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-remoteproc@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Zhiqiang.Hou@nxp.com, mingkai.hu@nxp.com, Jiafei Pan Subject: [PATCH v4 1/4] dt-bindings: remoteproc: add imx-rproc-psci Date: Wed, 12 Aug 2026 18:46:30 +0800 Message-Id: <20260812104633.22420-2-Jiafei.Pan@nxp.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20260812104633.22420-1-Jiafei.Pan@nxp.com> References: <20260511023928.39640-2-Jiafei.Pan@nxp.com> <20260812104633.22420-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 --- Changes in v4: - Updated description to describe the hardware instead of the binding - Changed compatible to SoC-specific "fsl,imx93-rproc-psci" with generic fallback "fsl,imx-rproc-psci" - Fixed example node name from "remoteproc-ca55-1" to "remoteproc" --- .../remoteproc/fsl,imx-rproc-psci.yaml | 54 +++++++++++++++++++ 1 file changed, 54 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..7d0d0da383a2 --- /dev/null +++ b/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc-psci.yaml @@ -0,0 +1,54 @@ +# 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: + NXP i.MX SoCs integrate multiple Cortex-A cores. On certain i.MX + platforms, one or more of these cores can be offloaded to run RTOS + or bare-metal firmware as a remote processor, while the remaining + cores run Linux. The cores are powered on and off via PSCI (Power + State Coordination Interface) CPU_ON/CPU_OFF calls to the firmware. + +properties: + compatible: + items: + - enum: + - fsl,imx93-ca55-rproc + - const: fsl,imx-rproc-psci + + fsl,cpus-mask: + $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-mask + - memory-region + +additionalProperties: false + +examples: + - | + remoteproc { + compatible =3D "fsl,imx93-ca55-rproc", "fsl,imx-rproc-psci"; + /* bitmask: 0b10, assign A55 Core 1 */ + fsl,cpus-mask =3D <0x2>; + memory-region =3D <&rtos_ca55_reserved>; + }; --=20 2.43.0 From nobody Tue Sep 29 04:42:53 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 45A11423A83; Wed, 12 Aug 2026 10:47:06 +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=1786531628; cv=none; b=CK7AjW92Wa919nRXwbNuI6rrx9i9p/AFxycrA3pUTJ0sEOM4bcwe5SfF08OJpJux1wmGK8ILHUD95hjxFh4q15Rdkmpvtb/zwEqnqQILFkYMrSjjyVgucR6knKNdrLq96k3cp0s4x17U8VmIAPDt0fl+Jl1LSpiXgy7DUME44jw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786531628; c=relaxed/simple; bh=4mp2ezuOxgaNTicIuF1O96Jr0R2GoLm0gTPpNMZZ6sI=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References; b=PL/38RNCVLetbHSENhUCVo3A1tuBU6bOg045YGQ/PB+ZTkOwAMJb6AoIhwxsbXcZkswKD4TJBsThKmYe8YWFynmpqTAOy2NXmEWawHhBMx2bZBdiMtJRnEunQlZsAxhEYPyPQewUvDSbgdhJ/jEx/ElJ3IZ3CGwtgBpy2CXFp6E= 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 A3240200012; Wed, 12 Aug 2026 12:47:04 +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 6D2C2200008; Wed, 12 Aug 2026 12:47:04 +0200 (CEST) Received: from localhost.localdomain (mega.ap.freescale.net [10.192.208.232]) by aprdc01srsp001v.ap-rdc01.nxp.com (Postfix) with ESMTP id 21F7A18000B0; Wed, 12 Aug 2026 18:47:02 +0800 (+08) From: Jiafei Pan To: andersson@kernel.org, mathieu.poirier@linaro.org Cc: krzysztof.kozlowski@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-remoteproc@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Zhiqiang.Hou@nxp.com, mingkai.hu@nxp.com, Jiafei Pan Subject: [PATCH v4 2/4] remoteproc: imx_rproc: add support for Cortex-A Core Date: Wed, 12 Aug 2026 18:46:31 +0800 Message-Id: <20260812104633.22420-3-Jiafei.Pan@nxp.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20260812104633.22420-1-Jiafei.Pan@nxp.com> References: <20260511023928.39640-2-Jiafei.Pan@nxp.com> <20260812104633.22420-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 Tue Sep 29 04:42:53 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 54A9141D20B; Wed, 12 Aug 2026 10:47:10 +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=1786531631; cv=none; b=EtrJzmWU2t1g+1BtX4cG7LaWTptbpenwYQFMyl+FUS55iatoh8x+VhDLQOZMLg2ZS63BVmkwZhsqhAj6DOr1g9oNI0olo5zkDSefZvUlMIZIUR2HlnMRzvmLxmh/zNKAl/ZxlYFQ7GyY5V4rzIGsv1b6UKLYL55lk9/XPwrOC04= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786531631; c=relaxed/simple; bh=423/Z313kg/CWp2w+XWY9IWnFHxMeoLv68k+gEDXmFw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References; b=UsiLiIGo7kIpRwWMCL3PSbPbwlsFcSN/Hmr2E3pztxtbHN9zdsP/c2rrgzvtl4PkrOdnocPIIYUvwsgmu0AZFLG2KdFHUO3mA27mZ/VR8kwAsjU9WO989Y34qYeBbeclg9Q5omJr13JT/Qktp9yzniKGbCE/C4X8C6IKKoQi4lU= 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 5FF671A000D; Wed, 12 Aug 2026 12:47:08 +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 24D8A1A0012; Wed, 12 Aug 2026 12:47:08 +0200 (CEST) Received: from localhost.localdomain (mega.ap.freescale.net [10.192.208.232]) by aprdc01srsp001v.ap-rdc01.nxp.com (Postfix) with ESMTP id CF83318000B5; Wed, 12 Aug 2026 18:47:05 +0800 (+08) From: Jiafei Pan To: andersson@kernel.org, mathieu.poirier@linaro.org Cc: krzysztof.kozlowski@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-remoteproc@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Zhiqiang.Hou@nxp.com, mingkai.hu@nxp.com, Jiafei Pan Subject: [PATCH v4 3/4] remoteproc: imx_rproc: add autoboot support for A-core Date: Wed, 12 Aug 2026 18:46:32 +0800 Message-Id: <20260812104633.22420-4-Jiafei.Pan@nxp.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20260812104633.22420-1-Jiafei.Pan@nxp.com> References: <20260511023928.39640-2-Jiafei.Pan@nxp.com> <20260812104633.22420-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 Signed-off-by: Jiafei Pan --- 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 Tue Sep 29 04:42:53 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 1B54142C4FF; Wed, 12 Aug 2026 10:47:12 +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=1786531634; cv=none; b=DEMoGeeGfreOahncRTClRcpZzRCVvncbcWBV4wJlRuNPQph6K1NB/kR0HkPMYj5/Upsti495bjnhvwtn8S19y0ySy8oMYlgz1wmXuaSWvyKvUDwIq1hnzSJdVrK/YngxMljnPCbd5Qo0WtoWYEAw+EyycTjTtZs8NKFBPiMZ3jA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786531634; c=relaxed/simple; bh=HbfwYcVN9JDlSY7DygCc3+yGIcN54pOnFwHX3tq40Vo=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References; b=fPwpcf0G/KXdpyooB7WQvsTbjKZVVzuKtpk52Ri/it/i3Ih8ijoT8og/E+2qFgQXaMs2qm3MaKIbCmYwq590nDMoSfh4hqA0U6T8S0iGwt4YRRyQAWAKLKt8f61yxwVi22i7FpV4Bz1fF2qFfKrca0KmduLuTxcQaU0WxaSLYg0= 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 893491A0012; Wed, 12 Aug 2026 12:47:11 +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 505751A0005; Wed, 12 Aug 2026 12:47:11 +0200 (CEST) Received: from localhost.localdomain (mega.ap.freescale.net [10.192.208.232]) by aprdc01srsp001v.ap-rdc01.nxp.com (Postfix) with ESMTP id F22A018000B0; Wed, 12 Aug 2026 18:47:08 +0800 (+08) From: Jiafei Pan To: andersson@kernel.org, mathieu.poirier@linaro.org Cc: krzysztof.kozlowski@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-remoteproc@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Zhiqiang.Hou@nxp.com, mingkai.hu@nxp.com, Jiafei Pan Subject: [PATCH v4 4/4] arm64: dts: imx93: Cortex-A Core remoteproc device node Date: Wed, 12 Aug 2026 18:46:33 +0800 Message-Id: <20260812104633.22420-5-Jiafei.Pan@nxp.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20260812104633.22420-1-Jiafei.Pan@nxp.com> References: <20260511023928.39640-2-Jiafei.Pan@nxp.com> <20260812104633.22420-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 --- Changes in v4: - Updated dts compatible. --- arch/arm64/boot/dts/freescale/Makefile | 2 + .../imx93-11x11-evk-multicore-rtos.dts | 39 +++++++++++++++++++ .../imx93-14x14-evk-multicore-rtos.dts | 39 +++++++++++++++++++ .../boot/dts/freescale/imx93-rproc-ca55.dtsi | 14 +++++++ 4 files changed, 94 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/Makefile b/arch/arm64/boot/dts/f= reescale/Makefile index 711e36cc2c99..f067e5c44dae 100644 --- a/arch/arm64/boot/dts/freescale/Makefile +++ b/arch/arm64/boot/dts/freescale/Makefile @@ -460,12 +460,14 @@ dtb-$(CONFIG_ARCH_MXC) +=3D imx93-9x9-qsb-i3c.dtb dtb-$(CONFIG_ARCH_MXC) +=3D imx93-9x9-qsb-ontat-kd50g21-40nt-a1.dtb =20 dtb-$(CONFIG_ARCH_MXC) +=3D imx93-11x11-evk.dtb +dtb-$(CONFIG_ARCH_MXC) +=3D imx93-11x11-evk-multicore-rtos.dtb dtb-$(CONFIG_ARCH_MXC) +=3D imx93-11x11-frdm.dtb =20 imx93-11x11-frdm-pixpaper-dtbs +=3D imx93-11x11-frdm.dtb imx93-11x11-frdm-= pixpaper.dtbo dtb-$(CONFIG_ARCH_MXC) +=3D imx93-11x11-frdm-pixpaper.dtb =20 dtb-$(CONFIG_ARCH_MXC) +=3D imx93-14x14-evk.dtb +dtb-$(CONFIG_ARCH_MXC) +=3D imx93-14x14-evk-multicore-rtos.dtb dtb-$(CONFIG_ARCH_MXC) +=3D imx93-kontron-bl-osm-s.dtb dtb-$(CONFIG_ARCH_MXC) +=3D imx93-phyboard-nash.dtb dtb-$(CONFIG_ARCH_MXC) +=3D imx93-phyboard-segin.dtb 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..715134a55b61 --- /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 { + compatible =3D "fsl,imx93-ca55-rproc", "fsl,imx-rproc-psci"; + /* bitmask:0b10, assign A55 Core 1 */ + fsl,cpus-mask =3D <0x2>; + memory-region =3D <&rtos_ca55_reserved>; + }; +}; + --=20 2.43.0