From nobody Wed Dec 17 21:12:28 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id BAC34C10F00 for ; Wed, 16 Aug 2023 14:58:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1343894AbjHPO6H (ORCPT ); Wed, 16 Aug 2023 10:58:07 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52318 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1343854AbjHPO5y (ORCPT ); Wed, 16 Aug 2023 10:57:54 -0400 Received: from mail-lj1-x235.google.com (mail-lj1-x235.google.com [IPv6:2a00:1450:4864:20::235]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 421DD10E9 for ; Wed, 16 Aug 2023 07:57:53 -0700 (PDT) Received: by mail-lj1-x235.google.com with SMTP id 38308e7fff4ca-2b703a0453fso100999091fa.3 for ; Wed, 16 Aug 2023 07:57:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1692197871; x=1692802671; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=YJy2R3P3tqw0+ESpB2MxKyE27+v98SJ0NGWR6OuPHME=; b=FFsAYIPCoql6xswQkEnqKEFXrppTVmLHlVv+VfbtsYgPHJnIYrdSYD/SO/BJtXlhoc wA+1z0Brl33kk5FQvjYbND1wQ9fwAOxMrJcAS/WU+uQbVZKjJAdVzCUgsZxc2x9n8hVI 2oRgIb+O1tc2w9KWRgn9oFyAPlavnDtio0/TDhWCwUS4OyFK/4yKNIPxxarXiu1Jjb2/ m96rlqO+sA7eQA1/eN8AuAWyiBevnw2+iwyXtjCTYASC+t9q7ywMhKt2tsedaY7JQkgU LXYANfX8hbUBSw+25eazY8KL4TfCrYl4y4goqFdAyoQMNmgfsLU3UXOsZlKIsiTQLiND cR4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1692197871; x=1692802671; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=YJy2R3P3tqw0+ESpB2MxKyE27+v98SJ0NGWR6OuPHME=; b=Z6YdJo1ZvEg9lKawTgvjgg8es9MTUBC1PDtA8S2AzwGAOw/295Ycp/NnZBzHwfzCgG 2a2ls7bOZyWN5B6Fk5tmVdJpGP8BNxsQYHhofp/MAFPVoA0rfFx1VdT9Jn2eZZ0uEN7V +ppEchkBknlCgeV9EAV/BPqq/TQqcbucl3Au21eZEEXYpAcUR6wbdjOZ2ShNtQ6/FU9S AO9A8GGe4t/t32bAwTMfoRaByVBWHlmDsq7M7slmI5jsZTdL3P19XINatnDTg97+ljoV d0nEZlSM1Y5cDr4bL5MKm4w0GXcsdwqEZaOItSPUYw/QvMcojJJzJ9WCvxgNiqdKCZhy gTEQ== X-Gm-Message-State: AOJu0YxM7GG6LHyYkRc7Nm069w5qDm/Xf8ht+sj6o2J3mxfddlMZgYX6 fIVChE6mCdK6QHhspMuOWW/xlw== X-Google-Smtp-Source: AGHT+IFPyEEjR3aBCl4jPyvfEu16V/bunE3zATtqhYdZEh6WtyuA71IJB08RCkr8xn8X4letoC9xUw== X-Received: by 2002:a2e:86c2:0:b0:2b9:acad:b4b2 with SMTP id n2-20020a2e86c2000000b002b9acadb4b2mr1707919ljj.6.1692197871439; Wed, 16 Aug 2023 07:57:51 -0700 (PDT) Received: from hackbox.lan ([84.232.191.92]) by smtp.gmail.com with ESMTPSA id f16-20020a170906561000b00992076f4a01sm8610403ejq.190.2023.08.16.07.57.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Aug 2023 07:57:51 -0700 (PDT) From: Abel Vesa To: "Rafael J . Wysocki" , Kevin Hilman , Ulf Hansson , Pavel Machek , Len Brown , Greg Kroah-Hartman , Bjorn Andersson , Andy Gross , Konrad Dybcio , Mike Turquette , Stephen Boyd , Taniya Das Cc: linux-pm@vger.kernel.org, Linux Kernel Mailing List , linux-arm-msm@vger.kernel.org Subject: [PATCH v2 1/6] PM: domains: Allow devices attached to genpd to be managed by HW Date: Wed, 16 Aug 2023 17:57:36 +0300 Message-Id: <20230816145741.1472721-2-abel.vesa@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230816145741.1472721-1-abel.vesa@linaro.org> References: <20230816145741.1472721-1-abel.vesa@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Ulf Hansson Some power-domains may be capable of relying on the HW to control the power for a device that's hooked up to it. Typically, for these kinds of configurations the device doesn't really need to be attached to a PM domain (genpd), from Linux point of view. However, in some cases the behaviour of the power-domain and its device can be changed in runtime. To allow a consumer driver to change the behaviour of the PM domain for its device, let's provide a new function, dev_pm_genpd_set_hwmode(). Moreover, let's add a corresponding optional genpd callback, ->set_hwmode_dev(), which the genpd provider should implement if it can support switching between HW controlled mode and SW controlled mode. Similarly, add the dev_pm_genpd_get_hwmode() to allow consumers to read the current mode and its corresponding optional genpd callback, ->get_hwmode_dev(), which the genpd provider can also implement for reading back the mode from the hardware. Signed-off-by: Ulf Hansson Signed-off-by: Abel Vesa --- Changes since v1: * reword the commit message to mention the dev_pm_genpd_get_hwmode * add the get_hwmode_dev callback to the generic_pm_domain * call the genpd provider implementation of the get_hwmode_dev from the generic API drivers/base/power/domain.c | 69 +++++++++++++++++++++++++++++++++++++ include/linux/pm_domain.h | 17 +++++++++ 2 files changed, 86 insertions(+) diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c index 5cb2023581d4..dfb4f1de540d 100644 --- a/drivers/base/power/domain.c +++ b/drivers/base/power/domain.c @@ -541,6 +541,75 @@ void dev_pm_genpd_synced_poweroff(struct device *dev) } EXPORT_SYMBOL_GPL(dev_pm_genpd_synced_poweroff); =20 +/** + * dev_pm_genpd_set_hwmode - Set the HW mode for the device and its PM dom= ain. + * + * @dev: Device for which the HW-mode should be changed. + * @enable: Value to set or unset the HW-mode. + * + * Some PM domains can rely on HW signals to control the power for a devic= e. To + * allow a consumer driver to switch the behaviour for its device in runti= me, + * which may be beneficial from a latency or energy point of view, this fu= nction + * may be called. + * + * It is assumed that the users guarantee that the genpd wouldn't be detac= hed + * while this routine is getting called. + * + * Returns 0 on success and negative error values on failures. + */ +int dev_pm_genpd_set_hwmode(struct device *dev, bool enable) +{ + struct generic_pm_domain *genpd; + int ret =3D 0; + + genpd =3D dev_to_genpd_safe(dev); + if (!genpd) + return -ENODEV; + + if (!genpd->set_hwmode_dev) + return -EOPNOTSUPP; + + genpd_lock(genpd); + + if (dev_gpd_data(dev)->hw_mode =3D=3D enable) + goto out; + + ret =3D genpd->set_hwmode_dev(genpd, dev, enable); + if (!ret) + dev_gpd_data(dev)->hw_mode =3D enable; + +out: + genpd_unlock(genpd); + return ret; +} +EXPORT_SYMBOL_GPL(dev_pm_genpd_set_hwmode); + +/** + * dev_pm_genpd_get_hwmode - Get the HW mode setting for the device. + * + * @dev: Device for which the current HW-mode setting should be fetched. + * + * This helper function allows consumer drivers to fetch the current HW mo= de + * setting of its the device. + * + * It is assumed that the users guarantee that the genpd wouldn't be detac= hed + * while this routine is getting called. + */ +bool dev_pm_genpd_get_hwmode(struct device *dev) +{ + struct generic_pm_domain *genpd; + + genpd =3D dev_to_genpd_safe(dev); + if (!genpd) + return false; + + if (genpd->get_hwmode_dev) + return genpd->get_hwmode_dev(genpd, dev); + + return dev_gpd_data(dev)->hw_mode; +} +EXPORT_SYMBOL_GPL(dev_pm_genpd_get_hwmode); + static int _genpd_power_on(struct generic_pm_domain *genpd, bool timed) { unsigned int state_idx =3D genpd->state_idx; diff --git a/include/linux/pm_domain.h b/include/linux/pm_domain.h index f776fb93eaa0..36d308ba40b0 100644 --- a/include/linux/pm_domain.h +++ b/include/linux/pm_domain.h @@ -146,6 +146,10 @@ struct generic_pm_domain { int (*set_performance_state)(struct generic_pm_domain *genpd, unsigned int state); struct gpd_dev_ops dev_ops; + int (*set_hwmode_dev)(struct generic_pm_domain *domain, + struct device *dev, bool enable); + bool (*get_hwmode_dev)(struct generic_pm_domain *domain, + struct device *dev); int (*attach_dev)(struct generic_pm_domain *domain, struct device *dev); void (*detach_dev)(struct generic_pm_domain *domain, @@ -208,6 +212,7 @@ struct generic_pm_domain_data { unsigned int performance_state; unsigned int default_pstate; unsigned int rpm_pstate; + bool hw_mode; void *data; }; =20 @@ -237,6 +242,8 @@ int dev_pm_genpd_remove_notifier(struct device *dev); void dev_pm_genpd_set_next_wakeup(struct device *dev, ktime_t next); ktime_t dev_pm_genpd_get_next_hrtimer(struct device *dev); void dev_pm_genpd_synced_poweroff(struct device *dev); +int dev_pm_genpd_set_hwmode(struct device *dev, bool enable); +bool dev_pm_genpd_get_hwmode(struct device *dev); =20 extern struct dev_power_governor simple_qos_governor; extern struct dev_power_governor pm_domain_always_on_gov; @@ -305,6 +312,16 @@ static inline ktime_t dev_pm_genpd_get_next_hrtimer(st= ruct device *dev) static inline void dev_pm_genpd_synced_poweroff(struct device *dev) { } =20 +static inline int dev_pm_genpd_set_hwmode(struct device *dev, bool enable) +{ + return -EOPNOTSUPP; +} + +static inline bool dev_pm_genpd_get_hwmode(struct device *dev) +{ + return false; +} + #define simple_qos_governor (*(struct dev_power_governor *)(NULL)) #define pm_domain_always_on_gov (*(struct dev_power_governor *)(NULL)) #endif --=20 2.34.1 From nobody Wed Dec 17 21:12:28 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id D09DCC07E8F for ; Wed, 16 Aug 2023 14:58:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1343901AbjHPO6H (ORCPT ); Wed, 16 Aug 2023 10:58:07 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35994 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1343859AbjHPO54 (ORCPT ); Wed, 16 Aug 2023 10:57:56 -0400 Received: from mail-ed1-x536.google.com (mail-ed1-x536.google.com [IPv6:2a00:1450:4864:20::536]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BE69B26BD for ; Wed, 16 Aug 2023 07:57:54 -0700 (PDT) Received: by mail-ed1-x536.google.com with SMTP id 4fb4d7f45d1cf-52164adea19so8662014a12.1 for ; Wed, 16 Aug 2023 07:57:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1692197873; x=1692802673; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=NixeQd6xSh2tNtmaq0jX+6ZW5LoNEOMcfMMtSKt75tk=; b=zf9tyl2LU6fms9X82BBE7C363LwuI0IzArByzcDFgH2ufio5w440Ni5mnXJE4r2/En mciSs6MjfoLdydInooORM+EhD+yi03jABlm83Ev/bQn70VFOpQJ5pOEfnvGUG+xx+1EI v2/hM/Kk+BzU7wCT29AJhn0kHDuXcrOCiMYEP+fcOmY9cLHxwyfN9ILV4vx2f6NpkCmk SeT/QbfT9hgJg/F8Dz7IKCqo+wZ2Hw/cIuce3VCXnaFyzalyvS7pucejADssfdsaKQzg fyclrtAV3shpb9CLihP86CcDVPxd3bQpBB3FECUaF7a64UxoChMrV5485G5UdXWY0jNJ C6Qw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1692197873; x=1692802673; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=NixeQd6xSh2tNtmaq0jX+6ZW5LoNEOMcfMMtSKt75tk=; b=GXL/yeNjgiqOaaOZ2MpVWIOqzRLNV80CRcA5HDX3wpEmZno8GswMII9iWHT7O9euSO qOqNq9o2XEpXO39ucD1HJ11WD9DGvxFVO/jXgpoifLdiqiuxvimTa/EoUPz83umiqb4P dT/5Bb4ys+2UKHibLFv54T9KUmTg3ANHCvPhYNvZFlSLmbV9D3Ec9mt9swO4sbF0u84K VxWK2DxCOfRCHZOBggawejtekiwlF6gMnfzGHEBOo0EUvua6HYAf1OfV0/zktHA8ZHcW o1irv8xcEt1/R1qnbN73aokcb9/vf2PI11bDzkWN7XM85oHI5hnoLvISJT2k/DMPMt5L cDKw== X-Gm-Message-State: AOJu0YxbmXmB5/QOweiGCGDo4Ls26KRFM+MeromUKajGVRW9kYq8Lceg jPztJmrYZObJ6PFsQhDI/3gZLg== X-Google-Smtp-Source: AGHT+IF0TqtXQdQBhempOuNMHQX9hq0+jdnohXAHrMPJL782fdIa1+n/q85sPoWG2TLxxQ4IRpEhHA== X-Received: by 2002:a17:906:1da1:b0:99c:ca27:c447 with SMTP id u1-20020a1709061da100b0099cca27c447mr1450120ejh.43.1692197873154; Wed, 16 Aug 2023 07:57:53 -0700 (PDT) Received: from hackbox.lan ([84.232.191.92]) by smtp.gmail.com with ESMTPSA id f16-20020a170906561000b00992076f4a01sm8610403ejq.190.2023.08.16.07.57.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Aug 2023 07:57:52 -0700 (PDT) From: Abel Vesa To: "Rafael J . Wysocki" , Kevin Hilman , Ulf Hansson , Pavel Machek , Len Brown , Greg Kroah-Hartman , Bjorn Andersson , Andy Gross , Konrad Dybcio , Mike Turquette , Stephen Boyd , Taniya Das Cc: linux-pm@vger.kernel.org, Linux Kernel Mailing List , linux-arm-msm@vger.kernel.org, Taniya Das Subject: [PATCH v2 2/6] PM: domains: Add the domain HW-managed mode to the summary Date: Wed, 16 Aug 2023 17:57:37 +0300 Message-Id: <20230816145741.1472721-3-abel.vesa@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230816145741.1472721-1-abel.vesa@linaro.org> References: <20230816145741.1472721-1-abel.vesa@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Now that domains support being managed by the HW, lets add that information to the genpd summary. Suggested-by: Taniya Das Signed-off-by: Abel Vesa --- drivers/base/power/domain.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c index dfb4f1de540d..053b7b510825 100644 --- a/drivers/base/power/domain.c +++ b/drivers/base/power/domain.c @@ -3171,6 +3171,15 @@ static void rtpm_status_str(struct seq_file *s, stru= ct device *dev) seq_printf(s, "%-25s ", p); } =20 +static void mode_status_str(struct seq_file *s, struct device *dev) +{ + struct generic_pm_domain_data *gpd_data; + + gpd_data =3D to_gpd_data(dev->power.subsys_data->domain_data); + + seq_printf(s, "%20s", gpd_data->hw_mode ? "HW_Mode" : "SW_Mode"); +} + static void perf_status_str(struct seq_file *s, struct device *dev) { struct generic_pm_domain_data *gpd_data; @@ -3229,6 +3238,7 @@ static int genpd_summary_one(struct seq_file *s, seq_printf(s, "\n %-50s ", kobj_path); rtpm_status_str(s, pm_data->dev); perf_status_str(s, pm_data->dev); + mode_status_str(s, pm_data->dev); kfree(kobj_path); } =20 @@ -3245,8 +3255,9 @@ static int summary_show(struct seq_file *s, void *dat= a) int ret =3D 0; =20 seq_puts(s, "domain status children = performance\n"); - seq_puts(s, " /device runt= ime status\n"); - seq_puts(s, "------------------------------------------------------------= ----------------------------------\n"); + seq_puts(s, " /device runt= ime status mode\n"); + seq_puts(s, "------------------------------------------------------------= ------------------------------------------------\n"); + =20 ret =3D mutex_lock_interruptible(&gpd_list_lock); if (ret) --=20 2.34.1 From nobody Wed Dec 17 21:12:28 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id E05DBC10F1A for ; Wed, 16 Aug 2023 14:58:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1343907AbjHPO6J (ORCPT ); Wed, 16 Aug 2023 10:58:09 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35994 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1343864AbjHPO56 (ORCPT ); Wed, 16 Aug 2023 10:57:58 -0400 Received: from mail-ej1-x62e.google.com (mail-ej1-x62e.google.com [IPv6:2a00:1450:4864:20::62e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CD46310FF for ; Wed, 16 Aug 2023 07:57:56 -0700 (PDT) Received: by mail-ej1-x62e.google.com with SMTP id a640c23a62f3a-99c353a395cso895757666b.2 for ; Wed, 16 Aug 2023 07:57:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1692197875; x=1692802675; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=XjO3mOShHLsaoichf6Eqrpw4fl2ak09M8zdPJ2UrN58=; b=eVFXG3FOuxdBG0DUvsQ/fx0N9sbRyGntltW2m8fanZFtHRRS/+J7MW0lJRj+JZnZ9P 42VhD+xzI2yWmp6osTMu7+OBy5BKT/ZiRgyBftEpkq595uyxPe1FQ/Utq2Z1pAQ5MzQ6 JnetWf0n3X04I1jffKKdIlejwMJ+fy/ppupLBXroALy2UPVz4tuLFCkSju739mTSdfoH EwsoXupBaMgeuqlCo7DgbndYIOdoa34j86lV1Hwi4LWR7nIC4It5HcztTs1XK+FiBSfm MixoAz8H1SZcxB+2EqaoblBljSRxZXyJebGpx1FODo0LDseXrE35QesOM6Ai5++J51Fb y6Xw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1692197875; x=1692802675; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=XjO3mOShHLsaoichf6Eqrpw4fl2ak09M8zdPJ2UrN58=; b=RT7vZsksMRQb+FczyeJpVuAwlTuNjQedPzLzLNIbDbXDnV49WAwYAa/twc/U6fM53d 3ycPkclDg2jBFxRcA5t0kl6YIbYyTCIcDDiE2RX9+h1qRD/meKM/Y5NNqB61AyzRHL83 KOqk8sW3DR/iSkzV6bYvH8+DbigyYV1VpMtZ2PwZ4M+DBWfNIBdcQcjN2y3zcZbRzE6V ESruEq4uft40383SfoO6i62R1/5N/yXrz2ZdMvVHLzHn545WKq0q/uWMSEMGfpyFsLCO BDthlkfuqMrLf7jub8kQIxqoq23AgwxL49v0asruXguz66Lr19YfYfzUXjG4RAD0JdSd zW2g== X-Gm-Message-State: AOJu0YyHROqoOqkIGDXPot3DYEAl5U1Xefb/Q2ybeGhlNGd+2ajJ0QI2 988nwEYaIKlD9gmn7Gtn3ZfGCA== X-Google-Smtp-Source: AGHT+IF8MjEinSQc37AIBbhkjkpbQm6kdgm/BOcGL/QhmwijZIBxjx0GVrO25dLrHE0cYi2xeBizuw== X-Received: by 2002:a17:907:74c:b0:99c:fb44:d4b6 with SMTP id xc12-20020a170907074c00b0099cfb44d4b6mr1762255ejb.62.1692197875274; Wed, 16 Aug 2023 07:57:55 -0700 (PDT) Received: from hackbox.lan ([84.232.191.92]) by smtp.gmail.com with ESMTPSA id f16-20020a170906561000b00992076f4a01sm8610403ejq.190.2023.08.16.07.57.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Aug 2023 07:57:54 -0700 (PDT) From: Abel Vesa To: "Rafael J . Wysocki" , Kevin Hilman , Ulf Hansson , Pavel Machek , Len Brown , Greg Kroah-Hartman , Bjorn Andersson , Andy Gross , Konrad Dybcio , Mike Turquette , Stephen Boyd , Taniya Das Cc: linux-pm@vger.kernel.org, Linux Kernel Mailing List , linux-arm-msm@vger.kernel.org, Jagadeesh Kona Subject: [PATCH v2 3/6] clk: qcom: gdsc: Add set and get hwmode callbacks to switch GDSC mode Date: Wed, 16 Aug 2023 17:57:38 +0300 Message-Id: <20230816145741.1472721-4-abel.vesa@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230816145741.1472721-1-abel.vesa@linaro.org> References: <20230816145741.1472721-1-abel.vesa@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Jagadeesh Kona Add support for set and get hwmode callbacks to switch the GDSC between SW and HW modes. Currently, the GDSC is moved to HW control mode using HW_CTRL flag and if this flag is present, GDSC is moved to HW mode as part of GDSC enable itself. The intention is to keep the HW_CTRL flag functionality as is, since many older chipsets still use this flag. Introduce a new HW_CTRL_TRIGGER flag to switch the GDSC back and forth between HW/SW modes dynamically at runtime. If HW_CTRL_TRIGGER flag is present, register set_hwmode_dev callback to switch the GDSC mode which can be invoked from consumer drivers using dev_pm_genpd_set_hwmode function. Unlike HW_CTRL flag, HW_CTRL_TRIGGER won't move the GDSC to HW control mode as part of GDSC enable itself, GDSC will be moved to HW control mode only when consumer driver explicity calls dev_pm_genpd_set_hwmode to switch to HW mode. Also add the dev_pm_genpd_get_hwmode to allow the consumers to read the actual HW/SW mode from hardware. Signed-off-by: Jagadeesh Kona Signed-off-by: Abel Vesa --- drivers/clk/qcom/gdsc.c | 32 ++++++++++++++++++++++++++++++++ drivers/clk/qcom/gdsc.h | 1 + 2 files changed, 33 insertions(+) diff --git a/drivers/clk/qcom/gdsc.c b/drivers/clk/qcom/gdsc.c index 5358e28122ab..3e4a721f1605 100644 --- a/drivers/clk/qcom/gdsc.c +++ b/drivers/clk/qcom/gdsc.c @@ -363,6 +363,34 @@ static int gdsc_disable(struct generic_pm_domain *doma= in) return 0; } =20 +static int gdsc_set_mode(struct generic_pm_domain *domain, struct device *= dev, bool mode) +{ + struct gdsc *sc =3D domain_to_gdsc(domain); + + if (sc->rsupply && !regulator_is_enabled(sc->rsupply)) { + pr_err("Cannot set mode while parent is disabled\n"); + return -EIO; + } + + return gdsc_hwctrl(sc, mode); +} + +static bool gdsc_get_mode(struct generic_pm_domain *domain, struct device = *dev) +{ + struct gdsc *sc =3D domain_to_gdsc(domain); + u32 val; + int ret; + + ret =3D regmap_read(sc->regmap, sc->gdscr, &val); + if (ret) + return ret; + + if (val & HW_CONTROL_MASK) + return true; + + return false; +} + static int gdsc_init(struct gdsc *sc) { u32 mask, val; @@ -451,6 +479,10 @@ static int gdsc_init(struct gdsc *sc) sc->pd.power_off =3D gdsc_disable; if (!sc->pd.power_on) sc->pd.power_on =3D gdsc_enable; + if (sc->flags & HW_CTRL_TRIGGER) { + sc->pd.set_hwmode_dev =3D gdsc_set_mode; + sc->pd.get_hwmode_dev =3D gdsc_get_mode; + } =20 ret =3D pm_genpd_init(&sc->pd, NULL, !on); if (ret) diff --git a/drivers/clk/qcom/gdsc.h b/drivers/clk/qcom/gdsc.h index 803512688336..1e2779b823d1 100644 --- a/drivers/clk/qcom/gdsc.h +++ b/drivers/clk/qcom/gdsc.h @@ -67,6 +67,7 @@ struct gdsc { #define ALWAYS_ON BIT(6) #define RETAIN_FF_ENABLE BIT(7) #define NO_RET_PERIPH BIT(8) +#define HW_CTRL_TRIGGER BIT(9) struct reset_controller_dev *rcdev; unsigned int *resets; unsigned int reset_count; --=20 2.34.1 From nobody Wed Dec 17 21:12:28 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id F05C9C10F19 for ; Wed, 16 Aug 2023 14:58:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1343915AbjHPO6K (ORCPT ); Wed, 16 Aug 2023 10:58:10 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52318 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1343873AbjHPO57 (ORCPT ); Wed, 16 Aug 2023 10:57:59 -0400 Received: from mail-ej1-x633.google.com (mail-ej1-x633.google.com [IPv6:2a00:1450:4864:20::633]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6C07910E9 for ; Wed, 16 Aug 2023 07:57:58 -0700 (PDT) Received: by mail-ej1-x633.google.com with SMTP id a640c23a62f3a-99c1c66876aso882807466b.2 for ; Wed, 16 Aug 2023 07:57:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1692197877; x=1692802677; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Nhu7qUgFNvKeZH+hR8i6J/UgYY5l7kY9GQdBaFblVZw=; b=mOxuAMzpiZk7uOwBll137LwsChgoZ2GjH1Kz1quS893yrKUKEmt3QRDzzsr1DtDllu GK9EK4qH/ZfmB45mo6VPDf4HdDl3MxbgDLzn0mzx+rsMTDVjQ4pKmNYto+GM8pphhzbp 4kAgHN2gRLkG20GzxJPrshQv5tXB0kW+nBbI5p3lItSQccAZbIMhnCo+yEOrQqhfgVP1 XGGNaZu34SoSybNQQL+vE397aCFnhAFTKrAE9qsSw96m3hEXPDUv8QIp2LhqKhgrT89B k3kx/s35hbSRbsjPZu3hAj1GiKY1k7wM7KaR6Gxih6oTECwkDJGyOa4vA8+e4tlDnKnG vmgA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1692197877; x=1692802677; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Nhu7qUgFNvKeZH+hR8i6J/UgYY5l7kY9GQdBaFblVZw=; b=Jk+cf/l1ZKKAksNVesQDcqMFgVnvE0InceL6g3H6PW1w2gojQTI8o4/XeO4tYAyuVU zBa3hmqqPVKzhygtUA6kOpgL4qNIckxOBeHFcoW0hTBxIep46nNHt39wcy3kCeKJUXt1 V5RIVw2/k9JvRtq8UCYPE+42PjJ4qfofPwoggeeo6FHF1t6UHceJWpSq0rRVOt/GVNDa lFV56bBnnSfXaIc8s46ScEXH31vzRCWshSZMMDQyZoRGm5Wf76p67DIjDeGKOb5UnMi8 Vg04j9CtLeaf6e2rkdPMjrkCLzw1sf3Dofw6++xKwa3A+ezpoRE89jRAhZ0faUF8YCyV F5yw== X-Gm-Message-State: AOJu0YzXXLt8/GRKaQV62BijZHX9eTLHiBt6HwPHvuglNS7MlYGaH3ue kLq9syJ3+wQvgciAwFw5XoOBNg== X-Google-Smtp-Source: AGHT+IGhs6XfomhxZw6A/2i2NDiM6M0F+XDb/B8g19gpmZWAxwq278z9yA/vfMZHnjbJfq9v05jfKQ== X-Received: by 2002:a17:906:8454:b0:987:5761:2868 with SMTP id e20-20020a170906845400b0098757612868mr1358210ejy.11.1692197876989; Wed, 16 Aug 2023 07:57:56 -0700 (PDT) Received: from hackbox.lan ([84.232.191.92]) by smtp.gmail.com with ESMTPSA id f16-20020a170906561000b00992076f4a01sm8610403ejq.190.2023.08.16.07.57.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Aug 2023 07:57:56 -0700 (PDT) From: Abel Vesa To: "Rafael J . Wysocki" , Kevin Hilman , Ulf Hansson , Pavel Machek , Len Brown , Greg Kroah-Hartman , Bjorn Andersson , Andy Gross , Konrad Dybcio , Mike Turquette , Stephen Boyd , Taniya Das Cc: linux-pm@vger.kernel.org, Linux Kernel Mailing List , linux-arm-msm@vger.kernel.org, Jagadeesh Kona Subject: [PATCH v2 4/6] clk: qcom: Use HW_CTRL_TRIGGER flag to switch video GDSC to HW mode Date: Wed, 16 Aug 2023 17:57:39 +0300 Message-Id: <20230816145741.1472721-5-abel.vesa@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230816145741.1472721-1-abel.vesa@linaro.org> References: <20230816145741.1472721-1-abel.vesa@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Jagadeesh Kona The current HW_CTRL flag switches the video GDSC to HW control mode as part of GDSC enable itself, instead of that use HW_CTRL_TRIGGER flag to give consumer drivers more control and switch the GDSC mode as and when required. HW_CTRL_TRIGGER flag allows consumer drivers to switch the video GDSC to HW/SW control modes at runtime using dev_pm_genpd_set_hwmode API. Signed-off-by: Jagadeesh Kona Signed-off-by: Abel Vesa Acked-by: Konrad Dybcio --- drivers/clk/qcom/videocc-sc7180.c | 2 +- drivers/clk/qcom/videocc-sc7280.c | 2 +- drivers/clk/qcom/videocc-sdm845.c | 4 ++-- drivers/clk/qcom/videocc-sm8250.c | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/clk/qcom/videocc-sc7180.c b/drivers/clk/qcom/videocc-s= c7180.c index 5b9b54f616b8..51439f7ba70c 100644 --- a/drivers/clk/qcom/videocc-sc7180.c +++ b/drivers/clk/qcom/videocc-sc7180.c @@ -166,7 +166,7 @@ static struct gdsc vcodec0_gdsc =3D { .pd =3D { .name =3D "vcodec0_gdsc", }, - .flags =3D HW_CTRL, + .flags =3D HW_CTRL_TRIGGER, .pwrsts =3D PWRSTS_OFF_ON, }; =20 diff --git a/drivers/clk/qcom/videocc-sc7280.c b/drivers/clk/qcom/videocc-s= c7280.c index 615695d82319..3d07b1e95986 100644 --- a/drivers/clk/qcom/videocc-sc7280.c +++ b/drivers/clk/qcom/videocc-sc7280.c @@ -236,7 +236,7 @@ static struct gdsc mvs0_gdsc =3D { .name =3D "mvs0_gdsc", }, .pwrsts =3D PWRSTS_OFF_ON, - .flags =3D HW_CTRL | RETAIN_FF_ENABLE, + .flags =3D HW_CTRL_TRIGGER | RETAIN_FF_ENABLE, }; =20 static struct gdsc mvsc_gdsc =3D { diff --git a/drivers/clk/qcom/videocc-sdm845.c b/drivers/clk/qcom/videocc-s= dm845.c index c77a4dd5d39c..dad011c48973 100644 --- a/drivers/clk/qcom/videocc-sdm845.c +++ b/drivers/clk/qcom/videocc-sdm845.c @@ -260,7 +260,7 @@ static struct gdsc vcodec0_gdsc =3D { }, .cxcs =3D (unsigned int []){ 0x890, 0x930 }, .cxc_count =3D 2, - .flags =3D HW_CTRL | POLL_CFG_GDSCR, + .flags =3D HW_CTRL_TRIGGER | POLL_CFG_GDSCR, .pwrsts =3D PWRSTS_OFF_ON, }; =20 @@ -271,7 +271,7 @@ static struct gdsc vcodec1_gdsc =3D { }, .cxcs =3D (unsigned int []){ 0x8d0, 0x950 }, .cxc_count =3D 2, - .flags =3D HW_CTRL | POLL_CFG_GDSCR, + .flags =3D HW_CTRL_TRIGGER | POLL_CFG_GDSCR, .pwrsts =3D PWRSTS_OFF_ON, }; =20 diff --git a/drivers/clk/qcom/videocc-sm8250.c b/drivers/clk/qcom/videocc-s= m8250.c index ad46c4014a40..c1b73d852f1c 100644 --- a/drivers/clk/qcom/videocc-sm8250.c +++ b/drivers/clk/qcom/videocc-sm8250.c @@ -293,7 +293,7 @@ static struct gdsc mvs0_gdsc =3D { .pd =3D { .name =3D "mvs0_gdsc", }, - .flags =3D HW_CTRL, + .flags =3D HW_CTRL_TRIGGER, .pwrsts =3D PWRSTS_OFF_ON, }; =20 @@ -302,7 +302,7 @@ static struct gdsc mvs1_gdsc =3D { .pd =3D { .name =3D "mvs1_gdsc", }, - .flags =3D HW_CTRL, + .flags =3D HW_CTRL_TRIGGER, .pwrsts =3D PWRSTS_OFF_ON, }; =20 --=20 2.34.1 From nobody Wed Dec 17 21:12:28 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 14CEAC001E0 for ; Wed, 16 Aug 2023 14:59:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1343873AbjHPO6f (ORCPT ); Wed, 16 Aug 2023 10:58:35 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40098 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1343568AbjHPO6B (ORCPT ); Wed, 16 Aug 2023 10:58:01 -0400 Received: from mail-lj1-x232.google.com (mail-lj1-x232.google.com [IPv6:2a00:1450:4864:20::232]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4902C269F for ; Wed, 16 Aug 2023 07:58:00 -0700 (PDT) Received: by mail-lj1-x232.google.com with SMTP id 38308e7fff4ca-2b9bf52cd08so98286431fa.2 for ; Wed, 16 Aug 2023 07:58:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1692197878; x=1692802678; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=k/Dhb70OK4hEGD5pj/9T1Ud8kYLrafnZW6YW0Jaj+4w=; b=GSbRu6Lwj5436wM5tdbSf4MtNpZI4hlWLLvF5zhtg/sFo3YPqZSp8zfOtrPqi7NVkT EwSs4eqa+yKmSXx2DMbI+oKfNOQmsHTC1PzrKUdtp/fa3fAujrBKtVzD3BVrYdqpMsDV a3V19ukrZcDgVPhcn1cUW03TQDW+qRvoDqIDNkfXjHKvFu+g5Mf8Zr6RjuePfn76naXd To0IWQlFVBiENzPqkOzq27GHVbbMFUCo0/HSrAMeOvHmLWJbnan7m1MPaOOVY1MmcYfC FAOKwxeCrNQAMgrsToZvO4xSTI/p3VRNFlShTCj7LFULu5gDpj6eBBGOKyM/0oZQdf2p efzA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1692197878; x=1692802678; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=k/Dhb70OK4hEGD5pj/9T1Ud8kYLrafnZW6YW0Jaj+4w=; b=i8TxI67kMEvAzG+8uaErXFigV11+DpCz85K5hjWciJYSeMpNHjqVaNaNd9zmAOYAED xSoD2c2vnuVyFoiutbogpsfdwa2QhBv9NupRFgxinm6d68FIFGysHCSfCFLIO7RM5nk7 ilhFtykNsnVMtMdnft32aP6aqOnIxKUMvYApCedc5l0eh/r8su7jfTXHw/bwJJXYSw8I c7N9zhAhota+p7KH3dWOVd5o6bP8CwyvfO/Q9yjy+xAgeaA4XXUp5N+l9lBrX+9HZFII T7fq1cp9ClPEUWd99cS1ZhzqfA5V3hUvPXjJ8LXyDYwuIs6Yhj0eG76YWuVyABZwKrtC EDGw== X-Gm-Message-State: AOJu0YxqggRaO0DkjXlp9oVVHyEPguynCfqbJfYeuTO2mJex3IOlmQRg PPug8mEbovsHRvTMKGZ9m4kpgA== X-Google-Smtp-Source: AGHT+IEnM9PXE7B4AuNAxxSv1zZwFLpPB1WCSVeswBWNfAQ+cCEVR/xjs/m5wCSsEtxdn+/Sml1Eew== X-Received: by 2002:a2e:b04d:0:b0:2b6:e6cc:9057 with SMTP id d13-20020a2eb04d000000b002b6e6cc9057mr1719538ljl.51.1692197878654; Wed, 16 Aug 2023 07:57:58 -0700 (PDT) Received: from hackbox.lan ([84.232.191.92]) by smtp.gmail.com with ESMTPSA id f16-20020a170906561000b00992076f4a01sm8610403ejq.190.2023.08.16.07.57.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Aug 2023 07:57:58 -0700 (PDT) From: Abel Vesa To: "Rafael J . Wysocki" , Kevin Hilman , Ulf Hansson , Pavel Machek , Len Brown , Greg Kroah-Hartman , Bjorn Andersson , Andy Gross , Konrad Dybcio , Mike Turquette , Stephen Boyd , Taniya Das Cc: linux-pm@vger.kernel.org, Linux Kernel Mailing List , linux-arm-msm@vger.kernel.org, Jagadeesh Kona Subject: [PATCH v2 5/6] clk: qcom: videocc-sm8550: Use HW_CTRL_TRIGGER instead of HW_CTRL for GDSC Date: Wed, 16 Aug 2023 17:57:40 +0300 Message-Id: <20230816145741.1472721-6-abel.vesa@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230816145741.1472721-1-abel.vesa@linaro.org> References: <20230816145741.1472721-1-abel.vesa@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Jagadeesh Kona HW_CTRL moves the GDSC to HW control mode as part of GDSC enable itself. Use HW_CTRL_TRIGGER flag instead of HW_CTRL flag for video GDSC's to switch the GDSC to HW/SW control modes only when consumer requested to switch GDSC mode using dev_pm_genpd_set_hwmode. Signed-off-by: Jagadeesh Kona --- drivers/clk/qcom/videocc-sm8550.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/clk/qcom/videocc-sm8550.c b/drivers/clk/qcom/videocc-s= m8550.c index 3bb136ec31b1..504b2ef264eb 100644 --- a/drivers/clk/qcom/videocc-sm8550.c +++ b/drivers/clk/qcom/videocc-sm8550.c @@ -324,7 +324,7 @@ static struct gdsc video_cc_mvs0_gdsc =3D { }, .pwrsts =3D PWRSTS_OFF_ON, .parent =3D &video_cc_mvs0c_gdsc.pd, - .flags =3D POLL_CFG_GDSCR | RETAIN_FF_ENABLE | HW_CTRL, + .flags =3D POLL_CFG_GDSCR | RETAIN_FF_ENABLE | HW_CTRL_TRIGGER, }; =20 static struct gdsc video_cc_mvs1c_gdsc =3D { @@ -349,7 +349,7 @@ static struct gdsc video_cc_mvs1_gdsc =3D { }, .pwrsts =3D PWRSTS_OFF_ON, .parent =3D &video_cc_mvs1c_gdsc.pd, - .flags =3D POLL_CFG_GDSCR | RETAIN_FF_ENABLE | HW_CTRL, + .flags =3D POLL_CFG_GDSCR | RETAIN_FF_ENABLE | HW_CTRL_TRIGGER, }; =20 static struct clk_regmap *video_cc_sm8550_clocks[] =3D { --=20 2.34.1 From nobody Wed Dec 17 21:12:29 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 26ED9C04FDF for ; Wed, 16 Aug 2023 14:59:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1343900AbjHPO6h (ORCPT ); Wed, 16 Aug 2023 10:58:37 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40104 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1343857AbjHPO6E (ORCPT ); Wed, 16 Aug 2023 10:58:04 -0400 Received: from mail-ej1-x634.google.com (mail-ej1-x634.google.com [IPv6:2a00:1450:4864:20::634]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CF2C610FF for ; Wed, 16 Aug 2023 07:58:01 -0700 (PDT) Received: by mail-ej1-x634.google.com with SMTP id a640c23a62f3a-99bed101b70so900189766b.3 for ; Wed, 16 Aug 2023 07:58:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1692197880; x=1692802680; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=LXXq2J2v0znEd/slBrHNIHaX0NWnThgRSmGcOnkclzo=; b=RLLFm963QdYyPg8NmWkJFydVAkFAbPWKZsRnRObJNKKKGL1F3Wq8wcfwTScjRvo051 JL7xt1zPDSLk2kBVTGRfndqzd0PRptvfnxAInTozWs6nuMxiTgAJzvKwV+5fxqqvf4Jn YQd3tvcuBzoS1UgUzymGphSEtLs41u3vDurGWIBIjupLOZuVv9zD5xHYqjXnH259dSLx y+QaWXlXKxXLiMBqKonuzpoCmDReg/TrGyDkYQTqR1GnJpVkyIJX6H2QiNhsQ3TUpQqB P4NtwqzR3mZ6FpeJIRthfTGMo/GgmWsyYv+k8AfRZ+tzcll921q3ArrU2IXUGQ9dXXgm 277A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1692197880; x=1692802680; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=LXXq2J2v0znEd/slBrHNIHaX0NWnThgRSmGcOnkclzo=; b=Oq8st9EMMaXtiISoNjuxcvlzWSiiyGaUxMNP3dupanY3nrSr0lLKhZ77A5ofzcHADH aFl/YhFj9lQtxUa15Q+4Y86p1NoCEYDB3aY5qtK+hw3zdfCHdI8bnxFmSbqQI5fonMYE aStp+mpZIGhUEvnqTV6ruw/QGF4nCXRW3EUxG3WwnoRNtzBHfszILnFowTFr4FBrPQK+ PdLbuB+vxvB1zLl1cOaKI/KzEkxBt8nNJOl1oTFI9WYdPGL1DCmjjrU3YFXiNcjCy2D7 daho+HzFGF9plgzhX0O5PXQpG9YYKhskWLQ+prfKzZs2qvoIQiaMdhKYly4U7N0S79Ta fBOw== X-Gm-Message-State: AOJu0YxCGqcUKpEn0HmavrCKzuVMujwQ7GqgB5xC+q9OM6+xJRsEn7Q/ fYffS8/Oo9kkaHh31CgqXl99WA== X-Google-Smtp-Source: AGHT+IErWuo487P1gppy5gcseBIz5s35Q9KNWleS48GF3pBAoqGSehYn6+tyyO8P2oP4eNnMDzvG4g== X-Received: by 2002:a17:907:78c2:b0:993:e691:6dd5 with SMTP id kv2-20020a17090778c200b00993e6916dd5mr1755130ejc.7.1692197880305; Wed, 16 Aug 2023 07:58:00 -0700 (PDT) Received: from hackbox.lan ([84.232.191.92]) by smtp.gmail.com with ESMTPSA id f16-20020a170906561000b00992076f4a01sm8610403ejq.190.2023.08.16.07.57.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Aug 2023 07:57:59 -0700 (PDT) From: Abel Vesa To: "Rafael J . Wysocki" , Kevin Hilman , Ulf Hansson , Pavel Machek , Len Brown , Greg Kroah-Hartman , Bjorn Andersson , Andy Gross , Konrad Dybcio , Mike Turquette , Stephen Boyd , Taniya Das Cc: linux-pm@vger.kernel.org, Linux Kernel Mailing List , linux-arm-msm@vger.kernel.org, Jagadeesh Kona Subject: [PATCH v2 6/6] venus: pm_helpers: Use dev_pm_genpd_set_hwmode to switch GDSC mode Date: Wed, 16 Aug 2023 17:57:41 +0300 Message-Id: <20230816145741.1472721-7-abel.vesa@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230816145741.1472721-1-abel.vesa@linaro.org> References: <20230816145741.1472721-1-abel.vesa@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Jagadeesh Kona This change demonstrates the use of dev_pm_genpd_set_hwmode API from video driver to switch the video mvs0 gdsc to SW/HW modes at runtime based on requirement. This change adds a new boolean array member vcodec_pmdomains_hwctrl in venus_resources structure to indicate if GDSC's have HW control support or not. This data is used in vcodec_control_v4() to check if GDSC has support to switch to HW control mode and then call dev_pm_genpd_set_hwmode to switch the GDSC mode. Signed-off-by: Jagadeesh Kona Signed-off-by: Abel Vesa Acked-by: Konrad Dybcio --- drivers/media/platform/qcom/venus/core.c | 4 ++ drivers/media/platform/qcom/venus/core.h | 1 + .../media/platform/qcom/venus/pm_helpers.c | 47 ++++++++----------- 3 files changed, 25 insertions(+), 27 deletions(-) diff --git a/drivers/media/platform/qcom/venus/core.c b/drivers/media/platf= orm/qcom/venus/core.c index 054b8e74ba4f..8145062ab6f7 100644 --- a/drivers/media/platform/qcom/venus/core.c +++ b/drivers/media/platform/qcom/venus/core.c @@ -706,6 +706,7 @@ static const struct venus_resources sdm845_res_v2 =3D { .vcodec1_clks =3D { "vcodec1_core", "vcodec1_bus" }, .vcodec_clks_num =3D 2, .vcodec_pmdomains =3D { "venus", "vcodec0", "vcodec1" }, + .vcodec_pmdomains_hwctrl =3D { false, true, true }, .vcodec_pmdomains_num =3D 3, .opp_pmdomain =3D (const char *[]) { "cx", NULL }, .vcodec_num =3D 2, @@ -755,6 +756,7 @@ static const struct venus_resources sc7180_res =3D { .vcodec0_clks =3D { "vcodec0_core", "vcodec0_bus" }, .vcodec_clks_num =3D 2, .vcodec_pmdomains =3D { "venus", "vcodec0" }, + .vcodec_pmdomains_hwctrl =3D { false, true }, .vcodec_pmdomains_num =3D 2, .opp_pmdomain =3D (const char *[]) { "cx", NULL }, .vcodec_num =3D 1, @@ -812,6 +814,7 @@ static const struct venus_resources sm8250_res =3D { .vcodec0_clks =3D { "vcodec0_core" }, .vcodec_clks_num =3D 1, .vcodec_pmdomains =3D { "venus", "vcodec0" }, + .vcodec_pmdomains_hwctrl =3D { false, true }, .vcodec_pmdomains_num =3D 2, .opp_pmdomain =3D (const char *[]) { "mx", NULL }, .vcodec_num =3D 1, @@ -871,6 +874,7 @@ static const struct venus_resources sc7280_res =3D { .vcodec0_clks =3D {"vcodec_core", "vcodec_bus"}, .vcodec_clks_num =3D 2, .vcodec_pmdomains =3D { "venus", "vcodec0" }, + .vcodec_pmdomains_hwctrl =3D { false, true }, .vcodec_pmdomains_num =3D 2, .opp_pmdomain =3D (const char *[]) { "cx", NULL }, .vcodec_num =3D 1, diff --git a/drivers/media/platform/qcom/venus/core.h b/drivers/media/platf= orm/qcom/venus/core.h index 4a633261ece4..6d591ecad482 100644 --- a/drivers/media/platform/qcom/venus/core.h +++ b/drivers/media/platform/qcom/venus/core.h @@ -73,6 +73,7 @@ struct venus_resources { const char * const vcodec1_clks[VIDC_VCODEC_CLKS_NUM_MAX]; unsigned int vcodec_clks_num; const char * const vcodec_pmdomains[VIDC_PMDOMAINS_NUM_MAX]; + bool vcodec_pmdomains_hwctrl[VIDC_PMDOMAINS_NUM_MAX]; unsigned int vcodec_pmdomains_num; const char **opp_pmdomain; unsigned int vcodec_num; diff --git a/drivers/media/platform/qcom/venus/pm_helpers.c b/drivers/media= /platform/qcom/venus/pm_helpers.c index 48c9084bb4db..c53eef23c793 100644 --- a/drivers/media/platform/qcom/venus/pm_helpers.c +++ b/drivers/media/platform/qcom/venus/pm_helpers.c @@ -408,35 +408,28 @@ static const struct venus_pm_ops pm_ops_v3 =3D { =20 static int vcodec_control_v4(struct venus_core *core, u32 coreid, bool ena= ble) { - void __iomem *ctrl, *stat; - u32 val; - int ret; - - if (IS_V6(core)) { - ctrl =3D core->wrapper_base + WRAPPER_CORE_POWER_CONTROL_V6; - stat =3D core->wrapper_base + WRAPPER_CORE_POWER_STATUS_V6; - } else if (coreid =3D=3D VIDC_CORE_ID_1) { - ctrl =3D core->wrapper_base + WRAPPER_VCODEC0_MMCC_POWER_CONTROL; - stat =3D core->wrapper_base + WRAPPER_VCODEC0_MMCC_POWER_STATUS; - } else { - ctrl =3D core->wrapper_base + WRAPPER_VCODEC1_MMCC_POWER_CONTROL; - stat =3D core->wrapper_base + WRAPPER_VCODEC1_MMCC_POWER_STATUS; - } - - if (enable) { - writel(0, ctrl); - - ret =3D readl_poll_timeout(stat, val, val & BIT(1), 1, 100); - if (ret) - return ret; - } else { - writel(1, ctrl); + int i, ret =3D 0; + struct device *dev =3D core->dev; + const struct venus_resources *res =3D core->res; =20 - ret =3D readl_poll_timeout(stat, val, !(val & BIT(1)), 1, 100); - if (ret) - return ret; + for (i =3D 0; i < res->vcodec_pmdomains_num; i++) { + if (res->vcodec_pmdomains_hwctrl[i]) { + + if (!core->pmdomains[i]) + return -ENODEV; + + /* + * enable( true ), switch the gdsc to SW mode + * enable( false), switch the gdsc to HW mode + */ + ret =3D dev_pm_genpd_set_hwmode(core->pmdomains[i], !enable); + if (ret) { + dev_err(dev, "Failed to switch power-domain:%d to %s mode\n", + i, enable ? "SW" : "HW"); + return ret; + } + } } - return 0; } =20 --=20 2.34.1