From: Stephan Gerhold <stephan.gerhold@linaro.org>
To: Jingyi Wang <jingyi.wang@oss.qualcomm.com>
Cc: Bjorn Andersson <andersson@kernel.org>,
Mathieu Poirier <mathieu.poirier@linaro.org>,
Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Manivannan Sadhasivam <mani@kernel.org>,
aiqun.yu@oss.qualcomm.com, tingwei.zhang@oss.qualcomm.com,
trilok.soni@oss.qualcomm.com, yijie.yang@oss.qualcomm.com,
linux-arm-msm@vger.kernel.org, linux-remoteproc@vger.kernel.org,
devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
Gokul krishna Krishnakumar <gokul.krishnakumar@oss.qualcomm.com>
Subject: Re: [PATCH v3 4/5] remoteproc: qcom: pas: Add late attach support for subsystems
Date: Tue, 23 Dec 2025 23:15:33 +0100 [thread overview]
Message-ID: <aUsUhX8Km275qonq@linaro.org> (raw)
In-Reply-To: <20251223-knp-remoteproc-v3-4-5b09885c55a5@oss.qualcomm.com>
On Tue, Dec 23, 2025 at 01:13:50AM -0800, Jingyi Wang wrote:
> From: Gokul krishna Krishnakumar <gokul.krishnakumar@oss.qualcomm.com>
>
> Subsystems can be brought out of reset by entities such as bootloaders.
> As the irq enablement could be later than subsystem bring up, the state
> of subsystem should be checked by reading SMP2P bits and performing ping
> test.
>
> A new qcom_pas_attach() function is introduced. if a crash state is
> detected for the subsystem, rproc_report_crash() is called. If the
> subsystem is ready either at the first check or within a 5-second timeout
> and the ping is successful, it will be marked as "attached". The ready
> state could be set by either ready interrupt or handover interrupt.
>
> If "early_boot" is set by kernel but "subsys_booted" is not completed
> within the timeout, It could be the early boot feature is not supported
> by other entities. In this case, the state will be marked as RPROC_OFFLINE
> so that the PAS driver can load the firmware and start the remoteproc. As
> the running state is set once attach function is called, the watchdog or
> fatal interrupt received can be handled correctly.
>
> Signed-off-by: Gokul krishna Krishnakumar <gokul.krishnakumar@oss.qualcomm.com>
> Co-developed-by: Jingyi Wang <jingyi.wang@oss.qualcomm.com>
> Signed-off-by: Jingyi Wang <jingyi.wang@oss.qualcomm.com>
> ---
> drivers/remoteproc/qcom_q6v5.c | 87 ++++++++++++++++++++++++++++++++-
> drivers/remoteproc/qcom_q6v5.h | 11 ++++-
> drivers/remoteproc/qcom_q6v5_adsp.c | 2 +-
> drivers/remoteproc/qcom_q6v5_mss.c | 2 +-
> drivers/remoteproc/qcom_q6v5_pas.c | 97 ++++++++++++++++++++++++++++++++++++-
> drivers/remoteproc/qcom_q6v5_wcss.c | 2 +-
> 6 files changed, 195 insertions(+), 6 deletions(-)
>
> [...]
> diff --git a/drivers/remoteproc/qcom_q6v5_pas.c b/drivers/remoteproc/qcom_q6v5_pas.c
> index 52680ac99589..7e890e18dd82 100644
> --- a/drivers/remoteproc/qcom_q6v5_pas.c
> +++ b/drivers/remoteproc/qcom_q6v5_pas.c
> [...]
> @@ -434,6 +440,85 @@ static unsigned long qcom_pas_panic(struct rproc *rproc)
> return qcom_q6v5_panic(&pas->q6v5);
> }
>
> +static int qcom_pas_attach(struct rproc *rproc)
> +{
> + int ret;
> + struct qcom_pas *pas = rproc->priv;
> + bool ready_state;
> + bool crash_state;
> +
> + pas->q6v5.running = true;
> + ret = irq_get_irqchip_state(pas->q6v5.fatal_irq,
> + IRQCHIP_STATE_LINE_LEVEL, &crash_state);
> +
> + if (ret)
> + goto disable_running;
> +
> + if (crash_state) {
> + dev_err(pas->dev, "Sub system has crashed before driver probe\n");
> + rproc_report_crash(rproc, RPROC_FATAL_ERROR);
Have you tested this case? From quick review of the code in
remoteproc_core.c I'm skeptical if this will work correctly:
1. Remoteproc is in RPROC_DETACHED state during auto boot
2. qcom_pas_attach() runs and calls rproc_report_crash(), then fails so
RPROC_DETACHED state remains
3. rproc_crash_handler_work() sets RPROC_CRASHED and starts recovery
4. rproc_boot_recovery() calls rproc_stop()
5. rproc_stop() calls rproc_stop_subdevices(), but because the
remoteproc was never attached, the subdevices were never started.
In this situation, rproc_stop_subdevices() should not be called. I would
expect you will need to make some minor changes to the remoteproc_core
to support handling crashes during RPROC_DETACHED state.
I might be reading the code wrong, but please make sure that you
simulate this case at runtime and check that it works correctly.
> + ret = -EINVAL;
> + goto disable_running;
> + }
> +
> + ret = irq_get_irqchip_state(pas->q6v5.ready_irq,
> + IRQCHIP_STATE_LINE_LEVEL, &ready_state);
> +
> + if (ret)
> + goto disable_running;
> +
> + enable_irq(pas->q6v5.handover_irq);
> +
> + if (unlikely(!ready_state)) {
> + /* Set a 5 seconds timeout in case the early boot is delayed */
> + ret = wait_for_completion_timeout(&pas->q6v5.subsys_booted,
> + msecs_to_jiffies(EARLY_ATTACH_TIMEOUT_MS));
> +
Again, have you tested this case?
As I already wrote in v2, I don't see how this case will work reliably
in practice. How do you ensure that the handover resources will be kept
on during the Linux boot process until the remoteproc has completed
booting?
Also, above you enable the handover_irq. Let's assume a handover IRQ
does come in while you are waiting here. Then q6v5_handover_interrupt()
will call q6v5->handover(q6v5); to disable the handover resources
(clocks, power domains), but you never enabled those. I would expect
that you get some bad reference count warnings in the kernel log.
I would still suggest dropping this code entirely. As far as I
understand the response from Aiqun(Maria) Yu [1], there is no real use
case for this on current platforms. If you want to keep this, you would
need to vote for the handover resources during probe() (and perhaps
more, this case is quite tricky).
Please test all your changes carefully in v4.
Thanks,
Stephan
[1]: https://lore.kernel.org/linux-arm-msm/c15f083d-a2c1-462a-aad4-a72b36fbe1ac@oss.qualcomm.com/
next prev parent reply other threads:[~2025-12-23 22:16 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-12-23 9:13 [PATCH v3 0/5] Add initial remoteproc support for Kaanapali SoC Jingyi Wang
2025-12-23 9:13 ` [PATCH v3 1/5] dt-bindings: remoteproc: qcom,sm8550-pas: Add Kaanapali ADSP Jingyi Wang
2025-12-23 13:02 ` Krzysztof Kozlowski
2025-12-23 9:13 ` [PATCH v3 2/5] dt-bindings: remoteproc: qcom,sm8550-pas: Add Kaanapali CDSP Jingyi Wang
2025-12-23 13:07 ` Krzysztof Kozlowski
2025-12-24 2:44 ` Jingyi Wang
2025-12-23 9:13 ` [PATCH v3 3/5] dt-bindings: remoteproc: qcom,pas: Document pas for SoCCP on Kaanapali and Glymur platforms Jingyi Wang
2025-12-23 13:29 ` Krzysztof Kozlowski
2025-12-24 3:16 ` Jingyi Wang
2025-12-24 8:34 ` Krzysztof Kozlowski
2026-02-13 1:22 ` Shawn Guo
2026-02-26 17:12 ` Krzysztof Kozlowski
2026-02-27 5:52 ` Jingyi Wang
2026-02-27 7:35 ` Krzysztof Kozlowski
2025-12-23 9:13 ` [PATCH v3 4/5] remoteproc: qcom: pas: Add late attach support for subsystems Jingyi Wang
2025-12-23 20:15 ` Dmitry Baryshkov
2025-12-24 3:20 ` Jingyi Wang
2025-12-23 22:15 ` Stephan Gerhold [this message]
2025-12-24 4:43 ` Jingyi Wang
2025-12-26 2:10 ` kernel test robot
2025-12-23 9:13 ` [PATCH v3 5/5] remoteproc: qcom_q6v5_pas: Add SoCCP node on Kaanapali Jingyi Wang
2025-12-23 20:15 ` Dmitry Baryshkov
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=aUsUhX8Km275qonq@linaro.org \
--to=stephan.gerhold@linaro.org \
--cc=aiqun.yu@oss.qualcomm.com \
--cc=andersson@kernel.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=gokul.krishnakumar@oss.qualcomm.com \
--cc=jingyi.wang@oss.qualcomm.com \
--cc=krzk+dt@kernel.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-remoteproc@vger.kernel.org \
--cc=mani@kernel.org \
--cc=mathieu.poirier@linaro.org \
--cc=robh@kernel.org \
--cc=tingwei.zhang@oss.qualcomm.com \
--cc=trilok.soni@oss.qualcomm.com \
--cc=yijie.yang@oss.qualcomm.com \
/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