From nobody Mon Apr 13 00:44:03 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (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 DB3983822B3 for ; Thu, 9 Apr 2026 08:52:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775724762; cv=none; b=ojSH+vN3bag/6TYjUr8MzJCTmstp+WU+Ta8wVfh4cQDCtrndg1sp9zhiFCiwg1xfpvcFVLOAjq4xh7b1X3dXkPpY5O5ZvtTeV3pfeNss5d5Or0Tj4biGdevr8CYV3+f14ILuhkiRANvx43udwP85i93MoCVgAvmn/8tH3RnQU0Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775724762; c=relaxed/simple; bh=n5I+YFTTdwt/UV0ptVvro8vzeF0ApSpVzs5EPodmpJ4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=hackEKOlgNy35O66vHvAsaKzbgKkXJ61gjouiFtCV3ziVi3f/KmBSSYtIx9l3YaJOov/6yy4r2yeztc19CKArQP8WLddZUMKDxZy4mlEEhVKBPONaUXzufjzafMcsl7wlQ9JJ3setMCYkNxHmRHZD+IqOc8k2xx1sG6kW7D/Wso= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=Bundnklb; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=Sf1X+vJ1; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="Bundnklb"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="Sf1X+vJ1" Received: from pps.filterd (m0279867.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6393MjLL3326658 for ; Thu, 9 Apr 2026 08:52:39 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= cEyXWQODeyHRBWFxwzlb1StMfjWkaPL8DcyHjmYesxY=; b=BundnklbLeWdFiyW aQ1Y7MF3iKrLL9DYXlPC3rdiwtVSc0h/ymREWTbyRzd4J5bWmRRvJsNByKf67CRO oPwXMB6oCLg0VrlGGdwQb+jYSb4xWbE4uecugu0csHYmB4ey+qGH4SIKlf0834sn g4R+zr4fSdsehLs2t7j19BBkCpV4H1aQvjFk4CXoJmFoNOCMrqz1GEer7j1vD+Gm mbBiRTiSspCdqVIWyvfKtkpEg/LWeHRZjJ/DFKUcABCK39r9avk5zRzuo978IGzv aXv8UTPGaUnIZpLOoLHovK9ZnwW/oTK6pRHamV/zrki2Neo1/Cg0Xiin4HC4h9U7 G7uMDw== Received: from mail-dy1-f198.google.com (mail-dy1-f198.google.com [74.125.82.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4ddw9mtccv-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 09 Apr 2026 08:52:38 +0000 (GMT) Received: by mail-dy1-f198.google.com with SMTP id 5a478bee46e88-2c4cfe08c9dso1967524eec.1 for ; Thu, 09 Apr 2026 01:52:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1775724758; x=1776329558; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=cEyXWQODeyHRBWFxwzlb1StMfjWkaPL8DcyHjmYesxY=; b=Sf1X+vJ1Z8qGEus06XEEmF0PvBNV3yCQz5OCOIl8SVWtrY15tu+x6eiJDZTXl2yjAq igILRLQU2bNrNe2QK6ni6Bf1hAgb96nBaX8h5FKavDplLR6UOSwSKrTJ4bOIwJpJYafP Hn7nt9FgtCyhIefFtYGycge2cke2Gu9wFPUlJLuAJWLes2UMPcSAUWdWB/38v+Le83R0 C2y9TVAVQWhGn1qfbvo9E+4T/+dwiOewa2YiKH+NXdlGLQSvTvCSZ2GiUr7qLnFzvjMl pEcVolleCG4OKC/vya5TqV6c4W5yTgRVPQYvMvlt5CYzxxOMIuzAXZ0mmkY6aWB1UyL1 FJng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775724758; x=1776329558; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=cEyXWQODeyHRBWFxwzlb1StMfjWkaPL8DcyHjmYesxY=; b=N2Dmqcn2IaWVcNn6cdXEozWlPqXRwU58Y2Le0Z8IFLRln5dg3l+/s1wHqHRJ/d6mFJ QPaJlYuJMQV+9tuyXB4WMRTE9mbMKywTTOe7bO6YHZxRjB/VNpqZO6wElBRy3rJXljdO ODprMAHjGIrDMegclAMvZ1zJXBDnoBK5GIVuZMJPkU2CJvddLHZH0ZtDMqR7ME/wXqMV jwZSTbmZ8u9Ao3UWNoBdII9WZ1NyV1DRc0LONuRTFQirzxNufpnSHcb32quwPwPY/pLz nXY8tRheVNLattui3Z6Clgtpwfv0Rhu/yfnAFHewA27u8ctqkeaYsh8h38s2OGhdmOZK GHig== X-Forwarded-Encrypted: i=1; AJvYcCWWTxJ8cxD9RDwT6wek7XIxvGvvHckDq4pxoOTuyNbMohtlKe4oORhVUBdPX2tpNCRCwxBBY1StrJP9rAs=@vger.kernel.org X-Gm-Message-State: AOJu0YwwrMxQQMcI/+3Hn10UIkd1B4etfcFgrajczMdfwk7ui6l3ky7I LzGG5yf9SjvDYJegmTx7vYsDE4yHBs7Td86ebnlGeHlP7v5fwl+0EtKJ7GwpdyPhzSZCNAecdVH r6uunNSDJJ/oUVv3pSUU4kENjOlJgBRFeYPt+wy6vcuJZ0ZvSpjN2G8tMDAln9E/ZbBA= X-Gm-Gg: AeBDievui8epFI4MgtLTjTXem8k8xNnzmWsUkxcm79dcBJ4gQc7uMCBQPAlub2x2D3W kAtsPYVk4wwB0dGX5Zj8FK2angURrYW281Wmd1bEmQvQQ47IwBhGMzPmw2WZ1XiTO3Q4tDf+ctU Mw1gKg0DgFZuxRA8ZBevvI5qM76ceFF8QDOqFwKOnCsSkdAFuipY7mLrJucBtD383q3RU7zXHGr U1rXNWuur0rdT4q185b0OpWCNR9AjN4LXtaIiRydAvzfwwLhb3nloBikI7ZIl211VP3cFBcKLxL F2Rk8BFkZjZ5fQnICQGpmYjyjSCuDm7m/HM7MmfBRTLUq2GlAoAiuP//qR6CQGXQZWLk6oex4Nd KJTH1otjiCQV6xZKZja0j6R2aiv7fcW9GWFV2nxZsyxIqmrP1la2Dpd6bD25Ejj8TgzMBcbbW X-Received: by 2002:a05:7300:bc0c:b0:2c5:b23e:48a9 with SMTP id 5a478bee46e88-2d40e2f0792mr1466105eec.25.1775724758243; Thu, 09 Apr 2026 01:52:38 -0700 (PDT) X-Received: by 2002:a05:7300:bc0c:b0:2c5:b23e:48a9 with SMTP id 5a478bee46e88-2d40e2f0792mr1466086eec.25.1775724757673; Thu, 09 Apr 2026 01:52:37 -0700 (PDT) Received: from hu-jingyw-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2d460c8e9a5sm2312889eec.17.2026.04.09.01.52.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 09 Apr 2026 01:52:36 -0700 (PDT) From: Jingyi Wang Date: Thu, 09 Apr 2026 01:52:27 -0700 Subject: [PATCH v5 4/5] remoteproc: qcom: pas: Add late attach support for subsystems Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260409-knp-soccp-v5-4-805a492124da@oss.qualcomm.com> References: <20260409-knp-soccp-v5-0-805a492124da@oss.qualcomm.com> In-Reply-To: <20260409-knp-soccp-v5-0-805a492124da@oss.qualcomm.com> To: Bjorn Andersson , Mathieu Poirier , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Manivannan Sadhasivam , Luca Weiss , Bartosz Golaszewski , Konrad Dybcio Cc: 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, Jingyi Wang , Gokul Krishna Krishnakumar X-Mailer: b4 0.15-dev-3d134 X-Developer-Signature: v=1; a=ed25519-sha256; t=1775724750; l=8178; i=jingyi.wang@oss.qualcomm.com; s=20250911; h=from:subject:message-id; bh=n5I+YFTTdwt/UV0ptVvro8vzeF0ApSpVzs5EPodmpJ4=; b=s4oZvhS6UrcdwCI13t0Uo2kOakJBA6Pyuuj3XYIkx9dKKCTDyGlfNWSyuoWTS5UWWDGJtCysI HcbVy8R3kimCyFn4/5z2z3BXVDq0nAKfdPqqZeUpFHjlbMOwiMFuuwI X-Developer-Key: i=jingyi.wang@oss.qualcomm.com; a=ed25519; pk=PSoHZ6KbUss3IW8FPRVMHMK0Jkkr/jV347mBYJO3iLo= X-Authority-Analysis: v=2.4 cv=cfPiaHDM c=1 sm=1 tr=0 ts=69d768d7 cx=c_pps a=wEP8DlPgTf/vqF+yE6f9lg==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=eoimf2acIAo5FJnRuUoq:22 a=EUspDBNiAAAA:8 a=bg9ZlOV0f5yciO4fbPwA:9 a=QEXdDO2ut3YA:10 a=bBxd6f-gb0O0v-kibOvt:22 X-Proofpoint-ORIG-GUID: hYUxkaCVaPcvKRe7FxPEgR88jSUjIv35 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDA5MDA3NyBTYWx0ZWRfX/b5KF1TTpgS5 qviqCtxS95CHDLoUxwwyHm9fn5mGwDXCajD1oFxZfpUc9JbKaX0y7HfrOQ1KnM0aXbPJkAvQbpk s1S5QLjdbB0gD3EwKHK2wxRo3QBdTb71AO7TnOOOg/IMBLD3FiodzH5wpTF+w7gMdy3u8tsvIxF xBNOF8Dtj4CuQb175idHas0Zt8XnM1vRg3h+rfUvpjcyi5b8loY2VgfGJa5kk7IDocCruVK9Av7 VQ3So9fOlg+ctvP+8vn8WDHkpOgqE+iv67s3kgstvSHMoAnLZvPdrIgSuPqzQGQiNjQIW9N6Bu2 d5qUspO+fFVZjvkzvexirM+97KwDCpgFSqcDavjeZ2O94NTIqc7ITeRbabHnHKmXR8g7LfdFcPc Ih9DjdR5dPtgGWJ0IkPgWLJGXeO2ukZhnYWC2gXjfX92CaMmTrmJwRCceZPJRk/2HCOtEg93n/o wUZCQLcDLVsTfh1y8fA== X-Proofpoint-GUID: hYUxkaCVaPcvKRe7FxPEgR88jSUjIv35 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-04-09_02,2026-04-08_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 suspectscore=0 clxscore=1015 lowpriorityscore=0 malwarescore=0 spamscore=0 bulkscore=0 adultscore=0 impostorscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604010000 definitions=main-2604090077 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 and the ping is successful, it will be marked as "attached". If ready irq is not received, 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. Co-developed-by: Gokul Krishna Krishnakumar Signed-off-by: Gokul Krishna Krishnakumar Signed-off-by: Jingyi Wang --- drivers/remoteproc/qcom_q6v5.c | 69 ++++++++++++++++++++++++++++++++ drivers/remoteproc/qcom_q6v5.h | 6 +++ drivers/remoteproc/qcom_q6v5_pas.c | 80 ++++++++++++++++++++++++++++++++++= ++-- 3 files changed, 152 insertions(+), 3 deletions(-) diff --git a/drivers/remoteproc/qcom_q6v5.c b/drivers/remoteproc/qcom_q6v5.c index 58d5b85e58cd..52247c17c38a 100644 --- a/drivers/remoteproc/qcom_q6v5.c +++ b/drivers/remoteproc/qcom_q6v5.c @@ -20,6 +20,7 @@ =20 #define Q6V5_LOAD_STATE_MSG_LEN 64 #define Q6V5_PANIC_DELAY_MS 200 +#define Q6V5_PING_TIMEOUT_MS 500 =20 static int q6v5_load_state_toggle(struct qcom_q6v5 *q6v5, bool enable) { @@ -234,6 +235,74 @@ unsigned long qcom_q6v5_panic(struct qcom_q6v5 *q6v5) } EXPORT_SYMBOL_GPL(qcom_q6v5_panic); =20 +static irqreturn_t q6v5_pong_interrupt(int irq, void *data) +{ + struct qcom_q6v5 *q6v5 =3D data; + + complete(&q6v5->ping_done); + + return IRQ_HANDLED; +} + +int qcom_q6v5_ping_subsystem(struct qcom_q6v5 *q6v5) +{ + int ret; + int ping_failed =3D 0; + + reinit_completion(&q6v5->ping_done); + + /* Set master kernel Ping bit */ + ret =3D qcom_smem_state_update_bits(q6v5->ping_state, + BIT(q6v5->ping_bit), BIT(q6v5->ping_bit)); + if (ret) { + dev_err(q6v5->dev, "Failed to update ping bits\n"); + return ret; + } + + ret =3D wait_for_completion_timeout(&q6v5->ping_done, msecs_to_jiffies(Q6= V5_PING_TIMEOUT_MS)); + if (!ret) { + ping_failed =3D -ETIMEDOUT; + dev_err(q6v5->dev, "Failed to get back pong\n"); + } + + /* Clear ping bit master kernel */ + ret =3D qcom_smem_state_update_bits(q6v5->ping_state, BIT(q6v5->ping_bit)= , 0); + if (ret) { + dev_err(q6v5->dev, "Failed to clear master kernel bits\n"); + return ret; + } + + return ping_failed; +} +EXPORT_SYMBOL_GPL(qcom_q6v5_ping_subsystem); + +int qcom_q6v5_ping_subsystem_init(struct qcom_q6v5 *q6v5, struct platform_= device *pdev) +{ + int ret =3D -ENODEV; + + q6v5->ping_state =3D devm_qcom_smem_state_get(&pdev->dev, "ping", &q6v5->= ping_bit); + if (IS_ERR(q6v5->ping_state)) { + dev_err(&pdev->dev, "Failed to acquire smem state %ld\n", + PTR_ERR(q6v5->ping_state)); + return PTR_ERR(q6v5->ping_state); + } + + init_completion(&q6v5->ping_done); + + q6v5->pong_irq =3D platform_get_irq_byname(pdev, "pong"); + if (q6v5->pong_irq < 0) + return q6v5->pong_irq; + + ret =3D devm_request_threaded_irq(&pdev->dev, q6v5->pong_irq, NULL, + q6v5_pong_interrupt, IRQF_TRIGGER_RISING | IRQF_ONESHOT, + "q6v5 pong", q6v5); + if (ret) + dev_err(&pdev->dev, "Failed to acquire pong IRQ\n"); + + return ret; +} +EXPORT_SYMBOL_GPL(qcom_q6v5_ping_subsystem_init); + /** * qcom_q6v5_init() - initializer of the q6v5 common struct * @q6v5: handle to be initialized diff --git a/drivers/remoteproc/qcom_q6v5.h b/drivers/remoteproc/qcom_q6v5.h index 5a859c41896e..5025ffc4dbe8 100644 --- a/drivers/remoteproc/qcom_q6v5.h +++ b/drivers/remoteproc/qcom_q6v5.h @@ -17,22 +17,26 @@ struct qcom_q6v5 { struct rproc *rproc; =20 struct qcom_smem_state *state; + struct qcom_smem_state *ping_state; struct qmp *qmp; =20 struct icc_path *path; =20 unsigned stop_bit; + unsigned int ping_bit; =20 int wdog_irq; int fatal_irq; int ready_irq; int handover_irq; int stop_irq; + int pong_irq; =20 bool handover_issued; =20 struct completion start_done; struct completion stop_done; + struct completion ping_done; =20 int crash_reason; =20 @@ -52,5 +56,7 @@ int qcom_q6v5_unprepare(struct qcom_q6v5 *q6v5); int qcom_q6v5_request_stop(struct qcom_q6v5 *q6v5, struct qcom_sysmon *sys= mon); int qcom_q6v5_wait_for_start(struct qcom_q6v5 *q6v5, int timeout); unsigned long qcom_q6v5_panic(struct qcom_q6v5 *q6v5); +int qcom_q6v5_ping_subsystem(struct qcom_q6v5 *q6v5); +int qcom_q6v5_ping_subsystem_init(struct qcom_q6v5 *q6v5, struct platform_= device *pdev); =20 #endif diff --git a/drivers/remoteproc/qcom_q6v5_pas.c b/drivers/remoteproc/qcom_q= 6v5_pas.c index da27d1d3c9da..34b54cf832d0 100644 --- a/drivers/remoteproc/qcom_q6v5_pas.c +++ b/drivers/remoteproc/qcom_q6v5_pas.c @@ -60,6 +60,7 @@ struct qcom_pas_data { int region_assign_count; bool region_assign_shared; int region_assign_vmid; + bool early_boot; }; =20 struct qcom_pas { @@ -423,9 +424,15 @@ static int qcom_pas_stop(struct rproc *rproc) =20 qcom_pas_unmap_carveout(rproc, pas->mem_phys, pas->mem_size); =20 - handover =3D qcom_q6v5_unprepare(&pas->q6v5); - if (handover) - qcom_pas_handover(&pas->q6v5); + /* + * qcom_q6v5_prepare is not called in qcom_pas_attach, skip unprepare to + * avoid mismatch. + */ + if (pas->rproc->state !=3D RPROC_ATTACHED) { + handover =3D qcom_q6v5_unprepare(&pas->q6v5); + if (handover) + qcom_pas_handover(&pas->q6v5); + } =20 if (pas->smem_host_id) ret =3D qcom_smem_bust_hwspin_lock_by_host(pas->smem_host_id); @@ -510,6 +517,63 @@ static unsigned long qcom_pas_panic(struct rproc *rpro= c) return qcom_q6v5_panic(&pas->q6v5); } =20 +static int qcom_pas_attach(struct rproc *rproc) +{ + int ret; + struct qcom_pas *pas =3D rproc->priv; + bool ready_state; + bool crash_state; + + pas->q6v5.running =3D true; + ret =3D 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, "Subsystem has crashed before driver probe\n"); + rproc_report_crash(rproc, RPROC_FATAL_ERROR); + ret =3D -EINVAL; + goto disable_running; + } + + ret =3D irq_get_irqchip_state(pas->q6v5.ready_irq, + IRQCHIP_STATE_LINE_LEVEL, &ready_state); + + if (ret) + goto disable_running; + + if (unlikely(!ready_state)) { + /* + * The bootloader may not support early boot, mark the state as + * RPROC_OFFLINE so that the PAS driver can load the firmware and + * start the remoteproc. + */ + dev_err(pas->dev, "Failed to get subsystem ready interrupt\n"); + pas->rproc->state =3D RPROC_OFFLINE; + ret =3D -EINVAL; + goto disable_running; + } + + ret =3D qcom_q6v5_ping_subsystem(&pas->q6v5); + + if (ret) { + dev_err(pas->dev, "Failed to ping subsystem, assuming device crashed\n"); + rproc_report_crash(rproc, RPROC_FATAL_ERROR); + goto disable_running; + } + + pas->q6v5.handover_issued =3D true; + + return 0; + +disable_running: + pas->q6v5.running =3D false; + + return ret; +} + static const struct rproc_ops qcom_pas_ops =3D { .unprepare =3D qcom_pas_unprepare, .start =3D qcom_pas_start, @@ -518,6 +582,7 @@ static const struct rproc_ops qcom_pas_ops =3D { .parse_fw =3D qcom_pas_parse_firmware, .load =3D qcom_pas_load, .panic =3D qcom_pas_panic, + .attach =3D qcom_pas_attach, }; =20 static const struct rproc_ops qcom_pas_minidump_ops =3D { @@ -855,6 +920,15 @@ static int qcom_pas_probe(struct platform_device *pdev) =20 pas->pas_ctx->use_tzmem =3D rproc->has_iommu; pas->dtb_pas_ctx->use_tzmem =3D rproc->has_iommu; + + if (desc->early_boot) { + ret =3D qcom_q6v5_ping_subsystem_init(&pas->q6v5, pdev); + if (ret) + dev_warn(&pdev->dev, "Falling back to firmware load\n"); + else + pas->rproc->state =3D RPROC_DETACHED; + } + ret =3D rproc_add(rproc); if (ret) goto remove_ssr_sysmon; --=20 2.34.1