Linux kernel and device drivers for NXP i.MX platforms
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Jiafei Pan" <Jiafei.Pan@nxp.com>
Cc: Frank.Li@kernel.org, robh@kernel.org, imx@lists.linux.dev,
	krzk+dt@kernel.org, devicetree@vger.kernel.org,
	conor+dt@kernel.org
Subject: Re: [PATCH v3 3/4] remoteproc: imx_rproc: add autoboot support for A-core
Date: Tue, 12 May 2026 00:00:13 +0000	[thread overview]
Message-ID: <20260512000014.1941DC2BCB0@smtp.kernel.org> (raw)
In-Reply-To: <20260511023928.39640-4-Jiafei.Pan@nxp.com>

Thank you for your contribution! Sashiko AI review found 5 potential issue(s) to consider:
- [High] Unexported kernel symbols `psci_ops` and `cpu_logical_map()` are referenced, causing link errors when compiled as a module.
- [High] Unconditional invocation of `psci_ops.affinity_info` can lead to a NULL pointer dereference.
- [High] Negative error codes and pending states from `psci_ops.affinity_info()` are incorrectly treated as 'ON' state.
- [High] State detection logic is flawed for multi-core configurations, potentially booting an already running core.
- [High] Empty CPU mask logic error leads to incorrect auto-attaching to non-existent cores.
--

commit af57d4202637d4c4549d5d1bd6d7af8d8a4bbb7e
Author: Hou Zhiqiang <Zhiqiang.Hou@nxp.com>

remoteproc: imx_rproc: add autoboot support for A-core

This commit adds autoboot support for Cortex-A Core remoteproc by
implementing PSCI state detection to manage CPU cores. It evaluates CPU
affinity and online status to set the remoteproc state accordingly.

> diff --git a/drivers/remoteproc/imx_rproc.c b/drivers/remoteproc/imx_rproc.c
> index 8a3de27c96b78..e8d239bef5c95 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 *rproc)
>  
>  static int imx_rproc_psci_detect_mode(struct rproc *rproc)
>  {
> -	rproc->state = RPROC_OFFLINE;
> +	struct imx_rproc *priv = rproc->priv;
> +	unsigned int cpu;
> +	int cpu_aff;
> +
> +	rproc->state = RPROC_DETACHED;
> +	for_each_cpu(cpu, &priv->cpus) {
> +		cpu_aff = psci_ops.affinity_info(cpu_logical_map(cpu), 0);

Because CONFIG_IMX_REMOTEPROC can be built as a module, will referencing
psci_ops and cpu_logical_map() cause undefined reference errors during
modpost? Neither symbol appears to be exported to loadable modules.

Can psci_ops.affinity_info be NULL if the system runs an older PSCI version
like v0.1? Should we verify if psci_ops.affinity_info is populated before
dereferencing it to avoid a panic?

> +		if (cpu_aff == PSCI_0_2_AFFINITY_LEVEL_OFF) {

The affinity_info callback can return negative values for errors, such as
PSCI_RET_NOT_SUPPORTED, or 2 for PENDING. Does this logic safely handle
those cases, or will it bypass this check and inadvertently leave the state
as RPROC_DETACHED if the CPU is not online in Linux?

> +			rproc->state = RPROC_OFFLINE;
> +			break;
> +		}
> +
> +		/* in psci on state but running Linux */
> +		if (cpu_online(cpu)) {
> +			rproc->state = RPROC_OFFLINE;
> +			break;
> +		}

If there is a multi-core cluster where CPU 0 is ON and running the remote
OS, but CPU 1 is OFF, this loop will evaluate CPU 1, set the state to
RPROC_OFFLINE, and break. Will this cause the remoteproc framework to
incorrectly attempt to boot the primary core while it is already actively
running?

> +	}
>  
>  	return 0;
>  }

[ ... ]

> @@ -1391,7 +1408,6 @@ static int imx_rproc_probe(struct platform_device *pdev)
>  		bitmap_copy(cpumask_bits(&priv->cpus), &cpus_bits,
>  				min((unsigned int)nr_cpumask_bits,
>  				    (unsigned int)sizeof(unsigned long)));
> -		rproc->auto_boot = false;
>  	}

If the device tree property fsl,cpus-bits is missing because the bindings
specify fsl,cpus-mask instead, the cpus mask will be cleared. With an empty
mask, the detection loop is bypassed, leaving the state as RPROC_DETACHED.
Will removing rproc->auto_boot = false here cause the framework to attempt
an attach on a remoteproc instance with no assigned CPUs?

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260511023928.39640-1-Jiafei.Pan@nxp.com?part=3

  reply	other threads:[~2026-05-12  0:00 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-05-11  2:39 [PATCH v3 0/4] remoteproc: add Cortex-A Core remoteproc support on i.MX platforms Jiafei Pan
2026-05-11  2:39 ` [PATCH v3 1/4] dt-bindings: remoteproc: add imx-rproc-psci Jiafei Pan
2026-05-11 22:41   ` sashiko-bot
2026-05-11  2:39 ` [PATCH v3 2/4] remoteproc: imx_rproc: add support for Cortex-A Core Jiafei Pan
2026-05-11 23:10   ` sashiko-bot
2026-05-11  2:39 ` [PATCH v3 3/4] remoteproc: imx_rproc: add autoboot support for A-core Jiafei Pan
2026-05-12  0:00   ` sashiko-bot [this message]
2026-05-11  2:39 ` [PATCH v3 4/4] arm64: dts: imx93: Cortex-A Core remoteproc device node Jiafei Pan
2026-05-12  0:37   ` sashiko-bot
2026-05-11  7:00 ` [PATCH v3 0/4] remoteproc: add Cortex-A Core remoteproc support on i.MX platforms Peng Fan
2026-05-11 17:10   ` Mathieu Poirier

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260512000014.1941DC2BCB0@smtp.kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=Frank.Li@kernel.org \
    --cc=Jiafei.Pan@nxp.com \
    --cc=conor+dt@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=imx@lists.linux.dev \
    --cc=krzk+dt@kernel.org \
    --cc=robh@kernel.org \
    --cc=sashiko@lists.linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox