From: Jingyi Wang <jingyi.wang@oss.qualcomm.com>
To: Stephan Gerhold <stephan.gerhold@linaro.org>
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: Wed, 24 Dec 2025 12:43:20 +0800 [thread overview]
Message-ID: <51e0665b-42c4-4084-8019-9fbeaefb5b56@oss.qualcomm.com> (raw)
In-Reply-To: <aUsUhX8Km275qonq@linaro.org>
On 12/24/2025 6:15 AM, Stephan Gerhold wrote:
> 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.
>
Recheked this part, current path has some issue on recovery and subdev handling.
As in current code, rproc_report_crash is called in the ISR/callback, it may
take some effort to call it in this attach path.
>> + 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 for your detailed review, the handover resources was indeed
neglected in the design, we will re-evaluate this part.
> Thanks,
> Stephan
>
> [1]: https://lore.kernel.org/linux-arm-msm/c15f083d-a2c1-462a-aad4-a72b36fbe1ac@oss.qualcomm.com/
Thanks,
Jingyi
next prev parent reply other threads:[~2025-12-24 4:43 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
2025-12-24 4:43 ` Jingyi Wang [this message]
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=51e0665b-42c4-4084-8019-9fbeaefb5b56@oss.qualcomm.com \
--to=jingyi.wang@oss.qualcomm.com \
--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=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=stephan.gerhold@linaro.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
all inboxes | Powered by JetHome®