From patchwork Wed Jun 28 10:56:51 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Abel Vesa X-Patchwork-Id: 113803 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:994d:0:b0:3d9:f83d:47d9 with SMTP id k13csp8834394vqr; Wed, 28 Jun 2023 04:04:15 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ57GqGzyDVh2DJ+NUFGSiXyA5W9S+adXVzaIBhU1NrT26the/0lc7EjOQr/WfXcdJPGbMBa X-Received: by 2002:a2e:740e:0:b0:2b5:86e4:558e with SMTP id p14-20020a2e740e000000b002b586e4558emr14141281ljc.38.1687950255316; Wed, 28 Jun 2023 04:04:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1687950255; cv=none; d=google.com; s=arc-20160816; b=dVycHhxbt1f8btVxxED/s6u8jWKJC018HgD0yy3hANwhXwJPQuw+XbpXjrosDL1gI5 V/9iwLrYZNPRvA+VbELoYJVn6uPb3MocqhDf8w+ukwwIKg47ySeNeXw4g817/YR4RHFe 23/r6s35qzk7wP28312Plq9IF04S79ilSIb3ttUm9rgrto+FYu6WaMWlZ9LMobpWEgtG GtldF/imeK6H9Jz7KqjtcB1+AmfR/vpuUUD5mKUoLquEb2njyci5ft8GZCzGWwRtwCdl dfj/0O3Xj2qujGkHPWvkQIGhkQgopbAwZTTXdNPpM8WnoNldD+a3XD73+ri6xHLeY3Ql +qdw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=QoU70+X2sNAFT4uGxGgFO5/mS/RvfhIZM1VSnqbKkks=; fh=yUwTDGrsvlHouV3fEPRrlKTGD+MlkkPh+H7LyYpVu8M=; b=NB3pqpBxH0XHg9P1dwMRN+UXyvRk4DVEZOjx/MNujxh5YeNrdrZTL1v4KN5s16dNeu UMNoCgZWANeS1YdcYZ5xNB5QS8ziA1fwQECu9OiG3mIk7sr7GQ3Ob68k91POHloPT8ih JNFQrVue5ZUC681TD6GHsUJzSyu9viVoYTbWR4v31/OQCrISX+qoq++23OdMcgojUDTt zhTrKfl/Dv+GdTT1WZm8/+NcBgLdRA1RWmZj9e9h3o8B2CgNw63b0V9vkzQlzSnimcPE rZesSodx+16WsqD98igJFPbKHtejdsdNPnf4GxClGCgPKHLqql0PEEer/XpcAvrZxV+M 7Otg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=yNEfLuqz; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id d6-20020aa7d5c6000000b00518791e01b0si5185475eds.110.2023.06.28.04.03.37; Wed, 28 Jun 2023 04:04:15 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=yNEfLuqz; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231153AbjF1K5g (ORCPT + 99 others); Wed, 28 Jun 2023 06:57:36 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60660 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230311AbjF1K5Y (ORCPT ); Wed, 28 Jun 2023 06:57:24 -0400 Received: from mail-ej1-x62f.google.com (mail-ej1-x62f.google.com [IPv6:2a00:1450:4864:20::62f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A54291BCE for ; Wed, 28 Jun 2023 03:57:00 -0700 (PDT) Received: by mail-ej1-x62f.google.com with SMTP id a640c23a62f3a-98e25fa6f5bso597165166b.3 for ; Wed, 28 Jun 2023 03:57:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1687949818; x=1690541818; 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=QoU70+X2sNAFT4uGxGgFO5/mS/RvfhIZM1VSnqbKkks=; b=yNEfLuqzNx3cDoeEIY88b/nsT6aiugtedzyOR3wsqjxHzkEQiowKXnpCBRhuwR9Wh4 2n5Sty5d3XHO9IkbQGkjaA3oUBZmdd4M2kalIZ+Sx6YoNSHqfvpho8+Squ1SEI+0iicU C5IP8OpT6/Eatnl6e4TdQWRpO5kunzN7/oXqe/BuZiypVnAUHtTuQop+ImQEMtPc5/ry ttBECp71sF05RWR3lsUih+oo0nCBZiNSlazXjtrgr9HwD8OyvNaLHJUSTR0Y8LMLp61g e1JVCQGqDCXKcqIcTgOcq1j3yEa6GZi9OdCjdNnYpNfhF6ifAisG+6+afub0kkczzd+N 13vQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1687949818; x=1690541818; 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=QoU70+X2sNAFT4uGxGgFO5/mS/RvfhIZM1VSnqbKkks=; b=EDxp9ga9zTEc7xeXR5m+ekJiaHwUWA2kaJTU6YJC7/LMya2DomJfcbEEeywi7cMpgs x5KpKrRRGw1jiqoGaW7P/Pr3lLejxXIJJOKseX16dzH+vd8iD3kgA0eIK7Cchs7MnBJs zrqw+ZTfTY2ci/grhZA4uCemEiTBSRXHFI0eAPDUKEWh38V5U7Y88wiy5Df6G642m39X wrheaXPs+K3GjLikoWYBmjVgnbDIG7dIRLn2HkEwABtiblkQdHrzSjMSczu7ANw31xvQ 5D7y2myR0chpZycM7YsWTJ2ObaIw9JB66ycQP1cGDWPP5rK76k/FEXy3rCvStFwnXzr3 5mWg== X-Gm-Message-State: AC+VfDxOhfdJVRVu6aXcps8up0Qnx8faqk3vjz2R7P07ET749F6KU47n v6xBJuc3tNmbR9Es0/VK7hWVVw== X-Received: by 2002:a17:906:da8b:b0:982:26c5:6525 with SMTP id xh11-20020a170906da8b00b0098226c56525mr34333689ejb.60.1687949818190; Wed, 28 Jun 2023 03:56:58 -0700 (PDT) Received: from hackbox.lan ([62.231.110.100]) by smtp.gmail.com with ESMTPSA id e8-20020a1709062c0800b0098921e1b064sm5544678ejh.181.2023.06.28.03.56.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 28 Jun 2023 03:56:57 -0700 (PDT) From: Abel Vesa To: "Rafael J . Wysocki" , Kevin Hilman , Ulf Hansson , avel 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 1/2] PM: domains: Allow devices attached to genpd to be managed by HW Date: Wed, 28 Jun 2023 13:56:51 +0300 Message-Id: <20230628105652.1670316-2-abel.vesa@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230628105652.1670316-1-abel.vesa@linaro.org> References: <20230628105652.1670316-1-abel.vesa@linaro.org> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1769944126759977692?= X-GMAIL-MSGID: =?utf-8?q?1769944126759977692?= 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. Signed-off-by: Ulf Hansson Signed-off-by: Abel Vesa --- drivers/base/power/domain.c | 66 +++++++++++++++++++++++++++++++++++++ include/linux/pm_domain.h | 15 +++++++++ 2 files changed, 81 insertions(+) diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c index 5cb2023581d4..23286853d1d0 100644 --- a/drivers/base/power/domain.c +++ b/drivers/base/power/domain.c @@ -541,6 +541,72 @@ void dev_pm_genpd_synced_poweroff(struct device *dev) } EXPORT_SYMBOL_GPL(dev_pm_genpd_synced_poweroff); +/** + * dev_pm_genpd_set_hwmode - Set the HW mode for the device and its PM domain. + * + * @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 device. To + * allow a consumer driver to switch the behaviour for its device in runtime, + * which may be beneficial from a latency or energy point of view, this function + * may be called. + * + * It is assumed that the users guarantee that the genpd wouldn't be detached + * 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 = 0; + + genpd = 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 == enable) + goto out; + + ret = genpd->set_hwmode_dev(genpd, dev, enable); + if (!ret) + dev_gpd_data(dev)->hw_mode = 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 mode + * setting of its the device. + * + * It is assumed that the users guarantee that the genpd wouldn't be detached + * while this routine is getting called. + */ +bool dev_pm_genpd_get_hwmode(struct device *dev) +{ + struct generic_pm_domain *genpd; + + genpd = dev_to_genpd_safe(dev); + if (!genpd) + return false; + + 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 = genpd->state_idx; diff --git a/include/linux/pm_domain.h b/include/linux/pm_domain.h index f776fb93eaa0..8f60c36851d5 100644 --- a/include/linux/pm_domain.h +++ b/include/linux/pm_domain.h @@ -146,6 +146,8 @@ 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); int (*attach_dev)(struct generic_pm_domain *domain, struct device *dev); void (*detach_dev)(struct generic_pm_domain *domain, @@ -208,6 +210,7 @@ struct generic_pm_domain_data { unsigned int performance_state; unsigned int default_pstate; unsigned int rpm_pstate; + bool hw_mode; void *data; }; @@ -237,6 +240,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); extern struct dev_power_governor simple_qos_governor; extern struct dev_power_governor pm_domain_always_on_gov; @@ -305,6 +310,16 @@ static inline ktime_t dev_pm_genpd_get_next_hrtimer(struct device *dev) static inline void dev_pm_genpd_synced_poweroff(struct device *dev) { } +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 From patchwork Wed Jun 28 10:56:52 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Abel Vesa X-Patchwork-Id: 113804 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:994d:0:b0:3d9:f83d:47d9 with SMTP id k13csp8834527vqr; Wed, 28 Jun 2023 04:04:28 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ5MVBhyOlsvVNzBA6CJPiwBXi293pkxFisGyXHZI1Fg7yov7zXHcKUWpljNd8ZA1koqczHq X-Received: by 2002:a05:6402:3455:b0:51d:d307:735c with SMTP id l21-20020a056402345500b0051dd307735cmr564001edc.20.1687950267896; Wed, 28 Jun 2023 04:04:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1687950267; cv=none; d=google.com; s=arc-20160816; b=xCPuNgJIdxEGXNMcR3PpDl1/eDvpaTf1ovHf8fZ6gKbAXQY9s9Uq9eaqr2yTA6+/lG 9sQk4/Go1MSygXjowWzSCWYEqyZALxUeMsWQlmspcsHRfDSGQB8N6zQWnxTeXvOukWFa g7W008PcyXO8YVo2+WE1DAOvK94kG8E8FChfdOcCmfa2DbV3KsNIfpMgiRaEoYJ+Rdw8 LXXZjp0MYggwhR3NUpZ46ao1WcJAHZhYtsVrLh6Y176dOAtGUoeLO+ZxzUo+NaF52ySU HK2uClaJIoMPb35cSlRmj5XqNxapI0M8oPZT/x9csZx9BCktFcCLxx+c+bNfJCtGyH23 289g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=/UOP/HXwOfjROV0iDHrU1g1p6LD4GcCF3K/FghLtNOU=; fh=yUwTDGrsvlHouV3fEPRrlKTGD+MlkkPh+H7LyYpVu8M=; b=lL6dNrcej0syuDBkr9iiyAaAGVYf7hEuYfcnw+zCx4steFrDCUbIhAIRe2u26CBhJ2 fNuUc8b5ayqJElOqrww2qk0milOjZsjW7PstklycuhNL4s2yoALEqOzOERg4cZQgvVlk ruEanach4wrbQRPP4VqAvzsKpx3XY+p/SMUeMLYJAUEcW98N7i4P/OFRhrq/zo4lvNi+ pKqD02f9rs9Px8kfF/E0bdF1GJB3DPPRtBjq/tIOFAw/Q10G6QPW0A5MrWlu1LN2uH16 R5TgqTmrewYnj+EFAfOEGiF0a7O22rvl+wHdg+XhXLX2aPbGSR0t5K7xbaVkZac4OcWA 0CqQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=dujCAIaX; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id z5-20020aa7d405000000b0051d8f9aaf88si4447531edq.659.2023.06.28.04.03.48; Wed, 28 Jun 2023 04:04:27 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=dujCAIaX; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231329AbjF1K5l (ORCPT + 99 others); Wed, 28 Jun 2023 06:57:41 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60668 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230341AbjF1K5Z (ORCPT ); Wed, 28 Jun 2023 06:57:25 -0400 Received: from mail-ej1-x62f.google.com (mail-ej1-x62f.google.com [IPv6:2a00:1450:4864:20::62f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 333871BF9 for ; Wed, 28 Jun 2023 03:57:01 -0700 (PDT) Received: by mail-ej1-x62f.google.com with SMTP id a640c23a62f3a-98d34f1e54fso582663266b.2 for ; Wed, 28 Jun 2023 03:57:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1687949819; x=1690541819; 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=/UOP/HXwOfjROV0iDHrU1g1p6LD4GcCF3K/FghLtNOU=; b=dujCAIaXSqqrylpawSmjXQ0uVV5fxHuMEQFzZO//TIz9sxd1krxA8ZDYPCDBDRVh0/ BfluOhNKHaqL76P0tQO39OagrbXFJc2LI7Tg5leqj6NdydDD+PHLgE+d3n6pCSrGdu5c qsrE6I/PhnivlF9PkTMJ1Laa3igaQiDWgWYmKdVl0J3y4kuOVTJ4Mg9PU83v4ml0UsSx LK0jT/vaxWfQQJ50Yj/VnTLXf3Aj0r5qZRmcn1iRAh7QmanZn5fC3LhQaukjGHdSnlKi B/+a2PL7DVxgndOYPox3yCot4+cfYZCKp4OCr+ZnWX93JP3lLrsTMb7JnHyfIWJF5ROo sDKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1687949819; x=1690541819; 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=/UOP/HXwOfjROV0iDHrU1g1p6LD4GcCF3K/FghLtNOU=; b=OH6AB5Yurm/g0DXioZL+P2VC5tbmlFDVfoDy8lLg9dkTIEImiYNWl4N9iI5gJrYw40 C/sZyw2HYCpwFHOt+xTh/wTiHKbJfBZtkuB4ipKljUi+OYFoRDgsuqMXEnITEFNJ22gE yHZqz0fVhd3r/UgkNbLxDurjgwK6DByaM1n8ZeSMzgE0O7kcYZJbQL9XCFGlCEMlvQ0o t1mj8kP6lrHH0vclg7IwWCvEudSUrn+D2CfyjBfE/eXwlmWM09MzU1O7nMf0EuRBTEF5 pXcJfdWsI/n1dpPbSYsLYoZ7/exQZOslVR9R7I0nG/+MdQjRS9cCKUGcfuUcxy6GHgzB GLJA== X-Gm-Message-State: AC+VfDyN9yWJvzuKI0DNDRhEwYGkYfubK7YEOdujoPgQVgU/4d1tjwCq 9L241W0w+U2b3+/YIThUVdxH1g== X-Received: by 2002:a17:907:2683:b0:957:1df0:9cbf with SMTP id bn3-20020a170907268300b009571df09cbfmr25730821ejc.19.1687949819656; Wed, 28 Jun 2023 03:56:59 -0700 (PDT) Received: from hackbox.lan ([62.231.110.100]) by smtp.gmail.com with ESMTPSA id e8-20020a1709062c0800b0098921e1b064sm5544678ejh.181.2023.06.28.03.56.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 28 Jun 2023 03:56:59 -0700 (PDT) From: Abel Vesa To: "Rafael J . Wysocki" , Kevin Hilman , Ulf Hansson , avel 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 2/2] clk: qcom: gdsc: Add support for set_hwmode_dev Date: Wed, 28 Jun 2023 13:56:52 +0300 Message-Id: <20230628105652.1670316-3-abel.vesa@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230628105652.1670316-1-abel.vesa@linaro.org> References: <20230628105652.1670316-1-abel.vesa@linaro.org> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1769944140085914063?= X-GMAIL-MSGID: =?utf-8?q?1769944140085914063?= Implement the GDSC specific genpd set_hwmode_dev callback in order to switch the HW control on or off. For any GDSC that supports HW control set this callback in order to allow its consumers to control it. Signed-off-by: Abel Vesa --- drivers/clk/qcom/gdsc.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/drivers/clk/qcom/gdsc.c b/drivers/clk/qcom/gdsc.c index 5358e28122ab..9a04bf2e4379 100644 --- a/drivers/clk/qcom/gdsc.c +++ b/drivers/clk/qcom/gdsc.c @@ -314,6 +314,26 @@ static int gdsc_enable(struct generic_pm_domain *domain) return 0; } +static int gdsc_set_hwmode_dev(struct generic_pm_domain *domain, + struct device *dev, bool enable) +{ + int ret = gdsc_hwctrl(domain_to_gdsc(domain), enable); + + if (ret) + goto out; + + /* + * Wait for the GDSC to go through a power down and + * up cycle. In case there is a status polling going on + * before the power cycle is completed it might read an + * wrong status value. + */ + udelay(1); + +out: + return ret; +} + static int gdsc_disable(struct generic_pm_domain *domain) { struct gdsc *sc = domain_to_gdsc(domain); @@ -451,6 +471,8 @@ static int gdsc_init(struct gdsc *sc) sc->pd.power_off = gdsc_disable; if (!sc->pd.power_on) sc->pd.power_on = gdsc_enable; + if (sc->flags & HW_CTRL) + sc->pd.set_hwmode_dev = gdsc_set_hwmode_dev; ret = pm_genpd_init(&sc->pd, NULL, !on); if (ret)