From nobody Sat Jun 13 04:19:36 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 3DA8F26ED3A; Mon, 11 May 2026 02:37:23 +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=1778467044; cv=none; b=DBPFkJ4GzZWQNK46pm2lhqzWk7qTw4qzqdCdd9k0MJNuR0f8VeNnb6w3lZhdYBotHHJdk3ZocJV4JLqznQRo2ZDKpknM5McflJEuLl+uBcsyO5hViwyfJQGodBcPPNkhu14N/Kew1xhK0cmZHFhYd8YUlLL24PKUMl709st4Kes= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778467044; c=relaxed/simple; bh=xNbxGe7aSwjgSU07Ix1JQliTrpp3b+Q5a295IWkbFu0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References; b=tKefLMz6Vu5tSc9OJpolNzHI6O7HEzgB0TFPRuZ0UQUjJy49I/8qM+XG6T3KcESG4leSR3GQy+j7kKpV4Q0CMaQI822VWYYqHjgOB8FkdWOKUAOrnKaPTRKik+PW/XxzpphpBwhDZ5CY1IyUvRE6/TWHRwBGMETxaAiFn1OOERI= 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 CA5CE1A4840; Mon, 11 May 2026 04:37:07 +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 9C0771A4841; Mon, 11 May 2026 04:37:07 +0200 (CEST) Received: from localhost.localdomain (mega.ap.freescale.net [10.192.208.232]) by aprdc01srsp001v.ap-rdc01.nxp.com (Postfix) with ESMTP id 69EE618002C2; Mon, 11 May 2026 10:37:05 +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, linux-remoteproc@vger.kernel.org, devicetree@vger.kernel.org, Jiafei Pan Subject: [PATCH v3 1/4] dt-bindings: remoteproc: add imx-rproc-psci Date: Mon, 11 May 2026 10:39:25 +0800 Message-Id: <20260511023928.39640-2-Jiafei.Pan@nxp.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20260511023928.39640-1-Jiafei.Pan@nxp.com> References: <20260511023928.39640-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 v3: - Fixed dt_binding_check warnings --- .../remoteproc/fsl,imx-rproc-psci.yaml | 51 +++++++++++++++++++ 1 file changed, 51 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..28d00dbf8bc7 --- /dev/null +++ b/Documentation/devicetree/bindings/remoteproc/fsl,imx-rproc-psci.yaml @@ -0,0 +1,51 @@ +# 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-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-ca55-1 { + compatible =3D "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 Sat Jun 13 04:19:36 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 F1BCD2701B6; Mon, 11 May 2026 02:37:23 +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=1778467045; cv=none; b=kwxcpOFz2ZlDC/8H6j/B9JpOFwgUpxkQCLfKK+zP8r+QiJmfTbMH1WcFqKkwH+sAFLNctZKBBxv+DsJO7MLRyBRXN6spouFBwFxYSmTQ0uPvMuL6scSy04iy6iSqiCi+hA+s6ADcDyipzZg+iywDDVOH8PRSfpUgKerT8Ka+G24= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778467045; c=relaxed/simple; bh=BatIEWyr+CCEyL4GPyT8fNtUhrv3z+1HZu0Y2CArgLA=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References; b=K8qF2/xMsbmS26KDoPLzbnMKbiuPWPxxg+qEzSFoMc891pFzgblUrDRyjSxy0mTu4TwZxu8Yd/Tjg/ooeT1xTI1IVqDePQT8xK5Ulb3tYBGeBn0N/BWIEYG+9wmTqs5w8S8Vk5F4Mv6ox7OGFzu5k5UWooLwHfK/5pUyM97Dm5k= 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 CD5C61A4852; Mon, 11 May 2026 04:37:10 +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 92E391A485C; Mon, 11 May 2026 04:37:10 +0200 (CEST) Received: from localhost.localdomain (mega.ap.freescale.net [10.192.208.232]) by aprdc01srsp001v.ap-rdc01.nxp.com (Postfix) with ESMTP id 6234918002D1; Mon, 11 May 2026 10:37:08 +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, linux-remoteproc@vger.kernel.org, devicetree@vger.kernel.org, Jiafei Pan Subject: [PATCH v3 2/4] remoteproc: imx_rproc: add support for Cortex-A Core Date: Mon, 11 May 2026 10:39:26 +0800 Message-Id: <20260511023928.39640-3-Jiafei.Pan@nxp.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20260511023928.39640-1-Jiafei.Pan@nxp.com> References: <20260511023928.39640-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 --- Changes in v3: - Updated prefix of patch subject --- 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 Sat Jun 13 04:19:36 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 29ACC274B3B; Mon, 11 May 2026 02:37:25 +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=1778467047; cv=none; b=C1eZR43yMGULUXZdO9gS+d1COdMn0UnsPlKjB836xkVqcmcX2s1mrMk9Si8gVrz7BCm5sdvW+nm4fMNk2Ybj/zTPobI8tWj5AkRA2w5OG/ji2rzXZYnG7C2UuElRbxsrzQQM5dQDFzE3IypaxPAEJ6RXLK2wz8z7A5nZs69E5yU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778467047; c=relaxed/simple; bh=W7f7BfPczttR8tLC20aw4NCnc9tckGqSjw3XSso73WM=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References; b=nCF3J+O55okeDZl6tRP4Laqtl6AWEmRsUPAh+Kp2qJIv1U19n/UDnaJj8jbZu+Oy7zzij64Wcpi59QvCAHc+JLYCr8nJuwK36P1Qz/NyDGt6HOB5hJZ7NmbVr5TSwQyV5XiWTBpajeLJuMs9yEl1lXctF4MTYu5q5z0oKKSQOAM= 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 5EDCA1A4809; Mon, 11 May 2026 04:37:13 +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 287531A155D; Mon, 11 May 2026 04:37:13 +0200 (CEST) Received: from localhost.localdomain (mega.ap.freescale.net [10.192.208.232]) by aprdc01srsp001v.ap-rdc01.nxp.com (Postfix) with ESMTP id EDCE818002D5; Mon, 11 May 2026 10:37:10 +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, linux-remoteproc@vger.kernel.org, devicetree@vger.kernel.org, Jiafei Pan Subject: [PATCH v3 3/4] remoteproc: imx_rproc: add autoboot support for A-core Date: Mon, 11 May 2026 10:39:27 +0800 Message-Id: <20260511023928.39640-4-Jiafei.Pan@nxp.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20260511023928.39640-1-Jiafei.Pan@nxp.com> References: <20260511023928.39640-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 --- Changes in v3: - Added my signed-of-by. --- 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 Sat Jun 13 04:19:36 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 6A7451C701F; Mon, 11 May 2026 02:37:17 +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=1778467038; cv=none; b=DLpkWaXU3AaftBvCF22CiQbOTq6WbiQPrP//wr4IzOEMj2sSnPXWfWmSAMPG7YzcrESrY0VNEEkm1oB7wsmx00QvklSHtbRhHzHz5E26PuMpw2T3zH2cwCsN116BLcQ916Vi9YOQ4u4tYe++rKvUS7Kszx5MFWwBBeXKIp84GP0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778467038; c=relaxed/simple; bh=LnQfIBmSYmPKAyBX0O5dqTZS7iJTqQLydSkLfaO+gzk=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References; b=TGVcNIgzaxCr8xfbMMYUXy1kLQYpLr+SgAMdSBQMTTUr6b49+CRO4NGfEpulkIKqE0uaj5TUoUvwE/jQezSeH3mnJT9Dqz1Mv9aWEf3TZzkY4ez2ZUyQiafViLAzP5kllq+yNdHWJ5fUjtyy0tyOgSrcdEIquImE549l+5nuSyE= 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 03804201388; Mon, 11 May 2026 04:37:16 +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 CAA7B201362; Mon, 11 May 2026 04:37:15 +0200 (CEST) Received: from localhost.localdomain (mega.ap.freescale.net [10.192.208.232]) by aprdc01srsp001v.ap-rdc01.nxp.com (Postfix) with ESMTP id 7B9A018002C9; Mon, 11 May 2026 10:37:13 +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, linux-remoteproc@vger.kernel.org, devicetree@vger.kernel.org, Jiafei Pan Subject: [PATCH v3 4/4] arm64: dts: imx93: Cortex-A Core remoteproc device node Date: Mon, 11 May 2026 10:39:28 +0800 Message-Id: <20260511023928.39640-5-Jiafei.Pan@nxp.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20260511023928.39640-1-Jiafei.Pan@nxp.com> References: <20260511023928.39640-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 --- 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..549a9e762d6a --- /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-mask =3D <0x2>; + memory-region =3D <&rtos_ca55_reserved>; + }; +}; + --=20 2.43.0