From patchwork Fri Aug 24 20:06:23 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Raju P.L.S.S.S.N" X-Patchwork-Id: 10575823 X-Patchwork-Delegate: agross@codeaurora.org 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 CDF88112E for ; Fri, 24 Aug 2018 20:07:08 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id BEABD2CBEE for ; Fri, 24 Aug 2018 20:07:08 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id BC7652CBF5; Fri, 24 Aug 2018 20:07:08 +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.3 required=2.0 tests=BAYES_00,DKIM_SIGNED, FROM_LOCAL_NOVOWEL,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI,T_DKIM_INVALID 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 29E742CBEE for ; Fri, 24 Aug 2018 20:07:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727668AbeHXXnM (ORCPT ); Fri, 24 Aug 2018 19:43:12 -0400 Received: from smtp.codeaurora.org ([198.145.29.96]:52216 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726675AbeHXXnL (ORCPT ); Fri, 24 Aug 2018 19:43:11 -0400 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id 04F07604BE; Fri, 24 Aug 2018 20:07:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1535141226; bh=QB/G7Z5fAk6NmU5Bp9aKKrfZf8LlhU9wz1RH8eMTSrA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=WQpgWOdrkXzjXlIiXhkQgwhPGx0wypfy+Rpryb3JsOUDq5Rm5wDvYu+ozKLqtYtl3 KKh23XdHsUv/7d5Z20uVsJlXJVEVBhPW68TbDotTYLCKcgraY/RWkttztyHTDgXPRb Lqyne0RSZ1bWO2PrR1aaBjdM2uuZM2FzdYx+9Ces= Received: from rplsssn-linux.qualcomm.com (blr-c-bdr-fw-01_globalnat_allzones-outside.qualcomm.com [103.229.19.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: rplsssn@smtp.codeaurora.org) by smtp.codeaurora.org (Postfix) with ESMTPSA id C9DB36022B; Fri, 24 Aug 2018 20:06:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1535141224; bh=QB/G7Z5fAk6NmU5Bp9aKKrfZf8LlhU9wz1RH8eMTSrA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=c+U0BbRKVXXQ0AkW8W6+QDn1P9aGn/RFfl8da0zFKVwFrODq48ytqoQaxRq7dgxkT 7uo7cyold81K40SNZb1FI04Eilq2r40AP8a+ar7s2XicQ2kY5sMivnlugU1TyN0Aby YFD+j3ePz80mooAOJCp8zQQeQnEwzrEyE5F28cDc= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org C9DB36022B 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=rplsssn@codeaurora.org From: "Raju P.L.S.S.S.N" To: andy.gross@linaro.org, david.brown@linaro.org, linux-arm-msm@vger.kernel.org, linux-soc@vger.kernel.org, linux-pm@vger.kernel.org Cc: rnayak@codeaurora.org, bjorn.andersson@linaro.org, linux-kernel@vger.kernel.org, lorenzo.pieralisi@arm.com, rafael@kernel.org, drake@endlessm.com, sboyd@kernel.org, evgreen@chromium.org, dianders@chromium.org, mka@chromium.org, ilina@codeaurora.org, "Raju P.L.S.S.S.N" Subject: [PATCH RFC 1/6] drivers: qcom: system_pm: add system PM client for RPMH based SoCs Date: Sat, 25 Aug 2018 01:36:23 +0530 Message-Id: <1535141188-29731-2-git-send-email-rplsssn@codeaurora.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1535141188-29731-1-git-send-email-rplsssn@codeaurora.org> References: <1535141188-29731-1-git-send-email-rplsssn@codeaurora.org> Sender: linux-arm-msm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-arm-msm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP RPMH based targets require that the sleep and wake state request votes be sent during system low power mode entry. The votes help reduce the power consumption when the AP is not using them. The votes sent by the clients are cached in RPMH controller and needs to be flushed by a sleep manager. So add system power manager client for RPMH client and invoke RPMH flush when last core is being powered off by listening to cpu_pm_notifications. Signed-off-by: Raju P.L.S.S.S.N --- drivers/soc/qcom/Kconfig | 11 ++++++ drivers/soc/qcom/Makefile | 1 + drivers/soc/qcom/system_pm.c | 82 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 94 insertions(+) create mode 100644 drivers/soc/qcom/system_pm.c diff --git a/drivers/soc/qcom/Kconfig b/drivers/soc/qcom/Kconfig index 3223084..a52abe9 100644 --- a/drivers/soc/qcom/Kconfig +++ b/drivers/soc/qcom/Kconfig @@ -78,6 +78,7 @@ config QCOM_RMTFS_MEM config QCOM_RPMH bool "Qualcomm RPM-Hardened (RPMH) Communication" depends on ARCH_QCOM && ARM64 && OF || COMPILE_TEST + select QCOM_SYSTEM_PM help Support for communication with the hardened-RPM blocks in Qualcomm Technologies Inc (QTI) SoCs. RPMH communication uses an @@ -85,6 +86,16 @@ config QCOM_RPMH of hardware components aggregate requests for these resources and help apply the aggregated state on the resource. +config QCOM_SYSTEM_PM + bool "Qualcomm System PM" + depends on CPU_PM && QCOM_RPMH + help + Support for QCOM platform system power management to perform tasks + necessary while application processor votes for deeper modes so that + the firmware can enter SoC level low power modes to save power. + Deeper low power modes can be voted during idle power management or + pm suspend state. + config QCOM_SMEM tristate "Qualcomm Shared Memory Manager (SMEM)" depends on ARCH_QCOM diff --git a/drivers/soc/qcom/Makefile b/drivers/soc/qcom/Makefile index 03d4c83..27d79d2 100644 --- a/drivers/soc/qcom/Makefile +++ b/drivers/soc/qcom/Makefile @@ -12,6 +12,7 @@ obj-$(CONFIG_QCOM_RMTFS_MEM) += rmtfs_mem.o obj-$(CONFIG_QCOM_RPMH) += qcom_rpmh.o qcom_rpmh-y += rpmh-rsc.o qcom_rpmh-y += rpmh.o +obj-$(CONFIG_QCOM_SYSTEM_PM) += system_pm.o obj-$(CONFIG_QCOM_SMD_RPM) += smd-rpm.o obj-$(CONFIG_QCOM_SMEM) += smem.o obj-$(CONFIG_QCOM_SMEM_STATE) += smem_state.o diff --git a/drivers/soc/qcom/system_pm.c b/drivers/soc/qcom/system_pm.c new file mode 100644 index 0000000..40e5aa7 --- /dev/null +++ b/drivers/soc/qcom/system_pm.c @@ -0,0 +1,82 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (c) 2018, The Linux Foundation. All rights reserved. + */ + +#include +#include +#include + +#include + +static struct cpumask cpu_pm_state_mask; +static raw_spinlock_t cpu_pm_state_lock; + +static struct device *sys_pm_dev; + +static int sys_pm_notifier(struct notifier_block *b, + unsigned long cmd, void *v) +{ + switch (cmd) { + case CPU_PM_ENTER: + raw_spin_lock(&cpu_pm_state_lock); + cpumask_set_cpu(smp_processor_id(), &cpu_pm_state_mask); + if (cpumask_equal(&cpu_pm_state_mask, cpu_possible_mask)) { + if (rpmh_ctrlr_idle(sys_pm_dev)) { + /* Flush the sleep/wake sets */ + rpmh_flush(sys_pm_dev); + } else { + pr_err("%s:rpmh controller is busy\n", + __func__); + raw_spin_unlock(&cpu_pm_state_lock); + return NOTIFY_BAD; + } + } + raw_spin_unlock(&cpu_pm_state_lock); + break; + case CPU_PM_EXIT: + case CPU_PM_ENTER_FAILED: + raw_spin_lock(&cpu_pm_state_lock); + cpumask_clear_cpu(smp_processor_id(), &cpu_pm_state_mask); + raw_spin_unlock(&cpu_pm_state_lock); + break; + default: + return NOTIFY_DONE; + } + + return NOTIFY_OK; +} + +static struct notifier_block sys_pm_notifier_block = { + .notifier_call = sys_pm_notifier, + .priority = -1, /* Should be last in the order of notifications */ +}; + +static int sys_pm_probe(struct platform_device *pdev) +{ + sys_pm_dev = &pdev->dev; + + if (IS_ERR_OR_NULL(sys_pm_dev)) { + pr_err("%s fail\n", __func__); + return PTR_ERR(sys_pm_dev); + } + + raw_spin_lock_init(&cpu_pm_state_lock); + cpu_pm_register_notifier(&sys_pm_notifier_block); + + return 0; +} + +static const struct of_device_id sys_pm_drv_match[] = { + { .compatible = "qcom,system-pm", }, + { } +}; + +static struct platform_driver sys_pm_driver = { + .probe = sys_pm_probe, + .driver = { + .name = KBUILD_MODNAME, + .of_match_table = sys_pm_drv_match, + }, +}; +builtin_platform_driver(sys_pm_driver); From patchwork Fri Aug 24 20:06:24 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Raju P.L.S.S.S.N" X-Patchwork-Id: 10575829 X-Patchwork-Delegate: agross@codeaurora.org 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 C6347112E for ; Fri, 24 Aug 2018 20:07:21 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B88E22CBDB for ; Fri, 24 Aug 2018 20:07:21 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B681E2CBD0; Fri, 24 Aug 2018 20:07:21 +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.3 required=2.0 tests=BAYES_00,DKIM_SIGNED, FROM_LOCAL_NOVOWEL,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI,T_DKIM_INVALID 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 687612CBD4 for ; Fri, 24 Aug 2018 20:07:21 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727798AbeHXXnU (ORCPT ); Fri, 24 Aug 2018 19:43:20 -0400 Received: from smtp.codeaurora.org ([198.145.29.96]:52446 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726675AbeHXXnU (ORCPT ); Fri, 24 Aug 2018 19:43:20 -0400 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id AC03B605A4; Fri, 24 Aug 2018 20:07:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1535141234; bh=LgJG3k90wDm+T9oL8OpZ8qUFfYVfRDWGfnQIOfWoG1E=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=J4uQBeLNt/jbNwIScfTJ0OeC3KJeE9HoOrdaYL0kACl1UURzWuITMkSzByafOFveG sBqEMKeW8RMjK+zP8we7uHR40B+YpSG6CDk+Au5ERssRjfq8GxLeF0oUdaf/jAFZbK 8FAG+loFvP0YLR0M6VaPAGCxIJ9rM+aWrgvWJ2mw= Received: from rplsssn-linux.qualcomm.com (blr-c-bdr-fw-01_globalnat_allzones-outside.qualcomm.com [103.229.19.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: rplsssn@smtp.codeaurora.org) by smtp.codeaurora.org (Postfix) with ESMTPSA id 75CB2605A2; Fri, 24 Aug 2018 20:07:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1535141230; bh=LgJG3k90wDm+T9oL8OpZ8qUFfYVfRDWGfnQIOfWoG1E=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=aZlP6P1K8ojCK0iGKG0PTfqPQIHXYv6msMtblbuvhQ4t5o1Oxdc7aQeeefju4Vpp7 evRxpfzbZ6Sduzeg7TtPmKWoTDtxkYjGfUAvju3RLKDIx49gEO3T5uNctYgSBp3rp9 /4bHvxroLdnfBSJ72yvW+Uzt3r7kBsClrNhmE70E= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 75CB2605A2 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=rplsssn@codeaurora.org From: "Raju P.L.S.S.S.N" To: andy.gross@linaro.org, david.brown@linaro.org, linux-arm-msm@vger.kernel.org, linux-soc@vger.kernel.org, linux-pm@vger.kernel.org Cc: rnayak@codeaurora.org, bjorn.andersson@linaro.org, linux-kernel@vger.kernel.org, lorenzo.pieralisi@arm.com, rafael@kernel.org, drake@endlessm.com, sboyd@kernel.org, evgreen@chromium.org, dianders@chromium.org, mka@chromium.org, ilina@codeaurora.org, "Raju P.L.S.S.S.N" , devicetree@vger.kernel.org Subject: [PATCH RFC 2/6] dt-bindings: introduce System PM bindings for Qualcomm SoCs Date: Sat, 25 Aug 2018 01:36:24 +0530 Message-Id: <1535141188-29731-3-git-send-email-rplsssn@codeaurora.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1535141188-29731-1-git-send-email-rplsssn@codeaurora.org> References: <1535141188-29731-1-git-send-email-rplsssn@codeaurora.org> Sender: linux-arm-msm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-arm-msm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Add device binding documentation for Qualcomm Technology Inc's System PM driver. The driver is used for managing system sleep activities that are required when application processor is going to deepest low power mode. Cc: devicetree@vger.kernel.org Signed-off-by: Raju P.L.S.S.S.N --- .../devicetree/bindings/soc/qcom/system_pm.txt | 28 ++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 Documentation/devicetree/bindings/soc/qcom/system_pm.txt diff --git a/Documentation/devicetree/bindings/soc/qcom/system_pm.txt b/Documentation/devicetree/bindings/soc/qcom/system_pm.txt new file mode 100644 index 0000000..0915760 --- /dev/null +++ b/Documentation/devicetree/bindings/soc/qcom/system_pm.txt @@ -0,0 +1,28 @@ +System PM +--------- + +System PM device handles the tasks that need to be performed during application +processor deeper low power mode entry for QCOM SoCs which have hardened IP blocks +combinedly called as RPMH (Resource Power Manager Hardened) for shared resource +management. System PM is a client of APPS_RSC. Flushing the buffered requests to +TCSs in RSC and programming the wakeup timer in PDC for timer based wakeup are +handled by this device. + +The bindings for System PM is specified in the RSC section in devicetree. + +Properties: +- compatible: + Usage: required + Value type: + Definition: must be "qcom,system-pm". + +Example: + + apps_rsc: rsc@179c0000 { + [...] + system_pm { + compatible = "qcom,system-pm"; + }; + }; + + From patchwork Fri Aug 24 20:06:25 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Raju P.L.S.S.S.N" X-Patchwork-Id: 10575833 X-Patchwork-Delegate: agross@codeaurora.org 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 3EF1D1926 for ; Fri, 24 Aug 2018 20:07:22 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 2EC862CBD5 for ; Fri, 24 Aug 2018 20:07:22 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 2CF922CBD0; Fri, 24 Aug 2018 20:07:22 +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.3 required=2.0 tests=BAYES_00,DKIM_SIGNED, FROM_LOCAL_NOVOWEL,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI,T_DKIM_INVALID 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 C5AA02CBE4 for ; Fri, 24 Aug 2018 20:07:21 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727134AbeHXXn0 (ORCPT ); Fri, 24 Aug 2018 19:43:26 -0400 Received: from smtp.codeaurora.org ([198.145.29.96]:52592 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726675AbeHXXnZ (ORCPT ); Fri, 24 Aug 2018 19:43:25 -0400 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id 784B96053D; Fri, 24 Aug 2018 20:07:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1535141239; bh=80p+hVcHiozCeb8iIF+K72+zmyqyACym21JQWgbupek=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=UPjo8tkzXSBLQBfj+UjRqY2ponTuCuOSxC078H8Ep+O1XRZadrW1lB+P9uxddaQKs KW66Cs3jU92j30uTw7Mr2j301DdvXVNksaGn8NcNQnO5RBkXq/Hy/Ua6WMJ6TirvwN UaEQlelRJhv2EekLa2mQd0ZCS4PbLTTLjhcEaKZQ= Received: from rplsssn-linux.qualcomm.com (blr-c-bdr-fw-01_globalnat_allzones-outside.qualcomm.com [103.229.19.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: rplsssn@smtp.codeaurora.org) by smtp.codeaurora.org (Postfix) with ESMTPSA id 88DBB60591; Fri, 24 Aug 2018 20:07:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1535141236; bh=80p+hVcHiozCeb8iIF+K72+zmyqyACym21JQWgbupek=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=mhNF0QDHWKcLiSlJso50gNejM4/B9v6YGbIWCxQ22iMJ+9jmQgXloYUh0/0LqLchm rCmvFXo7JoHOOZCaXKn1MMvpqoZK5pgONMgHdTQoT3zmJ/nsTqcAhsFnb0vPIWfBdu JwoBpOO8GxGGbQgJlNEJlLQb7MIAwh3NqoSHv8t8= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 88DBB60591 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=rplsssn@codeaurora.org From: "Raju P.L.S.S.S.N" To: andy.gross@linaro.org, david.brown@linaro.org, linux-arm-msm@vger.kernel.org, linux-soc@vger.kernel.org, linux-pm@vger.kernel.org Cc: rnayak@codeaurora.org, bjorn.andersson@linaro.org, linux-kernel@vger.kernel.org, lorenzo.pieralisi@arm.com, rafael@kernel.org, drake@endlessm.com, sboyd@kernel.org, evgreen@chromium.org, dianders@chromium.org, mka@chromium.org, ilina@codeaurora.org, "Raju P.L.S.S.S.N" Subject: [PATCH RFC 3/6] drivers: qcom: system_pm: Add power management ops Date: Sat, 25 Aug 2018 01:36:25 +0530 Message-Id: <1535141188-29731-4-git-send-email-rplsssn@codeaurora.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1535141188-29731-1-git-send-email-rplsssn@codeaurora.org> References: <1535141188-29731-1-git-send-email-rplsssn@codeaurora.org> Sender: linux-arm-msm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-arm-msm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Add suspend power management ops so that the sleep & wake resource requests are flushed to corresponding TCS. The firmware would ensure that the buffered requests in TCS are sent to Resource Power Manager during entry to deepest low power modes. Signed-off-by: Raju P.L.S.S.S.N --- drivers/soc/qcom/Kconfig | 2 +- drivers/soc/qcom/system_pm.c | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/drivers/soc/qcom/Kconfig b/drivers/soc/qcom/Kconfig index a52abe9..ac0e413 100644 --- a/drivers/soc/qcom/Kconfig +++ b/drivers/soc/qcom/Kconfig @@ -88,7 +88,7 @@ config QCOM_RPMH config QCOM_SYSTEM_PM bool "Qualcomm System PM" - depends on CPU_PM && QCOM_RPMH + depends on CPU_PM && PM_SLEEP && QCOM_RPMH help Support for QCOM platform system power management to perform tasks necessary while application processor votes for deeper modes so that diff --git a/drivers/soc/qcom/system_pm.c b/drivers/soc/qcom/system_pm.c index 40e5aa7..8810b84 100644 --- a/drivers/soc/qcom/system_pm.c +++ b/drivers/soc/qcom/system_pm.c @@ -67,6 +67,23 @@ static int sys_pm_probe(struct platform_device *pdev) return 0; } +static int sys_pm_suspend(struct device *dev) +{ + if (rpmh_ctrlr_idle(dev)) { + /* Flush the sleep/wake sets in RSC controller */ + rpmh_flush(dev); + } else { + pr_err("%s:rpmh controller is busy\n", __func__); + return -EBUSY; + } + + return 0; +} + +static const struct dev_pm_ops sys_pm_dev_pm_ops = { + SET_LATE_SYSTEM_SLEEP_PM_OPS(sys_pm_suspend, NULL) +}; + static const struct of_device_id sys_pm_drv_match[] = { { .compatible = "qcom,system-pm", }, { } @@ -77,6 +94,7 @@ static int sys_pm_probe(struct platform_device *pdev) .driver = { .name = KBUILD_MODNAME, .of_match_table = sys_pm_drv_match, + .pm = &sys_pm_dev_pm_ops, }, }; builtin_platform_driver(sys_pm_driver); From patchwork Fri Aug 24 20:06:26 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Raju P.L.S.S.S.N" X-Patchwork-Id: 10575849 X-Patchwork-Delegate: agross@codeaurora.org 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 0F01B112E for ; Fri, 24 Aug 2018 20:07:48 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 00A5A2CC01 for ; Fri, 24 Aug 2018 20:07:48 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id F21942CBD0; Fri, 24 Aug 2018 20:07:47 +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.3 required=2.0 tests=BAYES_00,DKIM_SIGNED, FROM_LOCAL_NOVOWEL,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI,T_DKIM_INVALID 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 8670F2CBFD for ; Fri, 24 Aug 2018 20:07:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727947AbeHXXnd (ORCPT ); Fri, 24 Aug 2018 19:43:33 -0400 Received: from smtp.codeaurora.org ([198.145.29.96]:52852 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726675AbeHXXnd (ORCPT ); Fri, 24 Aug 2018 19:43:33 -0400 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id 85921605A2; Fri, 24 Aug 2018 20:07:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1535141246; bh=DX0+wc6YyGu52tlssKp8gCZCcHH+5hHUdAKlPVLlPr0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=l9fdsf27nX7+zKjIxOiqW7j9IyW0F8y+jz1sdwqJcf08OAM00NBH30DhnbMMgPkpS gE9EEUdzzqdpNfTPw3OdWE1eJRB6aXXSzAEoTO4GGJBSTCh08cXNftcrGTpXjB4g1b wn8+KhTzKq89gPLTzFSjqXPK1EsxlxXQJwBQHV6Y= Received: from rplsssn-linux.qualcomm.com (blr-c-bdr-fw-01_globalnat_allzones-outside.qualcomm.com [103.229.19.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: rplsssn@smtp.codeaurora.org) by smtp.codeaurora.org (Postfix) with ESMTPSA id 8819F60559; Fri, 24 Aug 2018 20:07:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1535141242; bh=DX0+wc6YyGu52tlssKp8gCZCcHH+5hHUdAKlPVLlPr0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ECoC1JTNDYIkuCmAVVwXeENIaeBa5l8U47I1E5I0Kh3AkZu5IsGDTO6J1I02dQ4Lh 6ZWqBnWKcSXOGyTPKzKVVJ15+vToqyIGo//12ZZ6KSnE0RfqxsnKOexujNDdWWiGSD VjzUYSKPycyV/s8XM2KPnSNsv0057bVY45BqQaYg= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 8819F60559 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=rplsssn@codeaurora.org From: "Raju P.L.S.S.S.N" To: andy.gross@linaro.org, david.brown@linaro.org, linux-arm-msm@vger.kernel.org, linux-soc@vger.kernel.org, linux-pm@vger.kernel.org Cc: rnayak@codeaurora.org, bjorn.andersson@linaro.org, linux-kernel@vger.kernel.org, lorenzo.pieralisi@arm.com, rafael@kernel.org, drake@endlessm.com, sboyd@kernel.org, evgreen@chromium.org, dianders@chromium.org, mka@chromium.org, ilina@codeaurora.org, "Raju P.L.S.S.S.N" Subject: [PATCH RFC 4/6] drivers: qcom: system_pm: program next wakeup to PDC timer Date: Sat, 25 Aug 2018 01:36:26 +0530 Message-Id: <1535141188-29731-5-git-send-email-rplsssn@codeaurora.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1535141188-29731-1-git-send-email-rplsssn@codeaurora.org> References: <1535141188-29731-1-git-send-email-rplsssn@codeaurora.org> Sender: linux-arm-msm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-arm-msm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP In addition to sleep and wake request votes that need to be sent to remote processor as part of low power mode entry, the next wake-up timer value needs to be programmed to PDC (Power Domain Controller) which has its own timer and is in an always on power domain. A specific control register is provided in RSC address space for this purpose. PDC wakes-up the RSC and sets up the resources back in active state before the processor is woken up by a timer interrupt. Signed-off-by: Raju P.L.S.S.S.N --- drivers/soc/qcom/system_pm.c | 61 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/drivers/soc/qcom/system_pm.c b/drivers/soc/qcom/system_pm.c index 8810b84..1451bf8 100644 --- a/drivers/soc/qcom/system_pm.c +++ b/drivers/soc/qcom/system_pm.c @@ -5,15 +5,67 @@ #include #include +#include #include +#include #include +#define ARCH_TIMER_HZ (19200000) +#define PDC_TIME_VALID_SHIFT 31 +#define PDC_TIME_UPPER_MASK 0xFFFFFF static struct cpumask cpu_pm_state_mask; static raw_spinlock_t cpu_pm_state_lock; static struct device *sys_pm_dev; +static uint64_t us_to_ticks(uint64_t time_us) +{ + uint64_t sec, nsec, time_cycles; + + sec = time_us; + do_div(sec, USEC_PER_SEC); + nsec = time_us - sec * USEC_PER_SEC; + + if (nsec > 0) { + nsec = nsec * NSEC_PER_USEC; + do_div(nsec, NSEC_PER_SEC); + } + + sec += nsec; + + time_cycles = (u64)sec * ARCH_TIMER_HZ; + + return time_cycles; +} + +static int setup_pdc_wakeup_timer(bool suspend) +{ + int cpu; + struct tcs_cmd cmd[2] = { { 0 } }; + ktime_t next_wakeup, cpu_wakeup; + uint64_t wakeup_cycles = ~0U; + + if (!suspend) { + /* + * Find the next wakeup for any of the online CPUs + */ + next_wakeup = ktime_set(KTIME_SEC_MAX, 0); + for_each_online_cpu(cpu) { + cpu_wakeup = tick_nohz_get_next_wakeup(cpu); + if (ktime_before(cpu_wakeup, next_wakeup)) + next_wakeup = cpu_wakeup; + } + wakeup_cycles = us_to_ticks(ktime_to_us(next_wakeup)); + } + + cmd[0].data = (wakeup_cycles >> 32) & PDC_TIME_UPPER_MASK; + cmd[0].data |= 1 << PDC_TIME_VALID_SHIFT; + cmd[1].data = (wakeup_cycles & 0xFFFFFFFF); + + return rpmh_write_pdc_data(sys_pm_dev, cmd, ARRAY_SIZE(cmd)); +} + static int sys_pm_notifier(struct notifier_block *b, unsigned long cmd, void *v) { @@ -25,6 +77,14 @@ static int sys_pm_notifier(struct notifier_block *b, if (rpmh_ctrlr_idle(sys_pm_dev)) { /* Flush the sleep/wake sets */ rpmh_flush(sys_pm_dev); + /* + * The next wakeup value is converted to ticks + * and copied to the Power Domain Controller + * that has its own timer, which is in an + * always-on power domain. The programming is + * done through a separate register on the RSC + */ + setup_pdc_wakeup_timer(false); } else { pr_err("%s:rpmh controller is busy\n", __func__); @@ -72,6 +132,7 @@ static int sys_pm_suspend(struct device *dev) if (rpmh_ctrlr_idle(dev)) { /* Flush the sleep/wake sets in RSC controller */ rpmh_flush(dev); + setup_pdc_wakeup_timer(true); } else { pr_err("%s:rpmh controller is busy\n", __func__); return -EBUSY; From patchwork Fri Aug 24 20:06:27 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Raju P.L.S.S.S.N" X-Patchwork-Id: 10575841 X-Patchwork-Delegate: agross@codeaurora.org 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 BA43C139B for ; Fri, 24 Aug 2018 20:07:37 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id AA1252CBE2 for ; Fri, 24 Aug 2018 20:07:37 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id A80372CBF6; Fri, 24 Aug 2018 20:07:37 +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.3 required=2.0 tests=BAYES_00,DKIM_SIGNED, FROM_LOCAL_NOVOWEL,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI,T_DKIM_INVALID 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 2621C2CBFB for ; Fri, 24 Aug 2018 20:07:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727996AbeHXXni (ORCPT ); Fri, 24 Aug 2018 19:43:38 -0400 Received: from smtp.codeaurora.org ([198.145.29.96]:52996 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726675AbeHXXni (ORCPT ); Fri, 24 Aug 2018 19:43:38 -0400 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id BF8D0606FC; Fri, 24 Aug 2018 20:07:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1535141251; bh=2pUngEnHBN1J4AcObU7DUsOatC9KhAECsI7uSrU7Trk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=A3AKMkGixxDTZ25OTblouGfBarK+FQ3zNnD8Jq02xd7u4q4DaphizFzkUiM/3q65u nIRWmGR1HjdQoipQAgAB0Mme6z3/HZSg0sU69nRFHFFs9zGFdM/z9OMenvM5Hthfir vx9zIawcsLuoJt1q/cCNH7johAtF2CHKxXzi2UY4= Received: from rplsssn-linux.qualcomm.com (blr-c-bdr-fw-01_globalnat_allzones-outside.qualcomm.com [103.229.19.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: rplsssn@smtp.codeaurora.org) by smtp.codeaurora.org (Postfix) with ESMTPSA id 6F814605A5; Fri, 24 Aug 2018 20:07:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1535141248; bh=2pUngEnHBN1J4AcObU7DUsOatC9KhAECsI7uSrU7Trk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=XTr65F2RJweZ7fgaiZYCVlBFMRDdbJ2EwMPNdHd0s8It377nTT7xyzQmow6Lb1i5W PTvJuVbrcohL5Y7Mcdac6+e1thrisSVGfEeQlBFeeHfyv+WyeeI5flmNk2/6FIo+xF AM8hXnflsRYE6eq1br34tuNUcBHI0Faz8jqZwQEA= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 6F814605A5 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=rplsssn@codeaurora.org From: "Raju P.L.S.S.S.N" To: andy.gross@linaro.org, david.brown@linaro.org, linux-arm-msm@vger.kernel.org, linux-soc@vger.kernel.org, linux-pm@vger.kernel.org Cc: rnayak@codeaurora.org, bjorn.andersson@linaro.org, linux-kernel@vger.kernel.org, lorenzo.pieralisi@arm.com, rafael@kernel.org, drake@endlessm.com, sboyd@kernel.org, evgreen@chromium.org, dianders@chromium.org, mka@chromium.org, ilina@codeaurora.org, "Raju P.L.S.S.S.N" Subject: [PATCH RFC 5/6] drivers: qcom: rpmh: force flush new sleep/wake requests during suspend Date: Sat, 25 Aug 2018 01:36:27 +0530 Message-Id: <1535141188-29731-6-git-send-email-rplsssn@codeaurora.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1535141188-29731-1-git-send-email-rplsssn@codeaurora.org> References: <1535141188-29731-1-git-send-email-rplsssn@codeaurora.org> Sender: linux-arm-msm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-arm-msm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP During pm suspend, newer sleep/wake requests may come as it can't be guaranteed that system PM device suspend will be called only in the end. After system PM does rpmh_flush, the suspend_in_progress flag is set to enable rpmh controller to manage new sleep/wake requests if any. Signed-off-by: Raju P.L.S.S.S.N --- drivers/soc/qcom/rpmh-internal.h | 1 + drivers/soc/qcom/rpmh.c | 17 +++++++++++++++++ include/soc/qcom/rpmh.h | 5 +++++ 3 files changed, 23 insertions(+) diff --git a/drivers/soc/qcom/rpmh-internal.h b/drivers/soc/qcom/rpmh-internal.h index f5359be..45bab3b 100644 --- a/drivers/soc/qcom/rpmh-internal.h +++ b/drivers/soc/qcom/rpmh-internal.h @@ -80,6 +80,7 @@ struct rpmh_ctrlr { bool dirty; struct list_head batch_cache; bool in_solver_mode; + bool suspend_in_progress; }; /** diff --git a/drivers/soc/qcom/rpmh.c b/drivers/soc/qcom/rpmh.c index 390e779..a9bd1a0 100644 --- a/drivers/soc/qcom/rpmh.c +++ b/drivers/soc/qcom/rpmh.c @@ -237,6 +237,8 @@ static int __rpmh_write(const struct device *dev, enum rpmh_state state, WARN_ON(irqs_disabled()); ret = rpmh_rsc_send_data(ctrlr_to_drv(ctrlr), &rpm_msg->msg); } else { + if (ctrlr->suspend_in_progress) + rpmh_flush(dev); /* Clean up our call by spoofing tx_done */ ret = 0; rpmh_tx_done(&rpm_msg->msg, ret); @@ -434,6 +436,8 @@ int rpmh_write_batch(const struct device *dev, enum rpmh_state state, if (state != RPMH_ACTIVE_ONLY_STATE) { cache_batch(ctrlr, req); + if (ctrlr->suspend_in_progress) + rpmh_flush(dev); return 0; } @@ -610,3 +614,16 @@ int rpmh_ctrlr_idle(const struct device *dev) return rpmh_rsc_ctrlr_is_idle(ctrlr_to_drv(ctrlr)); } EXPORT_SYMBOL(rpmh_ctrlr_idle); + +/** + * rpmh_notify_suspend: Set suspend in progress flag + * + * @suspend: boolean to indicate the supend mode + */ +void rpmh_notify_suspend(const struct device *dev, bool suspend) +{ + struct rpmh_ctrlr *ctrlr = get_rpmh_ctrlr(dev); + + ctrlr->suspend_in_progress = suspend; +} +EXPORT_SYMBOL(rpmh_notify_suspend); diff --git a/include/soc/qcom/rpmh.h b/include/soc/qcom/rpmh.h index d5e736e..2e79bee 100644 --- a/include/soc/qcom/rpmh.h +++ b/include/soc/qcom/rpmh.h @@ -31,6 +31,8 @@ int rpmh_write_batch(const struct device *dev, enum rpmh_state state, int rpmh_write_pdc_data(const struct device *dev, const struct tcs_cmd *cmd, u32 n); +void rpmh_notify_suspend(const struct device *dev, bool suspend); + #else static inline int rpmh_write(const struct device *dev, enum rpmh_state state, @@ -62,6 +64,9 @@ static inline int rpmh_mode_solver_set(const struct device *dev, bool enable) static inline int rpmh_write_pdc_data(const struct device *dev, const struct tcs_cmd *cmd, u32 n) { return -ENODEV; } + +static inline void rpmh_notify_suspend(const struct device *dev, bool suspend) +{ } #endif /* CONFIG_QCOM_RPMH */ #endif /* __SOC_QCOM_RPMH_H__ */ From patchwork Fri Aug 24 20:06:28 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Raju P.L.S.S.S.N" X-Patchwork-Id: 10575847 X-Patchwork-Delegate: agross@codeaurora.org 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 49E821579 for ; Fri, 24 Aug 2018 20:07:46 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3A97E2CBD1 for ; Fri, 24 Aug 2018 20:07:46 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 38E9E2CBF9; Fri, 24 Aug 2018 20:07: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.3 required=2.0 tests=BAYES_00,DKIM_SIGNED, FROM_LOCAL_NOVOWEL,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI,T_DKIM_INVALID 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 D6F462CBC7 for ; Fri, 24 Aug 2018 20:07:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727843AbeHXXno (ORCPT ); Fri, 24 Aug 2018 19:43:44 -0400 Received: from smtp.codeaurora.org ([198.145.29.96]:53162 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726675AbeHXXnn (ORCPT ); Fri, 24 Aug 2018 19:43:43 -0400 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id B2AD16055B; Fri, 24 Aug 2018 20:07:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1535141257; bh=S2+ZkwaMLf6Mce/14VsP2XJs7DgGYiunQ9xCIOk1LF4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=PbYxXT8vUk8LiZyG4qglMRVMmEvoBf/3xhfig6vd6EVeJHDddfdR2hFBzf9UniwRH PQlZM3fGCUBHmbXX5DHOeh22aLGiI8E8nhWWDwfWMXOQJ3/pUyJX1mMKyHb76K2RXm 0/jm6r9B5wUtIy8JihlXJOy3oUhaqjbAuHY9zFhU= Received: from rplsssn-linux.qualcomm.com (blr-c-bdr-fw-01_globalnat_allzones-outside.qualcomm.com [103.229.19.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: rplsssn@smtp.codeaurora.org) by smtp.codeaurora.org (Postfix) with ESMTPSA id 4BAFC607B5; Fri, 24 Aug 2018 20:07:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1535141254; bh=S2+ZkwaMLf6Mce/14VsP2XJs7DgGYiunQ9xCIOk1LF4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=HzZcUGwRnpOGD+C/wmDYJwvG3jXr7XHRnfk4sd3ZZ/IgMODEcwDrCEhLTjt6IpyEH Ld791YFBo2GM4PFkWw8KMnFkkUWS89WrSe/PNGYT4y4OdA1xSmfSPKVtyX5mUwPoTO /GsORgBe2k/3ff8aGjmsQS360a4FVB+5iYkQYD38= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 4BAFC607B5 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=rplsssn@codeaurora.org From: "Raju P.L.S.S.S.N" To: andy.gross@linaro.org, david.brown@linaro.org, linux-arm-msm@vger.kernel.org, linux-soc@vger.kernel.org, linux-pm@vger.kernel.org Cc: rnayak@codeaurora.org, bjorn.andersson@linaro.org, linux-kernel@vger.kernel.org, lorenzo.pieralisi@arm.com, rafael@kernel.org, drake@endlessm.com, sboyd@kernel.org, evgreen@chromium.org, dianders@chromium.org, mka@chromium.org, ilina@codeaurora.org, "Raju P.L.S.S.S.N" Subject: [PATCH RFC 6/6] drivers: soc: system_pm: Add suspend notifier Date: Sat, 25 Aug 2018 01:36:28 +0530 Message-Id: <1535141188-29731-7-git-send-email-rplsssn@codeaurora.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1535141188-29731-1-git-send-email-rplsssn@codeaurora.org> References: <1535141188-29731-1-git-send-email-rplsssn@codeaurora.org> Sender: linux-arm-msm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-arm-msm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP The order of suspending different devices, which is part of device suspend, during pm suspend can't be guaranteed. So once system PM device flushes the cached sleep/wake requests, other client devices may send new sleep or wake requests in their device suspend operations. The rpmh controller needs to manage such new requests if any. A notification is sent to controller to indicate the same. Signed-off-by: Raju P.L.S.S.S.N --- drivers/soc/qcom/system_pm.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/drivers/soc/qcom/system_pm.c b/drivers/soc/qcom/system_pm.c index 1451bf8..6524f7e 100644 --- a/drivers/soc/qcom/system_pm.c +++ b/drivers/soc/qcom/system_pm.c @@ -133,6 +133,7 @@ static int sys_pm_suspend(struct device *dev) /* Flush the sleep/wake sets in RSC controller */ rpmh_flush(dev); setup_pdc_wakeup_timer(true); + rpmh_notify_suspend(sys_pm_dev, true); } else { pr_err("%s:rpmh controller is busy\n", __func__); return -EBUSY; @@ -141,8 +142,14 @@ static int sys_pm_suspend(struct device *dev) return 0; } +static int sys_pm_resume(struct device *dev) +{ + rpmh_notify_suspend(sys_pm_dev, false); + return 0; +} + static const struct dev_pm_ops sys_pm_dev_pm_ops = { - SET_LATE_SYSTEM_SLEEP_PM_OPS(sys_pm_suspend, NULL) + SET_LATE_SYSTEM_SLEEP_PM_OPS(sys_pm_suspend, sys_pm_resume) }; static const struct of_device_id sys_pm_drv_match[] = {