From patchwork Mon Dec 24 08:48:21 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sibi Sankar X-Patchwork-Id: 10742083 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 9A98C13B5 for ; Mon, 24 Dec 2018 08:48:46 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8B84E28A6C for ; Mon, 24 Dec 2018 08:48:46 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 7C87C28A78; Mon, 24 Dec 2018 08:48:46 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.7 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 214FB28A6C for ; Mon, 24 Dec 2018 08:48:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726921AbeLXIsm (ORCPT ); Mon, 24 Dec 2018 03:48:42 -0500 Received: from smtp.codeaurora.org ([198.145.29.96]:46202 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726788AbeLXIsl (ORCPT ); Mon, 24 Dec 2018 03:48:41 -0500 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id 85AE260886; Mon, 24 Dec 2018 08:48:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1545641320; bh=9t4FcJHoGeLux1wcE2KSJyUAMTw54pPzt1XzUlGAn+U=; h=From:To:Cc:Subject:Date:From; b=OCMmq1UacNe158nUrniVmLZxEtIyHrwXfSj9v+PgX/x/1XWKzUGZK6J28r21q9Wkq ECaBp+AINgVhwVAY3gflJOimBpdC8lzf8tym/+UziMHnoobp9+ygptWIGgg8DXKFlR KL5Sh8eDR46ouEFetMGqz2iK2cA+dod/KfNB9ePU= Received: from blr-ubuntu-87.qualcomm.com (blr-bdr-fw-01_globalnat_allzones-outside.qualcomm.com [103.229.18.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: sibis@smtp.codeaurora.org) by smtp.codeaurora.org (Postfix) with ESMTPSA id E012B60722; Mon, 24 Dec 2018 08:48:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1545641319; bh=9t4FcJHoGeLux1wcE2KSJyUAMTw54pPzt1XzUlGAn+U=; h=From:To:Cc:Subject:Date:From; b=kcX48I3CyWSISaOL+QLE32Emzrto+GQflj7gNvcEFFukHeWAPI5c63J/SAi8jpWNW n+WenVKo8GisFSr5HV44x8HVI2JcVmOf1Wq7hDHGQlbWk2EURvl4SS27re6RbA4o1i 0o8SZLLwd/NLJExg2IQHF5obiskKTBWysa9pw+EU= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org E012B60722 Authentication-Results: pdx-caf-mail.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: pdx-caf-mail.web.codeaurora.org; spf=none smtp.mailfrom=sibis@codeaurora.org From: Sibi Sankar To: bjorn.andersson@linaro.org, robh+dt@kernel.org, andy.gross@linaro.org, david.brown@linaro.org Cc: linux-arm-msm@vger.kernel.org, linux-soc@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, tsoni@codeaurora.org, clew@codeaurora.org, akdwived@codeaurora.org, ohad@wizery.com, mark.rutland@arm.com, linux-remoteproc@vger.kernel.org, dianders@chromium.org, Sibi Sankar Subject: [PATCH v2 1/4] dt-bindings: remoteproc: qcom: Introduce shutdown-ack irq for Q6V5 Date: Mon, 24 Dec 2018 14:18:21 +0530 Message-Id: <20181224084824.25193-1-sibis@codeaurora.org> X-Mailer: git-send-email 2.19.1 MIME-Version: 1.0 Sender: linux-remoteproc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-remoteproc@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Introduce shutdown-irq binding required for sysmon shutdown for Q6V5 MSS on SDM845/MSM8996 SoCs and for WCSS Q6V5 on QCS404 SoC. Signed-off-by: Sibi Sankar Reviewed-by: Rob Herring --- v2: Make shutdown-ack mandatory for MSS on SDM845/MSM8996 and for WCSS on QCS404 (Dropping Rob's reviewed-by due to this) .../bindings/remoteproc/qcom,adsp.txt | 17 ++++++++++++++--- .../bindings/remoteproc/qcom,q6v5.txt | 15 ++++++++++++--- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/Documentation/devicetree/bindings/remoteproc/qcom,adsp.txt b/Documentation/devicetree/bindings/remoteproc/qcom,adsp.txt index 9c0cff3a5ed8..50df9936763b 100644 --- a/Documentation/devicetree/bindings/remoteproc/qcom,adsp.txt +++ b/Documentation/devicetree/bindings/remoteproc/qcom,adsp.txt @@ -19,13 +19,24 @@ on the Qualcomm ADSP Hexagon core. - interrupts-extended: Usage: required Value type: - Definition: must list the watchdog, fatal IRQs ready, handover and - stop-ack IRQs + Definition: reference to the interrupts that match interrupt-names - interrupt-names: Usage: required Value type: - Definition: must be "wdog", "fatal", "ready", "handover", "stop-ack" + Definition: The interrupts needed depends on the compatible + string: + qcom,msm8974-adsp-pil: + qcom,msm8996-adsp-pil: + qcom,msm8996-slpi-pil: + qcom,qcs404-adsp-pas: + qcom,qcs404-cdsp-pas: + qcom,sdm845-adsp-pas: + qcom,sdm845-cdsp-pas: + must be "wdog", "fatal", "ready", "handover", "stop-ack" + qcom,qcs404-wcss-pas: + must be "wdog", "fatal", "ready", "handover", "stop-ack", + "shutdown-ack" - clocks: Usage: required diff --git a/Documentation/devicetree/bindings/remoteproc/qcom,q6v5.txt b/Documentation/devicetree/bindings/remoteproc/qcom,q6v5.txt index 5d0b2975387e..cacbdd368fe1 100644 --- a/Documentation/devicetree/bindings/remoteproc/qcom,q6v5.txt +++ b/Documentation/devicetree/bindings/remoteproc/qcom,q6v5.txt @@ -28,13 +28,22 @@ on the Qualcomm Hexagon core. - interrupts-extended: Usage: required Value type: - Definition: must list the watchdog, fatal IRQs ready, handover and - stop-ack IRQs + Definition: reference to the interrupts that match interrupt-names - interrupt-names: Usage: required Value type: - Definition: must be "wdog", "fatal", "ready", "handover", "stop-ack" + Definition: The interrupts needed depends on the the compatible + string: + qcom,q6v5-pil: + qcom,ipq8074-wcss-pil: + qcom,msm8916-mss-pil: + qcom,msm8974-mss-pil: + must be "wdog", "fatal", "ready", "handover", "stop-ack" + qcom,msm8996-mss-pil: + qcom,sdm845-mss-pil: + must be "wdog", "fatal", "ready", "handover", "stop-ack", + "shutdown-ack" - clocks: Usage: required From patchwork Mon Dec 24 08:48:22 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sibi Sankar X-Patchwork-Id: 10742085 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 8D4136C5 for ; Mon, 24 Dec 2018 08:48:51 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 57E4928A6C for ; Mon, 24 Dec 2018 08:48:51 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 4B6C728A7F; Mon, 24 Dec 2018 08:48:51 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.7 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8CB1C28A6C for ; Mon, 24 Dec 2018 08:48:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726940AbeLXIsu (ORCPT ); Mon, 24 Dec 2018 03:48:50 -0500 Received: from smtp.codeaurora.org ([198.145.29.96]:46474 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726788AbeLXIst (ORCPT ); Mon, 24 Dec 2018 03:48:49 -0500 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id EED45608CC; Mon, 24 Dec 2018 08:48:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1545641327; bh=0/pnXypPkAs/a8QKnBM+TOYo61LMcKhE8z48is6hAqo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=i6U4rhHpLTDxNPG7ddRErj2pwYmSeMXJIIVsAtf/j88XI7ocpeMSvnN2qP44hdzwI f65kUWOD/Ml1pUjnEgUamITde6tPdlsbKhIWL2bWtTLwC6A6KQifH88Bp/GFeDTWjl dDHdVjeNHRjOoC3MH1ASLZp627HHkYQc+6aVMNz8= Received: from blr-ubuntu-87.qualcomm.com (blr-bdr-fw-01_globalnat_allzones-outside.qualcomm.com [103.229.18.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: sibis@smtp.codeaurora.org) by smtp.codeaurora.org (Postfix) with ESMTPSA id 05492608CC; Mon, 24 Dec 2018 08:48:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1545641326; bh=0/pnXypPkAs/a8QKnBM+TOYo61LMcKhE8z48is6hAqo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=a4j6+WVk7T/ONpueQm5tT71UpixgrLj18ntsWKkAZ98qVpPyzD375eYrR5R7SHThD LeNcRtqf8q+VhXz2eWO9XKXbTL19ZGKRzH7ahqBZOSAu8Nz2LnaATxQ1Eg9Kbirdfo bK2adwu/KhFUDYYWVHDanmdPlpdDxliISP7kIvZY= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 05492608CC Authentication-Results: pdx-caf-mail.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: pdx-caf-mail.web.codeaurora.org; spf=none smtp.mailfrom=sibis@codeaurora.org From: Sibi Sankar To: bjorn.andersson@linaro.org, robh+dt@kernel.org, andy.gross@linaro.org, david.brown@linaro.org Cc: linux-arm-msm@vger.kernel.org, linux-soc@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, tsoni@codeaurora.org, clew@codeaurora.org, akdwived@codeaurora.org, ohad@wizery.com, mark.rutland@arm.com, linux-remoteproc@vger.kernel.org, dianders@chromium.org, Sibi Sankar Subject: [PATCH v2 2/4] remoteproc: qcom: q6v5: Add shutdown-ack irq Date: Mon, 24 Dec 2018 14:18:22 +0530 Message-Id: <20181224084824.25193-2-sibis@codeaurora.org> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181224084824.25193-1-sibis@codeaurora.org> References: <20181224084824.25193-1-sibis@codeaurora.org> MIME-Version: 1.0 Sender: linux-remoteproc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-remoteproc@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Add shutdown-ack irq handling for Q6V5. This patch includes enabling shutdown-ack irq on those Q6V5 instances with "has_shutdown_irq" flag set and exposing Q6V5 state information to the sysmon instance which is required to ascertain graceful shutdown completion. Signed-off-by: Sibi Sankar --- v2: Move shutdown-irq get to Q6V5 from sysmon to handle -EPROBE_DEFER cases Correct the shutdown-irq wait time to 10 * HZ drivers/remoteproc/qcom_common.h | 7 ++-- drivers/remoteproc/qcom_q6v5.c | 53 +++++++++++++++++++++++++++++ drivers/remoteproc/qcom_q6v5.h | 5 +++ drivers/remoteproc/qcom_q6v5_adsp.c | 3 +- drivers/remoteproc/qcom_q6v5_mss.c | 3 +- drivers/remoteproc/qcom_q6v5_pas.c | 3 +- drivers/remoteproc/qcom_sysmon.c | 6 +++- drivers/remoteproc/qcom_wcnss.c | 3 +- 8 files changed, 76 insertions(+), 7 deletions(-) diff --git a/drivers/remoteproc/qcom_common.h b/drivers/remoteproc/qcom_common.h index 58de71e4781c..d938b09ad02c 100644 --- a/drivers/remoteproc/qcom_common.h +++ b/drivers/remoteproc/qcom_common.h @@ -7,6 +7,7 @@ #include struct qcom_sysmon; +struct qcom_q6v5; struct qcom_rproc_glink { struct rproc_subdev subdev; @@ -45,12 +46,14 @@ void qcom_remove_ssr_subdev(struct rproc *rproc, struct qcom_rproc_ssr *ssr); #if IS_ENABLED(CONFIG_QCOM_SYSMON) struct qcom_sysmon *qcom_add_sysmon_subdev(struct rproc *rproc, const char *name, - int ssctl_instance); + int ssctl_instance, + struct qcom_q6v5 *q6v5); void qcom_remove_sysmon_subdev(struct qcom_sysmon *sysmon); #else static inline struct qcom_sysmon *qcom_add_sysmon_subdev(struct rproc *rproc, const char *name, - int ssctl_instance) + int ssctl_instance, + struct qcom_q6v5 *q6v5) { return NULL; } diff --git a/drivers/remoteproc/qcom_q6v5.c b/drivers/remoteproc/qcom_q6v5.c index 0d33e3079f0d..a4c2ecae6a0f 100644 --- a/drivers/remoteproc/qcom_q6v5.c +++ b/drivers/remoteproc/qcom_q6v5.c @@ -25,6 +25,7 @@ int qcom_q6v5_prepare(struct qcom_q6v5 *q6v5) { reinit_completion(&q6v5->start_done); reinit_completion(&q6v5->stop_done); + reinit_completion(&q6v5->shutdown_done); q6v5->running = true; q6v5->handover_issued = false; @@ -141,6 +142,35 @@ static irqreturn_t q6v5_stop_interrupt(int irq, void *data) return IRQ_HANDLED; } +static irqreturn_t q6v5_shutdown_interrupt(int irq, void *data) +{ + struct qcom_q6v5 *q6v5 = data; + + complete(&q6v5->shutdown_done); + + return IRQ_HANDLED; +} + +/** + * qcom_q6v5_wait_for_shutdown() - wait for remote processor shutdown signal + * @q6v5: reference to qcom_q6v5 context + * @timeout: timeout to wait for the event, in jiffies + * + * Return: 0 on success, -ETIMEDOUT on timeout + */ +int qcom_q6v5_wait_for_shutdown(struct qcom_q6v5 *q6v5, int timeout) +{ + int ret; + + if (!q6v5->has_shutdown_irq) + return 0; + + ret = wait_for_completion_timeout(&q6v5->shutdown_done, timeout); + + return !ret ? -ETIMEDOUT : 0; +} +EXPORT_SYMBOL_GPL(qcom_q6v5_wait_for_shutdown); + /** * qcom_q6v5_request_stop() - request the remote processor to stop * @q6v5: reference to qcom_q6v5 context @@ -185,6 +215,7 @@ int qcom_q6v5_init(struct qcom_q6v5 *q6v5, struct platform_device *pdev, init_completion(&q6v5->start_done); init_completion(&q6v5->stop_done); + init_completion(&q6v5->shutdown_done); q6v5->wdog_irq = platform_get_irq_byname(pdev, "wdog"); if (q6v5->wdog_irq < 0) { @@ -277,6 +308,28 @@ int qcom_q6v5_init(struct qcom_q6v5 *q6v5, struct platform_device *pdev, return ret; } + if (q6v5->has_shutdown_irq) { + q6v5->shutdown_irq = platform_get_irq_byname(pdev, + "shutdown-ack"); + if (q6v5->shutdown_irq < 0) { + if (q6v5->shutdown_irq != -EPROBE_DEFER) + dev_err(&pdev->dev, + "failed to get shutdown-ack IRQ: %d\n", + q6v5->shutdown_irq); + return q6v5->shutdown_irq; + } + + ret = devm_request_threaded_irq(&pdev->dev, q6v5->shutdown_irq, + NULL, q6v5_shutdown_interrupt, + IRQF_TRIGGER_RISING | + IRQF_ONESHOT, + "q6v5 shutdown", q6v5); + if (ret) { + dev_err(&pdev->dev, "failed to acquire shutdown IRQ\n"); + return ret; + } + } + q6v5->state = qcom_smem_state_get(&pdev->dev, "stop", &q6v5->stop_bit); if (IS_ERR(q6v5->state)) { dev_err(&pdev->dev, "failed to acquire stop state\n"); diff --git a/drivers/remoteproc/qcom_q6v5.h b/drivers/remoteproc/qcom_q6v5.h index 7ac92c1e0f49..5cbaf2564c3a 100644 --- a/drivers/remoteproc/qcom_q6v5.h +++ b/drivers/remoteproc/qcom_q6v5.h @@ -21,11 +21,15 @@ struct qcom_q6v5 { int ready_irq; int handover_irq; int stop_irq; + int shutdown_irq; + + u8 has_shutdown_irq; bool handover_issued; struct completion start_done; struct completion stop_done; + struct completion shutdown_done; int crash_reason; @@ -42,5 +46,6 @@ int qcom_q6v5_prepare(struct qcom_q6v5 *q6v5); int qcom_q6v5_unprepare(struct qcom_q6v5 *q6v5); int qcom_q6v5_request_stop(struct qcom_q6v5 *q6v5); int qcom_q6v5_wait_for_start(struct qcom_q6v5 *q6v5, int timeout); +int qcom_q6v5_wait_for_shutdown(struct qcom_q6v5 *q6v5, int timeout); #endif diff --git a/drivers/remoteproc/qcom_q6v5_adsp.c b/drivers/remoteproc/qcom_q6v5_adsp.c index 79374d1de311..5fc42d38a1cd 100644 --- a/drivers/remoteproc/qcom_q6v5_adsp.c +++ b/drivers/remoteproc/qcom_q6v5_adsp.c @@ -438,7 +438,8 @@ static int adsp_probe(struct platform_device *pdev) qcom_add_ssr_subdev(rproc, &adsp->ssr_subdev, desc->ssr_name); adsp->sysmon = qcom_add_sysmon_subdev(rproc, desc->sysmon_name, - desc->ssctl_id); + desc->ssctl_id, + &adsp->q6v5); ret = rproc_add(rproc); if (ret) diff --git a/drivers/remoteproc/qcom_q6v5_mss.c b/drivers/remoteproc/qcom_q6v5_mss.c index 01be7314e176..3bc2dec85928 100644 --- a/drivers/remoteproc/qcom_q6v5_mss.c +++ b/drivers/remoteproc/qcom_q6v5_mss.c @@ -1340,7 +1340,8 @@ static int q6v5_probe(struct platform_device *pdev) qcom_add_glink_subdev(rproc, &qproc->glink_subdev); qcom_add_smd_subdev(rproc, &qproc->smd_subdev); qcom_add_ssr_subdev(rproc, &qproc->ssr_subdev, "mpss"); - qproc->sysmon = qcom_add_sysmon_subdev(rproc, "modem", 0x12); + qproc->sysmon = qcom_add_sysmon_subdev(rproc, "modem", 0x12, + &qproc->q6v5); ret = rproc_add(rproc); if (ret) diff --git a/drivers/remoteproc/qcom_q6v5_pas.c b/drivers/remoteproc/qcom_q6v5_pas.c index b1e63fcd5fdf..920a39ea6609 100644 --- a/drivers/remoteproc/qcom_q6v5_pas.c +++ b/drivers/remoteproc/qcom_q6v5_pas.c @@ -303,7 +303,8 @@ static int adsp_probe(struct platform_device *pdev) qcom_add_ssr_subdev(rproc, &adsp->ssr_subdev, desc->ssr_name); adsp->sysmon = qcom_add_sysmon_subdev(rproc, desc->sysmon_name, - desc->ssctl_id); + desc->ssctl_id, + &adsp->q6v5); ret = rproc_add(rproc); if (ret) diff --git a/drivers/remoteproc/qcom_sysmon.c b/drivers/remoteproc/qcom_sysmon.c index e976a602b015..c0d6ee8de995 100644 --- a/drivers/remoteproc/qcom_sysmon.c +++ b/drivers/remoteproc/qcom_sysmon.c @@ -14,12 +14,14 @@ #include #include "qcom_common.h" +#include "qcom_q6v5.h" static BLOCKING_NOTIFIER_HEAD(sysmon_notifiers); struct qcom_sysmon { struct rproc_subdev subdev; struct rproc *rproc; + struct qcom_q6v5 *q6v5; struct list_head node; @@ -442,7 +444,8 @@ static int sysmon_notify(struct notifier_block *nb, unsigned long event, */ struct qcom_sysmon *qcom_add_sysmon_subdev(struct rproc *rproc, const char *name, - int ssctl_instance) + int ssctl_instance, + struct qcom_q6v5 *q6v5) { struct qcom_sysmon *sysmon; int ret; @@ -456,6 +459,7 @@ struct qcom_sysmon *qcom_add_sysmon_subdev(struct rproc *rproc, sysmon->name = name; sysmon->ssctl_instance = ssctl_instance; + sysmon->q6v5 = q6v5; init_completion(&sysmon->comp); mutex_init(&sysmon->lock); diff --git a/drivers/remoteproc/qcom_wcnss.c b/drivers/remoteproc/qcom_wcnss.c index b0e07e9f42d5..af13cade35da 100644 --- a/drivers/remoteproc/qcom_wcnss.c +++ b/drivers/remoteproc/qcom_wcnss.c @@ -552,7 +552,8 @@ static int wcnss_probe(struct platform_device *pdev) } qcom_add_smd_subdev(rproc, &wcnss->smd_subdev); - wcnss->sysmon = qcom_add_sysmon_subdev(rproc, "wcnss", WCNSS_SSCTL_ID); + wcnss->sysmon = qcom_add_sysmon_subdev(rproc, "wcnss", WCNSS_SSCTL_ID, + NULL); ret = rproc_add(rproc); if (ret) From patchwork Mon Dec 24 08:48:24 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sibi Sankar X-Patchwork-Id: 10742089 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 9523E1800 for ; Mon, 24 Dec 2018 08:49:18 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 845A528A72 for ; Mon, 24 Dec 2018 08:49:18 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 772CC28B7B; Mon, 24 Dec 2018 08:49:18 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.7 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1342928A72 for ; Mon, 24 Dec 2018 08:49:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726966AbeLXItO (ORCPT ); Mon, 24 Dec 2018 03:49:14 -0500 Received: from smtp.codeaurora.org ([198.145.29.96]:47006 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726788AbeLXItO (ORCPT ); Mon, 24 Dec 2018 03:49:14 -0500 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id 0CF1F608D2; Mon, 24 Dec 2018 08:49:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1545641353; bh=dqk9ZmeSnTEd7cXIRnrDYU41Pykk/FfpZPX357i4/ys=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=oHn9g9oPTxQ9ok0SIHJ/x2w8aPWUJa3Eu/bzpkueSwhIODCi7QeH2Qh3yPKXiAzTe nRbZr9oMJA8h+la7KI05fQZpTc3qGJbST9levXsjW/n+asT9AvaV+qSF0VNmMGEsGL 19wZLekFE/MjUPA1whzflcDoNS4dCoDDkPlaKnr8= Received: from blr-ubuntu-87.qualcomm.com (blr-bdr-fw-01_globalnat_allzones-outside.qualcomm.com [103.229.18.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: sibis@smtp.codeaurora.org) by smtp.codeaurora.org (Postfix) with ESMTPSA id 0191C6081E; Mon, 24 Dec 2018 08:49:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1545641350; bh=dqk9ZmeSnTEd7cXIRnrDYU41Pykk/FfpZPX357i4/ys=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=EqLOjHEvGb/2qTnZcmLtI/ZO7BsJuWkJAkGpbqVkXV4KU//Y3qmXO6T8D7LumAiYQ HaFXJJX+V/bkyV9bZl+BlkuOhrqLa+w5ygc3HLu/3gNJhvgBqDguWOzQPda5+Mp1gA sqPfzH9iOxBk4OJ/lgOofSxwQFxzEttVCwwgdKFU= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 0191C6081E Authentication-Results: pdx-caf-mail.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: pdx-caf-mail.web.codeaurora.org; spf=none smtp.mailfrom=sibis@codeaurora.org From: Sibi Sankar To: bjorn.andersson@linaro.org, robh+dt@kernel.org, andy.gross@linaro.org, david.brown@linaro.org Cc: linux-arm-msm@vger.kernel.org, linux-soc@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, tsoni@codeaurora.org, clew@codeaurora.org, akdwived@codeaurora.org, ohad@wizery.com, mark.rutland@arm.com, linux-remoteproc@vger.kernel.org, dianders@chromium.org, Sibi Sankar Subject: [PATCH v2 3/4] remoteproc: qcom: Wait for shutdown-ack/ind on sysmon shutdown Date: Mon, 24 Dec 2018 14:18:24 +0530 Message-Id: <20181224084824.25193-3-sibis@codeaurora.org> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181224084824.25193-1-sibis@codeaurora.org> References: <20181224084824.25193-1-sibis@codeaurora.org> MIME-Version: 1.0 Sender: linux-remoteproc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-remoteproc@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP After sending a sysmon shutdown request to the SSCTL service on the subsystem, wait for the service to send shutdown-ack interrupt or an indication message to signal the completion of graceful shutdown. Signed-off-by: Sibi Sankar --- drivers/remoteproc/qcom_sysmon.c | 40 +++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/drivers/remoteproc/qcom_sysmon.c b/drivers/remoteproc/qcom_sysmon.c index c0d6ee8de995..0da83638ca99 100644 --- a/drivers/remoteproc/qcom_sysmon.c +++ b/drivers/remoteproc/qcom_sysmon.c @@ -36,6 +36,7 @@ struct qcom_sysmon { struct rpmsg_endpoint *ept; struct completion comp; + struct completion ind_comp; struct mutex lock; bool ssr_ack; @@ -139,6 +140,7 @@ static int sysmon_callback(struct rpmsg_device *rpdev, void *data, int count, } #define SSCTL_SHUTDOWN_REQ 0x21 +#define SSCTL_SHUTDOWN_READY_IND 0x21 #define SSCTL_SUBSYS_EVENT_REQ 0x23 #define SSCTL_MAX_MSG_LEN 7 @@ -254,6 +256,29 @@ static struct qmi_elem_info ssctl_subsys_event_resp_ei[] = { {} }; +static struct qmi_elem_info ssctl_shutdown_ind_ei[] = { + {} +}; + +static void sysmon_ind_cb(struct qmi_handle *qmi, struct sockaddr_qrtr *sq, + struct qmi_txn *txn, const void *data) +{ + struct qcom_sysmon *sysmon = container_of(qmi, struct qcom_sysmon, qmi); + + complete(&sysmon->ind_comp); +} + +static struct qmi_msg_handler qmi_indication_handler[] = { + { + .type = QMI_INDICATION, + .msg_id = SSCTL_SHUTDOWN_READY_IND, + .ei = ssctl_shutdown_ind_ei, + .decoded_size = 0, + .fn = sysmon_ind_cb + }, + {} +}; + /** * ssctl_request_shutdown() - request shutdown via SSCTL QMI service * @sysmon: sysmon context @@ -264,6 +289,7 @@ static void ssctl_request_shutdown(struct qcom_sysmon *sysmon) struct qmi_txn txn; int ret; + reinit_completion(&sysmon->ind_comp); ret = qmi_txn_init(&sysmon->qmi, &txn, ssctl_shutdown_resp_ei, &resp); if (ret < 0) { dev_err(sysmon->dev, "failed to allocate QMI txn\n"); @@ -285,6 +311,16 @@ static void ssctl_request_shutdown(struct qcom_sysmon *sysmon) dev_err(sysmon->dev, "shutdown request failed\n"); else dev_dbg(sysmon->dev, "shutdown request completed\n"); + + if (sysmon->q6v5) { + ret = qcom_q6v5_wait_for_shutdown(sysmon->q6v5, 10 * HZ); + if (ret) { + ret = try_wait_for_completion(&sysmon->ind_comp); + if (!ret) + dev_err(sysmon->dev, + "timeout waiting for shutdown ack\n"); + } + } } /** @@ -462,9 +498,11 @@ struct qcom_sysmon *qcom_add_sysmon_subdev(struct rproc *rproc, sysmon->q6v5 = q6v5; init_completion(&sysmon->comp); + init_completion(&sysmon->ind_comp); mutex_init(&sysmon->lock); - ret = qmi_handle_init(&sysmon->qmi, SSCTL_MAX_MSG_LEN, &ssctl_ops, NULL); + ret = qmi_handle_init(&sysmon->qmi, SSCTL_MAX_MSG_LEN, &ssctl_ops, + qmi_indication_handler); if (ret < 0) { dev_err(sysmon->dev, "failed to initialize qmi handle\n"); kfree(sysmon); From patchwork Mon Dec 24 08:48:25 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sibi Sankar X-Patchwork-Id: 10742095 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 076761800 for ; Mon, 24 Dec 2018 08:49:29 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id ED18828A72 for ; Mon, 24 Dec 2018 08:49:28 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id E06DD28B7B; Mon, 24 Dec 2018 08:49:28 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.7 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7298928A72 for ; Mon, 24 Dec 2018 08:49:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726981AbeLXItX (ORCPT ); Mon, 24 Dec 2018 03:49:23 -0500 Received: from smtp.codeaurora.org ([198.145.29.96]:47198 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726788AbeLXItX (ORCPT ); Mon, 24 Dec 2018 03:49:23 -0500 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id 5F42D608CD; Mon, 24 Dec 2018 08:49:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1545641361; bh=25ZxDDBoAMl3ipPhUl6iV7pmCG65GyELxEpfWHYjbnc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=CEFh0riIkBMIVZ/ch1RduqlpMPgyzLi4Jq2CetknA74SSzcND2svVf0Ukt1BdeL5r aOdTl77cbc+14S+S7x4xCjBn5hC4IdCI1/LyJjhyehGXz7Ipt2i9rEc1dMUbvaqMso NgfGW5YgLDKb/wKsy/7SQrfImvrtBCL603IuU3GI= Received: from blr-ubuntu-87.qualcomm.com (blr-bdr-fw-01_globalnat_allzones-outside.qualcomm.com [103.229.18.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: sibis@smtp.codeaurora.org) by smtp.codeaurora.org (Postfix) with ESMTPSA id 616D1608CD; Mon, 24 Dec 2018 08:49:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1545641358; bh=25ZxDDBoAMl3ipPhUl6iV7pmCG65GyELxEpfWHYjbnc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=nyz3kgF81PhDwwB6LrpoB07XLbSJjy38FH/54DaYXzOqi2PVLo0/7tpvAeLOQQwnC sW6gEAPgjniU7c0E51fil5FYs+lidc9bOPcmKxxXVcM3mWZDIHsz4l8nSC8afBHe/u GAUbQ7LmgO7Vm7rrd0eTOemn3rZjbt3tOxCO0/hc= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 616D1608CD Authentication-Results: pdx-caf-mail.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: pdx-caf-mail.web.codeaurora.org; spf=none smtp.mailfrom=sibis@codeaurora.org From: Sibi Sankar To: bjorn.andersson@linaro.org, robh+dt@kernel.org, andy.gross@linaro.org, david.brown@linaro.org Cc: linux-arm-msm@vger.kernel.org, linux-soc@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, tsoni@codeaurora.org, clew@codeaurora.org, akdwived@codeaurora.org, ohad@wizery.com, mark.rutland@arm.com, linux-remoteproc@vger.kernel.org, dianders@chromium.org, Sibi Sankar Subject: [PATCH v2 4/4] remoteproc: qcom: Enable shutdown-ack irq on Q6V5 Date: Mon, 24 Dec 2018 14:18:25 +0530 Message-Id: <20181224084824.25193-4-sibis@codeaurora.org> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181224084824.25193-1-sibis@codeaurora.org> References: <20181224084824.25193-1-sibis@codeaurora.org> MIME-Version: 1.0 Sender: linux-remoteproc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-remoteproc@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Enable shutdown-ack irq handling for MSS Q6V5 on SDM845/MSM8996 SoCs and for WCSS Q6V5 on QCS404 SoC. Signed-off-by: Sibi Sankar --- drivers/remoteproc/qcom_q6v5_mss.c | 11 ++++++++--- drivers/remoteproc/qcom_q6v5_pas.c | 9 +++++++-- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/drivers/remoteproc/qcom_q6v5_mss.c b/drivers/remoteproc/qcom_q6v5_mss.c index 3bc2dec85928..fdb18d1ea177 100644 --- a/drivers/remoteproc/qcom_q6v5_mss.c +++ b/drivers/remoteproc/qcom_q6v5_mss.c @@ -134,6 +134,7 @@ struct rproc_hexagon_res { int version; bool need_mem_protection; bool has_alt_reset; + u8 has_shutdown_irq; }; struct q6v5 { @@ -1252,6 +1253,7 @@ static int q6v5_probe(struct platform_device *pdev) { const struct rproc_hexagon_res *desc; struct q6v5 *qproc; + struct qcom_q6v5 *q6v5; struct rproc *rproc; int ret; @@ -1273,6 +1275,7 @@ static int q6v5_probe(struct platform_device *pdev) qproc->dev = &pdev->dev; qproc->rproc = rproc; platform_set_drvdata(pdev, qproc); + q6v5 = &qproc->q6v5; ret = q6v5_init_mem(qproc, pdev); if (ret) @@ -1330,7 +1333,8 @@ static int q6v5_probe(struct platform_device *pdev) qproc->version = desc->version; qproc->need_mem_protection = desc->need_mem_protection; - ret = qcom_q6v5_init(&qproc->q6v5, pdev, rproc, MPSS_CRASH_REASON_SMEM, + q6v5->has_shutdown_irq = desc->has_shutdown_irq; + ret = qcom_q6v5_init(q6v5, pdev, rproc, MPSS_CRASH_REASON_SMEM, qcom_msa_handover); if (ret) goto free_rproc; @@ -1340,8 +1344,7 @@ static int q6v5_probe(struct platform_device *pdev) qcom_add_glink_subdev(rproc, &qproc->glink_subdev); qcom_add_smd_subdev(rproc, &qproc->smd_subdev); qcom_add_ssr_subdev(rproc, &qproc->ssr_subdev, "mpss"); - qproc->sysmon = qcom_add_sysmon_subdev(rproc, "modem", 0x12, - &qproc->q6v5); + qproc->sysmon = qcom_add_sysmon_subdev(rproc, "modem", 0x12, q6v5); ret = rproc_add(rproc); if (ret) @@ -1391,6 +1394,7 @@ static const struct rproc_hexagon_res sdm845_mss = { }, .need_mem_protection = true, .has_alt_reset = true, + .has_shutdown_irq = true, .version = MSS_SDM845, }; @@ -1410,6 +1414,7 @@ static const struct rproc_hexagon_res msm8996_mss = { }, .need_mem_protection = true, .has_alt_reset = false, + .has_shutdown_irq = true, .version = MSS_MSM8996, }; diff --git a/drivers/remoteproc/qcom_q6v5_pas.c b/drivers/remoteproc/qcom_q6v5_pas.c index 920a39ea6609..2d6ff59575cd 100644 --- a/drivers/remoteproc/qcom_q6v5_pas.c +++ b/drivers/remoteproc/qcom_q6v5_pas.c @@ -43,6 +43,7 @@ struct adsp_data { const char *ssr_name; const char *sysmon_name; int ssctl_id; + u8 has_shutdown_irq; }; struct qcom_adsp { @@ -257,6 +258,7 @@ static int adsp_probe(struct platform_device *pdev) { const struct adsp_data *desc; struct qcom_adsp *adsp; + struct qcom_q6v5 *q6v5; struct rproc *rproc; int ret; @@ -280,6 +282,7 @@ static int adsp_probe(struct platform_device *pdev) adsp->pas_id = desc->pas_id; adsp->has_aggre2_clk = desc->has_aggre2_clk; platform_set_drvdata(pdev, adsp); + q6v5 = &adsp->q6v5; ret = adsp_alloc_memory_region(adsp); if (ret) @@ -293,7 +296,8 @@ static int adsp_probe(struct platform_device *pdev) if (ret) goto free_rproc; - ret = qcom_q6v5_init(&adsp->q6v5, pdev, rproc, desc->crash_reason_smem, + q6v5->has_shutdown_irq = desc->has_shutdown_irq; + ret = qcom_q6v5_init(q6v5, pdev, rproc, desc->crash_reason_smem, qcom_pas_handover); if (ret) goto free_rproc; @@ -304,7 +308,7 @@ static int adsp_probe(struct platform_device *pdev) adsp->sysmon = qcom_add_sysmon_subdev(rproc, desc->sysmon_name, desc->ssctl_id, - &adsp->q6v5); + q6v5); ret = rproc_add(rproc); if (ret) @@ -366,6 +370,7 @@ static const struct adsp_data slpi_resource_init = { static const struct adsp_data wcss_resource_init = { .crash_reason_smem = 421, .firmware_name = "wcnss.mdt", + .has_shutdown_irq = true, .pas_id = 6, .ssr_name = "mpss", .sysmon_name = "wcnss",