From patchwork Mon Sep 25 13:17:07 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ulf Hansson X-Patchwork-Id: 13397787 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 bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 04051CE7A81 for ; Mon, 25 Sep 2023 13:18:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=1ZmWcikpovdV3qL8lUCWhTi13KQF62Bw0vAFzjBjoBM=; b=ifEABx/ludtbdP U025l5fjM9oOoH4LlRWD3kgJa1Bqzlt4NRxLM2JMYzxDGApYNZ+7htFTBQAvb+EUle4nlVEDPdMbR VlsUXZfxhub4v6k1AEuwahU81a3MN4YgfPMO7rYcDNO7DEgNC47Fga9pWVSLv0wilFogkSqTyBe0E jqscE2rXSCJmANRTeP6c7gB2/vc18jLlUGgrP0Dov2EPXEJcQpUUxi1V6X3Hg7p651ZOOgnrIMx+P MGscEO2VnWerG5GAPD86rCXaH1VCmkvgv2JcgEXACqFLKHn3GWBVVP77Qa/y4zzp+mWtgKIgn07OX wGU57KWtbKbMbMbdoEUQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qklTN-00EJPH-2S; Mon, 25 Sep 2023 13:18:01 +0000 Received: from mail-lf1-x129.google.com ([2a00:1450:4864:20::129]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qklTK-00EJNr-2t for linux-arm-kernel@lists.infradead.org; Mon, 25 Sep 2023 13:18:00 +0000 Received: by mail-lf1-x129.google.com with SMTP id 2adb3069b0e04-5042f391153so7478974e87.1 for ; Mon, 25 Sep 2023 06:17:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1695647875; x=1696252675; darn=lists.infradead.org; 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=8U5TCt8PhKvPqkMPolS3qJOc5aJpgLowONzlvaY1uCA=; b=HW0ED0bmC2Sqr/MSLupEPsNkUW4MdmXAkKYZgGDrJdKu8ktA3YGBcxcKMWWIQY9pns wIrGF41X1xzbJw59Yp5FeZEjy+yIWTVzzmgO4YKHkZLwjwzs2aLbm8DdkKivoNBRgIu4 qBZew9KFklaaU9jtGX0OlCQG3IDmxn+C++QCjM1/UFdLnJx2u6TX+TdMiZe2jo1TD+uM 0CXd7nIpJmlBzNfOi6ceI56Eput7CYZgt43s6y2JVNDYikReuVWqfW0Pip84ZutMoQkj Wl2TjoTyWHm3GeB3jxkxLhDXCN3EegWwD3Gu8gz3vx3dB4dWPeTvQQTH3/Yv416iNac3 W7dQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695647875; x=1696252675; 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=8U5TCt8PhKvPqkMPolS3qJOc5aJpgLowONzlvaY1uCA=; b=bUsvwW5rmlwgnHTg0BBMTdW8W5ZclDG/ihydBw0B538QE2i7U73UU0LJDZpS6Mh5JD SJwWySqpYXLFy97FWwPNa1Y/aMKtZFQVdBulZZw4n0ah6hk/quR26bGOvWri9wU2Ia4a vVe7le7jkUbCdJ2zh730Azf1fyLcahIvN5u7i/B3HOOYFnfOyY8zk03RWqJZsUewokvt m2NwSo3F/rH0mV33ywLvL5m0NcUfRAFtrO+kH/1Qhil1JxUhK+tha4bY03ZhCU2i4UyO ++snXZq4spLpoBvae85fBFMxdkNGFGWI3yVxK+/vehmDC2E9SeTqiBavfgm/pU6+lFkd 60NQ== X-Gm-Message-State: AOJu0YxsIgbxw4I5bsYGALbXjlpy1a7VXGt/BQDyfiPTiBrovPA0dNIY TsEdqaSYq7oZiqXDxMOj09Xs9O7GqP/NE8kc9Fo= X-Google-Smtp-Source: AGHT+IHKbJtqXxLpoL/3TxVjGxZPgSGBoxzRkGP+PUJOzo30gCEuhg29mQ3rnnoMG3KuUNvxb6UVyg== X-Received: by 2002:a05:6512:acd:b0:4f9:dac6:2f3d with SMTP id n13-20020a0565120acd00b004f9dac62f3dmr3152406lfu.13.1695647875663; Mon, 25 Sep 2023 06:17:55 -0700 (PDT) Received: from uffe-tuxpro14.. (h-94-254-63-18.NA.cust.bahnhof.se. [94.254.63.18]) by smtp.gmail.com with ESMTPSA id m29-20020a056512015d00b004fe10276bbfsm1823583lfo.296.2023.09.25.06.17.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 25 Sep 2023 06:17:55 -0700 (PDT) From: Ulf Hansson To: Sudeep Holla , Cristian Marussi , Viresh Kumar , "Rafael J . Wysocki" Cc: Nishanth Menon , Stephen Boyd , Nikunj Kela , Prasad Sodagudi , Alexandre Torgue , Ulf Hansson , linux-pm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 1/9] PM: domains: Introduce dev_pm_domain_set_performance_state() Date: Mon, 25 Sep 2023 15:17:07 +0200 Message-Id: <20230925131715.138411-2-ulf.hansson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230925131715.138411-1-ulf.hansson@linaro.org> References: <20230925131715.138411-1-ulf.hansson@linaro.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230925_061758_933460_7C1D0A9C X-CRM114-Status: GOOD ( 19.25 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org The generic PM domain is currently the only PM domain variant that supports performance scaling. To allow performance scaling to be supported through a common interface, let's add an optional callback ->set_performance_state(), in the struct dev_pm_domain. Moreover, let's add a function, dev_pm_domain_set_performance_state(), that may be called by consumers to request a new performance state for a device through its PM domain. Note that, in most cases it's preferred that a consumer use the OPP library to request a new performance state for its device. Although, this requires some additional changes to be supported, which are being implemented from subsequent changes. Signed-off-by: Ulf Hansson --- drivers/base/power/common.c | 21 +++++++++++++++++++++ include/linux/pm.h | 2 ++ include/linux/pm_domain.h | 6 ++++++ 3 files changed, 29 insertions(+) diff --git a/drivers/base/power/common.c b/drivers/base/power/common.c index 72115917e0bd..44ec20918a4d 100644 --- a/drivers/base/power/common.c +++ b/drivers/base/power/common.c @@ -228,3 +228,24 @@ void dev_pm_domain_set(struct device *dev, struct dev_pm_domain *pd) device_pm_check_callbacks(dev); } EXPORT_SYMBOL_GPL(dev_pm_domain_set); + +/** + * dev_pm_domain_set_performance_state - Request a new performance state. + * @dev: The device to make the request for. + * @state: Target performance state for the device. + * + * This function should be called when a new performance state needs to be + * requested for a device that is attached to a PM domain. Note that, the + * support for performance scaling for PM domains is optional. + * + * Returns 0 on success and when performance scaling isn't supported, negative + * error code on failure. + */ +int dev_pm_domain_set_performance_state(struct device *dev, unsigned int state) +{ + if (dev->pm_domain && dev->pm_domain->set_performance_state) + return dev->pm_domain->set_performance_state(dev, state); + + return 0; +} +EXPORT_SYMBOL_GPL(dev_pm_domain_set_performance_state); diff --git a/include/linux/pm.h b/include/linux/pm.h index 1400c37b29c7..4c9f571609c8 100644 --- a/include/linux/pm.h +++ b/include/linux/pm.h @@ -719,6 +719,7 @@ extern void dev_pm_put_subsys_data(struct device *dev); * @activate: Called before executing probe routines for bus types and drivers. * @sync: Called after successful driver probe. * @dismiss: Called after unsuccessful driver probe and after driver removal. + * @set_performance_state: Called to request a new performance state. * * Power domains provide callbacks that are executed during system suspend, * hibernation, system resume and during runtime PM transitions instead of @@ -731,6 +732,7 @@ struct dev_pm_domain { int (*activate)(struct device *dev); void (*sync)(struct device *dev); void (*dismiss)(struct device *dev); + int (*set_performance_state)(struct device *dev, unsigned int state); }; /* diff --git a/include/linux/pm_domain.h b/include/linux/pm_domain.h index 05ad8cefdff1..34663d0d5c55 100644 --- a/include/linux/pm_domain.h +++ b/include/linux/pm_domain.h @@ -435,6 +435,7 @@ struct device *dev_pm_domain_attach_by_name(struct device *dev, void dev_pm_domain_detach(struct device *dev, bool power_off); int dev_pm_domain_start(struct device *dev); void dev_pm_domain_set(struct device *dev, struct dev_pm_domain *pd); +int dev_pm_domain_set_performance_state(struct device *dev, unsigned int state); #else static inline int dev_pm_domain_attach(struct device *dev, bool power_on) { @@ -457,6 +458,11 @@ static inline int dev_pm_domain_start(struct device *dev) } static inline void dev_pm_domain_set(struct device *dev, struct dev_pm_domain *pd) {} +static inline int dev_pm_domain_set_performance_state(struct device *dev, + unsigned int state) +{ + return 0; +} #endif #endif /* _LINUX_PM_DOMAIN_H */ From patchwork Mon Sep 25 13:17:08 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ulf Hansson X-Patchwork-Id: 13397788 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 bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 91B4ACE7A94 for ; Mon, 25 Sep 2023 13:18:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=WU0EMBvaNR4cgw4WYvTx8ZDPMH5V3TKu1Pye7OjKMks=; b=XvOSjxEx/ktAry zKZJoAwbVI6Fol9IjeCOlkgaO0Eb3v1joYMGiXhrF0Wpu/E0EjRdmp6BkKOTwZB2qhA7hisyuNyGx nTmW6lCTkdOeHRz01iqeF7K7evC9WHyqbIGMbk8jg8dIkCCkoQsHurJnPORa68O8kIzdfI7ALoeiT MaMQtptugmDtVfpOR1vMaQ0MCmjjBUUKpH00q82YxKQ5qvxNGNc8eIKuS+ti37TfaF3miKyDKnB2Y qyEmDGBPgQFPInmkn+MKw59jZ906ZTbLmGwz3OLYHktS1cAO6HTZiGUZz7zHwlfpfC0Gsk/zUK7S2 7Ylx83DP9GHTyjkWktwQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qklTb-00EJUf-0v; Mon, 25 Sep 2023 13:18:15 +0000 Received: from mail-lf1-x12e.google.com ([2a00:1450:4864:20::12e]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qklTM-00EJNs-3B for linux-arm-kernel@lists.infradead.org; Mon, 25 Sep 2023 13:18:02 +0000 Received: by mail-lf1-x12e.google.com with SMTP id 2adb3069b0e04-503065c4b25so10041032e87.1 for ; Mon, 25 Sep 2023 06:17:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1695647877; x=1696252677; darn=lists.infradead.org; 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=167tdHqooI6VpzhOKyy9DJn5EBlj5nE8zbkLsDZ7woM=; b=FkRtYWoRgtHU3mrJCJY89amHIYm+KkBk5oAgo8+Fy65/XzNZzz6KdNUv59TY1/f7Fi 4n155vDue64z6yFxc/KK3VZiqenquwoTuVGhXFe5VjYiPwxcT1YGuZsBuD2przsPo1ml fPHR/Kc6rRhwP7Oi1/VUbrEnPnuZjce6u3tnv/8VumNuhXZ6mHYKtbu/hSypQKyHBbBd t3hGuB3SaFSEEV5uk7y2/LT4eWS0G3YU+k0RukjFYYT3YDt6dmMcF67+zwZ6G8tBCRui U9G0XSpL3iLw8oekx0LgbxQ901lDmCwWi5LhfWvSvNDwEhxOtroj6tWSeuIP8rt+Ru+y wNRQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695647877; x=1696252677; 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=167tdHqooI6VpzhOKyy9DJn5EBlj5nE8zbkLsDZ7woM=; b=UFWLEDD0HxnSzEZ1KRub8MUR2SQOuhL8PU0AUCqNmLWa7HgQXf7EInf6VtE8T2OiM/ WWhbw7ZgdfGDiU1H1rS4OjVapaJHIQgq6lMGzGWSm685/9kembBsjZKSMyHvmkEsHLE5 6Q5SF1UNgBGJw0NLI0C/4U88rRv9hgKQu5rmrZE1YfJGumysno3R3YK6siJshG4WZh2j dv9B62vMMjujE9jezRPCUfRTlNlc21/EoqDsd3drxTnQRrxTpKjwCN6VNcsqUNXu+uvf V+lAMlPM+wUb69eZ1Nxmm1mMGIXTv4sLqa/4hySrafv6mwB1xzQMSkr/V3PM4rKreo7K XQWg== X-Gm-Message-State: AOJu0YxOPefou5hZjPzutoLwypQBfEnHP/dfCbIAegWI8amsl0DM2IjR HK5xKIuwmUclx03uIW4rYxhAtA== X-Google-Smtp-Source: AGHT+IGW4oEnJvWuWsg6MhO9Pq9fqGlgU2jo7ZRrJDKiypMdNYI0ToxsC3DaNm/vfTBYyFn4mfZ5Bw== X-Received: by 2002:a05:6512:328b:b0:4fb:8bab:48b6 with SMTP id p11-20020a056512328b00b004fb8bab48b6mr4881662lfe.52.1695647876928; Mon, 25 Sep 2023 06:17:56 -0700 (PDT) Received: from uffe-tuxpro14.. (h-94-254-63-18.NA.cust.bahnhof.se. [94.254.63.18]) by smtp.gmail.com with ESMTPSA id m29-20020a056512015d00b004fe10276bbfsm1823583lfo.296.2023.09.25.06.17.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 25 Sep 2023 06:17:56 -0700 (PDT) From: Ulf Hansson To: Sudeep Holla , Cristian Marussi , Viresh Kumar , "Rafael J . Wysocki" Cc: Nishanth Menon , Stephen Boyd , Nikunj Kela , Prasad Sodagudi , Alexandre Torgue , Ulf Hansson , linux-pm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 2/9] PM: domains: Implement the ->set_performance_state() callback for genpd Date: Mon, 25 Sep 2023 15:17:08 +0200 Message-Id: <20230925131715.138411-3-ulf.hansson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230925131715.138411-1-ulf.hansson@linaro.org> References: <20230925131715.138411-1-ulf.hansson@linaro.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230925_061801_022607_36D259A5 X-CRM114-Status: GOOD ( 15.10 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org To enable generic support for performance scaling for PM domains, let's implement the ->set_performance_state() callback for genpd. Beyond this change, users of the corresponding genpd specific API, dev_pm_genpd_set_performance_state() are encouraged to switch to the common dev_pm_domain_set_performance_state() API. Signed-off-by: Ulf Hansson --- drivers/base/power/domain.c | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c index c74edf80417f..da1777e39eaa 100644 --- a/drivers/base/power/domain.c +++ b/drivers/base/power/domain.c @@ -420,6 +420,25 @@ static void genpd_restore_performance_state(struct device *dev, genpd_set_performance_state(dev, state); } +static int genpd_dev_pm_set_performance_state(struct device *dev, + unsigned int state) +{ + struct generic_pm_domain *genpd = dev_to_genpd(dev); + int ret = 0; + + genpd_lock(genpd); + if (pm_runtime_suspended(dev)) { + dev_gpd_data(dev)->rpm_pstate = state; + } else { + ret = genpd_set_performance_state(dev, state); + if (!ret) + dev_gpd_data(dev)->rpm_pstate = 0; + } + genpd_unlock(genpd); + + return ret; +} + /** * dev_pm_genpd_set_performance_state- Set performance state of device's power * domain. @@ -438,7 +457,6 @@ static void genpd_restore_performance_state(struct device *dev, int dev_pm_genpd_set_performance_state(struct device *dev, unsigned int state) { struct generic_pm_domain *genpd; - int ret = 0; genpd = dev_to_genpd_safe(dev); if (!genpd) @@ -448,17 +466,7 @@ int dev_pm_genpd_set_performance_state(struct device *dev, unsigned int state) !dev->power.subsys_data->domain_data)) return -EINVAL; - genpd_lock(genpd); - if (pm_runtime_suspended(dev)) { - dev_gpd_data(dev)->rpm_pstate = state; - } else { - ret = genpd_set_performance_state(dev, state); - if (!ret) - dev_gpd_data(dev)->rpm_pstate = 0; - } - genpd_unlock(genpd); - - return ret; + return genpd_dev_pm_set_performance_state(dev, state); } EXPORT_SYMBOL_GPL(dev_pm_genpd_set_performance_state); @@ -2080,6 +2088,7 @@ int pm_genpd_init(struct generic_pm_domain *genpd, genpd->domain.ops.restore_noirq = genpd_restore_noirq; genpd->domain.ops.complete = genpd_complete; genpd->domain.start = genpd_dev_pm_start; + genpd->domain.set_performance_state = genpd_dev_pm_set_performance_state; if (genpd->flags & GENPD_FLAG_PM_CLK) { genpd->dev_ops.stop = pm_clk_suspend; From patchwork Mon Sep 25 13:17:09 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ulf Hansson X-Patchwork-Id: 13397789 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 bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 063D5CE7A81 for ; Mon, 25 Sep 2023 13:18:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=ZqsG0I+kJjEzkmGZ17y9RmPbZJI5J5PnuN0rtf4SLhw=; b=xeaj1SWmRUWPcv /jyHlobt4Tf+GPnAs3psMpGRS5eswtnOjwxLjwaMWLx3L9NyOIW+0Pg7v05Xsqw2a8JKDSsCgyhR4 BDmof3bng1OCtu1vN/YiC9H1RaFkSGRnJsohwW6VJ6tLerCRM4FACjvY3Iia9SJokJ5OtNcuovAun ZKKILR4p+qf8LqtpVfpZbzNjG7B3Gzz/HIJAGxcqGElnxRxGk7kAZhPfVzeEEUKcL1KzumUlBmoTR omM+rNQMUbkYFV8pXwtuIF+X2v4Ys+XT7fQuwZ15nt1tFY1NK/c/w3rHTCp8DisTYgavmN7rGJCpK tQnrZrg6oG3VNWDQOvFQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qklTb-00EJV0-2i; Mon, 25 Sep 2023 13:18:15 +0000 Received: from mail-lf1-x132.google.com ([2a00:1450:4864:20::132]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qklTN-00EJNt-0e for linux-arm-kernel@lists.infradead.org; Mon, 25 Sep 2023 13:18:02 +0000 Received: by mail-lf1-x132.google.com with SMTP id 2adb3069b0e04-5041bb9ce51so10147803e87.1 for ; Mon, 25 Sep 2023 06:17:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1695647878; x=1696252678; darn=lists.infradead.org; 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=AhqA1MINgd8wyumHzpkMN5QpwMn1VgvFU5R0O3ONAJM=; b=YgvbRGVxJT+r/U1sgewPnHe/Bn9QuCipQYyD/mmNIFsgUTDyikgl8LSR47lRSMA+f3 9Qz8O01shFzYn89KLUcZe9h4FwStpKT12nur+Dm6X9+i5z4ix+TLnRtONl6f4H/Iwwpp wbHKFcEW91oPPEPGwY1aRaYrGz3+ZncOVPbuBPw846kr3H60kV9djWQIHiId0kqJFVEz YuRu133Ie6gTBMHUxTCAOoCuCZq9o6FhuQR0jHoBgO0e1P0K59E8xGpxSf+8vIPd//rQ F23NQLWVgU4p8ZjTINji7PjKTjfj7F6r+nYUTG6zm7Z0TogATHZD5KpXCFpsxtPoDBWV NUww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695647878; x=1696252678; 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=AhqA1MINgd8wyumHzpkMN5QpwMn1VgvFU5R0O3ONAJM=; b=emBRQXSEqwswa30BilcfhEpifjoG8gYGzwUdGiBWOpsdA4Sj8h7Wz8RhJKcWvEu6CW lT6YXyHHTlBltu6IAH2YQec/iuNjLiM1rmwMCOCwWrDe2kik+RSELbAtGmSmsLPqC9x2 1avz7chKTnOyJuztewPNU4ktBSIRGxfMXd6lDojSDS5YNyyo7aRIPEcBhCRKDxhAc0ev Wurr4SKr3cejAgGj6UC8gpHG2tGKX441pdMEViyqlb/QwYqgflie5Sxm7MU2wOS9V2jG vDEBc77ZV6sbEs2+PobCXuo30N00AWUt09xGqw2KmLOGM2zF06JlnasiMi69yOd/cD6v WLXw== X-Gm-Message-State: AOJu0Yx/Wzbk+pmYjwWYLHN7Q4Zjy0ibfThG9KqsoCATK0B2ZaOC+1/e nsbTAAtcaaBcpoGrr7aLYw9mBg== X-Google-Smtp-Source: AGHT+IEx0/FnswSLreQOTAQvzgEeo+ZXQR2hUTbg7rc24PHFcZe2gDmlgALwkrWzUFAiCn1WtP5WzQ== X-Received: by 2002:a05:6512:3082:b0:4fa:ad2d:6c58 with SMTP id z2-20020a056512308200b004faad2d6c58mr6251416lfd.61.1695647878222; Mon, 25 Sep 2023 06:17:58 -0700 (PDT) Received: from uffe-tuxpro14.. (h-94-254-63-18.NA.cust.bahnhof.se. [94.254.63.18]) by smtp.gmail.com with ESMTPSA id m29-20020a056512015d00b004fe10276bbfsm1823583lfo.296.2023.09.25.06.17.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 25 Sep 2023 06:17:57 -0700 (PDT) From: Ulf Hansson To: Sudeep Holla , Cristian Marussi , Viresh Kumar , "Rafael J . Wysocki" Cc: Nishanth Menon , Stephen Boyd , Nikunj Kela , Prasad Sodagudi , Alexandre Torgue , Ulf Hansson , linux-pm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 3/9] OPP: Add dev_pm_opp_add_dynamic() to allow more flexibility Date: Mon, 25 Sep 2023 15:17:09 +0200 Message-Id: <20230925131715.138411-4-ulf.hansson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230925131715.138411-1-ulf.hansson@linaro.org> References: <20230925131715.138411-1-ulf.hansson@linaro.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230925_061801_238183_0EF8D093 X-CRM114-Status: GOOD ( 20.80 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org The dev_pm_opp_add() API is limited to add dynamic OPPs with a frequency and a voltage level. To enable more flexibility, let's add a new API, dev_pm_opp_add_dynamic() that's takes a struct dev_pm_opp_data* instead of a list of in-parameters. Signed-off-by: Ulf Hansson --- drivers/opp/core.c | 22 ++++++++++------------ drivers/opp/of.c | 10 ++++++---- drivers/opp/opp.h | 2 +- include/linux/pm_opp.h | 29 +++++++++++++++++++++++++---- 4 files changed, 42 insertions(+), 21 deletions(-) diff --git a/drivers/opp/core.c b/drivers/opp/core.c index 919cc53bc02e..54b6138e1189 100644 --- a/drivers/opp/core.c +++ b/drivers/opp/core.c @@ -2002,8 +2002,7 @@ int _opp_add(struct device *dev, struct dev_pm_opp *new_opp, * _opp_add_v1() - Allocate a OPP based on v1 bindings. * @opp_table: OPP table * @dev: device for which we do this operation - * @freq: Frequency in Hz for this OPP - * @u_volt: Voltage in uVolts for this OPP + * @data: The OPP data for the OPP to add * @dynamic: Dynamically added OPPs. * * This function adds an opp definition to the opp table and returns status. @@ -2021,10 +2020,10 @@ int _opp_add(struct device *dev, struct dev_pm_opp *new_opp, * -ENOMEM Memory allocation failure */ int _opp_add_v1(struct opp_table *opp_table, struct device *dev, - unsigned long freq, long u_volt, bool dynamic) + struct dev_pm_opp_data *data, bool dynamic) { struct dev_pm_opp *new_opp; - unsigned long tol; + unsigned long tol, u_volt = data->u_volt; int ret; if (!assert_single_clk(opp_table)) @@ -2035,7 +2034,7 @@ int _opp_add_v1(struct opp_table *opp_table, struct device *dev, return -ENOMEM; /* populate the opp table */ - new_opp->rates[0] = freq; + new_opp->rates[0] = data->freq; tol = u_volt * opp_table->voltage_tolerance_v1 / 100; new_opp->supplies[0].u_volt = u_volt; new_opp->supplies[0].u_volt_min = u_volt - tol; @@ -2825,10 +2824,9 @@ int dev_pm_opp_xlate_performance_state(struct opp_table *src_table, } /** - * dev_pm_opp_add() - Add an OPP table from a table definitions - * @dev: device for which we do this operation - * @freq: Frequency in Hz for this OPP - * @u_volt: Voltage in uVolts for this OPP + * dev_pm_opp_add_dynamic() - Add an OPP table from a table definitions + * @dev: The device for which we do this operation + * @data: The OPP data for the OPP to add * * This function adds an opp definition to the opp table and returns status. * The opp is made available by default and it can be controlled using @@ -2841,7 +2839,7 @@ int dev_pm_opp_xlate_performance_state(struct opp_table *src_table, * Duplicate OPPs (both freq and volt are same) and !opp->available * -ENOMEM Memory allocation failure */ -int dev_pm_opp_add(struct device *dev, unsigned long freq, unsigned long u_volt) +int dev_pm_opp_add_dynamic(struct device *dev, struct dev_pm_opp_data *data) { struct opp_table *opp_table; int ret; @@ -2853,13 +2851,13 @@ int dev_pm_opp_add(struct device *dev, unsigned long freq, unsigned long u_volt) /* Fix regulator count for dynamic OPPs */ opp_table->regulator_count = 1; - ret = _opp_add_v1(opp_table, dev, freq, u_volt, true); + ret = _opp_add_v1(opp_table, dev, data, true); if (ret) dev_pm_opp_put_opp_table(opp_table); return ret; } -EXPORT_SYMBOL_GPL(dev_pm_opp_add); +EXPORT_SYMBOL_GPL(dev_pm_opp_add_dynamic); /** * _opp_set_availability() - helper to set the availability of an opp diff --git a/drivers/opp/of.c b/drivers/opp/of.c index ada4963c7cfa..ade6d42cae46 100644 --- a/drivers/opp/of.c +++ b/drivers/opp/of.c @@ -1077,13 +1077,15 @@ static int _of_add_opp_table_v1(struct device *dev, struct opp_table *opp_table) val = prop->value; while (nr) { - unsigned long freq = be32_to_cpup(val++) * 1000; - unsigned long volt = be32_to_cpup(val++); + struct dev_pm_opp_data data = { + .freq = be32_to_cpup(val++) * 1000, + .u_volt = be32_to_cpup(val++), + }; - ret = _opp_add_v1(opp_table, dev, freq, volt, false); + ret = _opp_add_v1(opp_table, dev, &data, false); if (ret) { dev_err(dev, "%s: Failed to add OPP %ld (%d)\n", - __func__, freq, ret); + __func__, data.freq, ret); goto remove_static_opp; } nr -= 2; diff --git a/drivers/opp/opp.h b/drivers/opp/opp.h index 8a5ea38f3a3d..fefdf9845692 100644 --- a/drivers/opp/opp.h +++ b/drivers/opp/opp.h @@ -251,7 +251,7 @@ struct dev_pm_opp *_opp_allocate(struct opp_table *opp_table); void _opp_free(struct dev_pm_opp *opp); int _opp_compare_key(struct opp_table *opp_table, struct dev_pm_opp *opp1, struct dev_pm_opp *opp2); int _opp_add(struct device *dev, struct dev_pm_opp *new_opp, struct opp_table *opp_table); -int _opp_add_v1(struct opp_table *opp_table, struct device *dev, unsigned long freq, long u_volt, bool dynamic); +int _opp_add_v1(struct opp_table *opp_table, struct device *dev, struct dev_pm_opp_data *data, bool dynamic); void _dev_pm_opp_cpumask_remove_table(const struct cpumask *cpumask, int last_cpu); struct opp_table *_add_opp_table_indexed(struct device *dev, int index, bool getclk); void _put_opp_list_kref(struct opp_table *opp_table); diff --git a/include/linux/pm_opp.h b/include/linux/pm_opp.h index 91f87d7e807c..a8ee93ba41d8 100644 --- a/include/linux/pm_opp.h +++ b/include/linux/pm_opp.h @@ -92,6 +92,16 @@ struct dev_pm_opp_config { struct device ***virt_devs; }; +/** + * struct dev_pm_opp_data - The data to use to initialize an OPP. + * @freq: The clock rate in Hz for the OPP. + * @u_volt: The voltage in uV for the OPP. + */ +struct dev_pm_opp_data { + unsigned long freq; + unsigned long u_volt; +}; + #if defined(CONFIG_PM_OPP) struct opp_table *dev_pm_opp_get_opp_table(struct device *dev); @@ -152,8 +162,8 @@ struct dev_pm_opp *dev_pm_opp_find_bw_floor(struct device *dev, void dev_pm_opp_put(struct dev_pm_opp *opp); -int dev_pm_opp_add(struct device *dev, unsigned long freq, - unsigned long u_volt); +int dev_pm_opp_add_dynamic(struct device *dev, struct dev_pm_opp_data *opp); + void dev_pm_opp_remove(struct device *dev, unsigned long freq); void dev_pm_opp_remove_all_dynamic(struct device *dev); @@ -322,8 +332,8 @@ static inline struct dev_pm_opp *dev_pm_opp_find_bw_floor(struct device *dev, static inline void dev_pm_opp_put(struct dev_pm_opp *opp) {} -static inline int dev_pm_opp_add(struct device *dev, unsigned long freq, - unsigned long u_volt) +static inline int +dev_pm_opp_add_dynamic(struct device *dev, struct dev_pm_opp_data *opp) { return -EOPNOTSUPP; } @@ -519,6 +529,17 @@ static inline int dev_pm_opp_of_find_icc_paths(struct device *dev, struct opp_ta /* OPP Configuration helpers */ +static inline int dev_pm_opp_add(struct device *dev, unsigned long freq, + unsigned long u_volt) +{ + struct dev_pm_opp_data data = { + .freq = freq, + .u_volt = u_volt, + }; + + return dev_pm_opp_add_dynamic(dev, &data); +} + /* Regulators helpers */ static inline int dev_pm_opp_set_regulators(struct device *dev, const char * const names[]) From patchwork Mon Sep 25 13:17:10 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ulf Hansson X-Patchwork-Id: 13397793 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 bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 72F0FCE7A97 for ; Mon, 25 Sep 2023 13:18:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=L4XXyNiA+DCKsME6OJ9Ngi8D9IoSFut2ZfAhCI8wWSQ=; b=znngkQ9rjx5hKv VLpoT6v4h7/sp+3tJRD74ozJ66l+X5Ns9/Rj69PT14Q8oSxfHMo0Zzse4jrzpxwG9YRloo2NX+w6G zuhIULsILC4cxw/Na9a+jw7I0UsLsQJFHrQ0ps7kDYDAzEhHQqsF76oHcxWfULUmduyp0kigAdeoD TGjGVz8zo9aySfBGc6CA103YsYnZ22PQKFCIwZ6ARMxTYNR6NeFtEgHX03wLwUDa8vgnX/vwuZbnX VYtlVKYlYbCKIxgNNYsdgRArkBMhnd1jLkW+1r95EjyOl6s70485NJ3wfxffZ6g8TrSXP1PFH0bA/ y2d01Pq4UhjjPtzRLRSg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qklTc-00EJVe-1a; Mon, 25 Sep 2023 13:18:16 +0000 Received: from mail-lj1-x234.google.com ([2a00:1450:4864:20::234]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qklTP-00EJOM-1X for linux-arm-kernel@lists.infradead.org; Mon, 25 Sep 2023 13:18:04 +0000 Received: by mail-lj1-x234.google.com with SMTP id 38308e7fff4ca-2c01d22f332so91287761fa.0 for ; Mon, 25 Sep 2023 06:18:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1695647879; x=1696252679; darn=lists.infradead.org; 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=SfkqeVqdpd6l51oQ+egV78dBLzEOf1KilkGCosg+Yiw=; b=Lchs3W0Fcg5wLySneyYbtLKdXcH2lJK3LwgMw+a35RZWZ2++5r3iqWoxeNOD2o3fUl xDZJD9a/dC20tqKgU/QiUJbiiB8P/iUNALuk9CZtemSdx9jPnMyIt5t+wI6YnI+0zhPD yR4cgMkTqZ72kBBR4o9g/03A1YMGXjhrSpWB2639yFeUMwkxkfRP4ijCniZ52vwLODVP 4wjj75eo1g2PtZfiFGfouMJ+/BhKFtjpGWiE2G2dw/GO2Os3r4/a4jlakSs96kym0A8f s5ODeoL/b2s3nkXmYbfylyLCqE2oxE0g04tjpi8/j+NSCm0ukm0WXGGl7ePUs/PBl/Kr 8yoA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695647879; x=1696252679; 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=SfkqeVqdpd6l51oQ+egV78dBLzEOf1KilkGCosg+Yiw=; b=QyMRaJ0QtIairI7Psjd1K0rOQQlSnJDovSJpXcF7mWy5VKRd1aGOVbMtPf5IcSz2u8 tTrxsikdaPadGt4QHtwqlYsssSwnPY0LCWoDvOyB+EM7Z6UFh1/jEanit3ykfJIAr1Lf OQ8G5pbTGXJ3bw5G1RzSClQAWdmkAEKx69mZPiAYb/CyXE8AvHeVYiW6oF+8E28AfWNO HohHdY+0Q6UjQ80uXUdklHSG1I5uRtQf0amh/HC+ap649Fx/3TeT7Je5P8+1GEeVJDDE 7GckqWsA6XQ+aFxEoErvGICJcCK4n2HOOFLsmTscY55tvoyHgChQ34spemF3hpUM+5uE l0Kw== X-Gm-Message-State: AOJu0Yz7c9FvmiLVaZ8PRDksh7YaenT6BKZfSayB2Xk70CPgwRdLsjP6 BWc4H8M6yQtTxlybTZgmTPVlug== X-Google-Smtp-Source: AGHT+IHUeAveoKV6cgGDL1reWFsIV8ERcTryTKk6fC6YsXc7K93e96d8/uM2zJtwmknQMiaKXRIhQg== X-Received: by 2002:a05:6512:3d15:b0:502:d973:3206 with SMTP id d21-20020a0565123d1500b00502d9733206mr3663580lfv.6.1695647879531; Mon, 25 Sep 2023 06:17:59 -0700 (PDT) Received: from uffe-tuxpro14.. (h-94-254-63-18.NA.cust.bahnhof.se. [94.254.63.18]) by smtp.gmail.com with ESMTPSA id m29-20020a056512015d00b004fe10276bbfsm1823583lfo.296.2023.09.25.06.17.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 25 Sep 2023 06:17:59 -0700 (PDT) From: Ulf Hansson To: Sudeep Holla , Cristian Marussi , Viresh Kumar , "Rafael J . Wysocki" Cc: Nishanth Menon , Stephen Boyd , Nikunj Kela , Prasad Sodagudi , Alexandre Torgue , Ulf Hansson , linux-pm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 4/9] OPP: Extend dev_pm_opp_data with a level Date: Mon, 25 Sep 2023 15:17:10 +0200 Message-Id: <20230925131715.138411-5-ulf.hansson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230925131715.138411-1-ulf.hansson@linaro.org> References: <20230925131715.138411-1-ulf.hansson@linaro.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230925_061803_511462_DDE00C3D X-CRM114-Status: GOOD ( 12.37 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Let's extend the dev_pm_opp_data with a level variable, to allow users to specify a corresponding level (performance state) for a dynamically added OPP. Signed-off-by: Ulf Hansson --- drivers/opp/core.c | 1 + include/linux/pm_opp.h | 2 ++ 2 files changed, 3 insertions(+) diff --git a/drivers/opp/core.c b/drivers/opp/core.c index 54b6138e1189..ca8d1304b508 100644 --- a/drivers/opp/core.c +++ b/drivers/opp/core.c @@ -2035,6 +2035,7 @@ int _opp_add_v1(struct opp_table *opp_table, struct device *dev, /* populate the opp table */ new_opp->rates[0] = data->freq; + new_opp->level = data->level; tol = u_volt * opp_table->voltage_tolerance_v1 / 100; new_opp->supplies[0].u_volt = u_volt; new_opp->supplies[0].u_volt_min = u_volt - tol; diff --git a/include/linux/pm_opp.h b/include/linux/pm_opp.h index a8ee93ba41d8..9ad168f4cbf1 100644 --- a/include/linux/pm_opp.h +++ b/include/linux/pm_opp.h @@ -94,10 +94,12 @@ struct dev_pm_opp_config { /** * struct dev_pm_opp_data - The data to use to initialize an OPP. + * @level: The performance level for the OPP. * @freq: The clock rate in Hz for the OPP. * @u_volt: The voltage in uV for the OPP. */ struct dev_pm_opp_data { + unsigned int level; unsigned long freq; unsigned long u_volt; }; From patchwork Mon Sep 25 13:17:11 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ulf Hansson X-Patchwork-Id: 13397794 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 bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id E6B00CE7A94 for ; Mon, 25 Sep 2023 13:18:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=kPiEwxY437iRZM9Cw22rlMJpOzVptVpuOVV1XePAnXQ=; b=peNTOh/MeYGX3i oX74s8gikIZ3NFfb52kwxzAApto8pFA7MdmysmCtmYh+O7Rs8EAhnBvy2PbW4nY0MtBx4tAkshWL2 kErAWRCffS+mdgCaKAcq9kVvvDsJ3mrpH8iZap0T+m8ATU47KnfdbSlFbBMxy2iXpEGk4RxwaS6V8 5bDe8fNam+iCKNgOj1YHOjEQGxvZ5Cr7JMKxWC2ZWE53+Yc4BfeW/+XzdAkrBzi59JrRoMguP72Ey uocD3CCOVaHowfpn4ujhExmA5huWsT/Fx62MweyTDvWm5q71U+fQwqErbtZmiBWmi+1ppRXqvb6uJ PkrGL8KJ1GdvklK/xoyA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qklTd-00EJWq-2L; Mon, 25 Sep 2023 13:18:17 +0000 Received: from mail-lf1-x133.google.com ([2a00:1450:4864:20::133]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qklTP-00EJOp-27 for linux-arm-kernel@lists.infradead.org; Mon, 25 Sep 2023 13:18:06 +0000 Received: by mail-lf1-x133.google.com with SMTP id 2adb3069b0e04-50335f6b48dso10869047e87.3 for ; Mon, 25 Sep 2023 06:18:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1695647880; x=1696252680; darn=lists.infradead.org; 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=UGGR9pvLY+wooKnYGsA2i71wi2fLynKA1WIbB9823oI=; b=UMK+JeuzUFrrqu5eGcFcXZ9jg4ymbYfMs/37qFQI6aDdUDgclD0mqkXOkPXb6WMoN9 1XGGA3k80SNiUB3aYrbLJ3bxvwzjUgMCTQT/JTz3ubpQQfTCc7sN21rCWKse2dycLoEJ ywXvYOx7kRP+jMbkQV5NF8CXsfehCT1gmd4ZnwAdKuiX5vThfVfBwRKiiREZ4DC4flSv RQqW2G9CZqmHuVu76H9JpsxYRUqQZWXznGy1+MW9c+D4hcpq6XlzhYYYLlQuXVh/VNpM uO6BnCqYyCrFoBO3vVZx3eQ/YeGC6uVo2Dl5zBcAJMFw1aPalS4bJLNIGnTfIXF1DUEq 3LdA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695647880; x=1696252680; 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=UGGR9pvLY+wooKnYGsA2i71wi2fLynKA1WIbB9823oI=; b=ZSxp4Fl8Sq2L/paTx+4jbOpYfewHR4ARJsBtf0m4jpXOMAVEpZINdo64jOCYviypBT 2OrsN+jxiZ8Ivi2hLR+X08hyJ43q9sYrC3KGOhc9gjxYikZ1MC3d9FJ+wu7s4o2eo9Il dvZgg0C/yxwaHofMmMnE8TVljCpoXIpTN0W2MFRWqDC6cP7WPWEGUJRi5iUJUDdHc/Mv iuyBckYVYUE2uUJTNSRSI9zcqIlDC0K5WHI8ut6f882wsM64zLcKLusFjQIWm3wkspx7 sc/cOyF9YawREBXcDoi5EZb9kXMWRDHE1+tAO6ZMTUjp76N0c6qKNRypp1BBrQeY/uAf cEmg== X-Gm-Message-State: AOJu0YwJ1nOO+sHCUvM0gnO8XW5TilRWZeZtB1nklpKyMq1BBDX3hO9d pTg5w8tkRUCxGQ3uWD8EYbBffA== X-Google-Smtp-Source: AGHT+IFDV/U1+CFvuV0RG+EvBmu3G460XkDr1UWPQuqt8PiHplj52nhcvo2MurwCK5yDWM7XnDcTyQ== X-Received: by 2002:a19:7711:0:b0:500:78ee:4cd7 with SMTP id s17-20020a197711000000b0050078ee4cd7mr5383774lfc.23.1695647880623; Mon, 25 Sep 2023 06:18:00 -0700 (PDT) Received: from uffe-tuxpro14.. (h-94-254-63-18.NA.cust.bahnhof.se. [94.254.63.18]) by smtp.gmail.com with ESMTPSA id m29-20020a056512015d00b004fe10276bbfsm1823583lfo.296.2023.09.25.06.17.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 25 Sep 2023 06:18:00 -0700 (PDT) From: Ulf Hansson To: Sudeep Holla , Cristian Marussi , Viresh Kumar , "Rafael J . Wysocki" Cc: Nishanth Menon , Stephen Boyd , Nikunj Kela , Prasad Sodagudi , Alexandre Torgue , Ulf Hansson , linux-pm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 5/9] OPP: Switch to use dev_pm_domain_set_performance_state() Date: Mon, 25 Sep 2023 15:17:11 +0200 Message-Id: <20230925131715.138411-6-ulf.hansson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230925131715.138411-1-ulf.hansson@linaro.org> References: <20230925131715.138411-1-ulf.hansson@linaro.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230925_061803_709772_536FC45C X-CRM114-Status: GOOD ( 13.29 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org To support performance scaling for any kinds of PM domains, let's move away from using the genpd specific API, dev_pm_genpd_set_performance_state(), to the common dev_pm_domain_set_performance_state(). No intended functional impact at this point. Signed-off-by: Ulf Hansson --- drivers/opp/core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/opp/core.c b/drivers/opp/core.c index ca8d1304b508..60dca60ac4af 100644 --- a/drivers/opp/core.c +++ b/drivers/opp/core.c @@ -1030,7 +1030,7 @@ static int _set_performance_state(struct device *dev, struct device *pd_dev, if (!pd_dev) return 0; - ret = dev_pm_genpd_set_performance_state(pd_dev, pstate); + ret = dev_pm_domain_set_performance_state(pd_dev, pstate); if (ret) { dev_err(dev, "Failed to set performance state of %s: %d (%d)\n", dev_name(pd_dev), pstate, ret); From patchwork Mon Sep 25 13:17:12 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ulf Hansson X-Patchwork-Id: 13397790 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 bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id B9B5CCE7A94 for ; Mon, 25 Sep 2023 13:18:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=2bYZ3Yl8ToFy5NFCS4OBfICc6qHhYtNXacaxDYtOACo=; b=bwagOiZ38VP/fz QtiA++o61hujCvl1P1auAutHAWI/zuA85TvZKDk6kkbUp1RcEguekiJ5HNEB4Hq6hIi+fqwnrxQoD xUgZ/b+u08iKoByuzIvIKgWHZmyl16bgvGSZwYOqd1sx1dKdL2z/6bJNJYfSgtNrF+DkT0NfeoRcf Ck5kTvuoVkIAKwrcmRaAnirNWK0LxbopFQz8nm6cE1U3I9ByfZf3waG/eP0KHt9CWNRZIPxSTMmoE 3h3tPJuAoVwU6XcE3rYNvMtDGgy3BrQ2bIuUyL4ktBZjH0z+Oo5ItOKCDBwCiozYsrDkR8hCpuMh5 ZcEj5GcvkoILqx+udJaA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qklTd-00EJW9-0S; Mon, 25 Sep 2023 13:18:17 +0000 Received: from mail-lf1-x129.google.com ([2a00:1450:4864:20::129]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qklTP-00EJPp-1k for linux-arm-kernel@lists.infradead.org; Mon, 25 Sep 2023 13:18:05 +0000 Received: by mail-lf1-x129.google.com with SMTP id 2adb3069b0e04-5043120ffbcso9372454e87.2 for ; Mon, 25 Sep 2023 06:18:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1695647882; x=1696252682; darn=lists.infradead.org; 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=2bFHpy7o1LqMw4W/VuJiDN5LSPCulCxHGcm0dhiriMk=; b=I9TGzz2+s4CKn/KBSRoRbN7KO5H9tgIJGdvCCT4Hw48ERAxw963qPYmHtdY1xx5sF9 nOcRsr7mneexvQmS1kN8cE+/Ro1BO3VQJruOsMu6MCspzVQijSpDUdi1Zd2663OWJtlv OMo178SnvoTFTLZviFnXx0bVreiJAKL76aJclDrUuSNO3fjAGRl6sBvDUVOGIFtt8iOA SfxgFgnASBZyjy6yFyL0EbqHlTRTbLm0bsgx1qqnmbercFFvG4TaaEQmMtGhp4IMRyib XzvmemJPYWXjWpg+Xx5kVBPDx0bc6pCclxCB/bOIb1dtIIUHONdS1u2U2GPkqTHPzynD qbig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695647882; x=1696252682; 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=2bFHpy7o1LqMw4W/VuJiDN5LSPCulCxHGcm0dhiriMk=; b=eNZOVoWuZnXyerj2ZcbFYCxceqqzbOow9gXRUPVvPENJurUOjscqZFfaEYJ0cbpVV4 t91bBnk7AVCKVxHspZ4H0Lazj7PEwUxgPTJP9NdYpxhIodXhfvMYDtuh0SaRKR8M2RFN EhAdsX8MSMbbeNSrsjkIb7X4s2sfMNFslPPnhGFBy+XrlaFGe/LgzJarbb0vx+YSmO4j V24syZf0HtggAYHtIexlj/OMRYvkiHW/PCiDd7E4x3lYOwXBg4AIcDJ34RxI0PSCU5hy ekNPsbfPanRGh/PET0xFfAVCboBEazq+lcvy25I2YOvBEvQyvIXocNEGDCZlxhzKCB5u L/FQ== X-Gm-Message-State: AOJu0Yw62erRC+im9KkqARaqF6jin53qY0uzD1xT0DEjLHGWeARsCUJS ZU0EJIe2G4wYoc8+f59VFncp6g== X-Google-Smtp-Source: AGHT+IGmFBgkJKVaTj0hT0ug8ZmhpL42wRm/KPZyj7Yq0oqitc6hAqHCl9UOX5muul8rmBpDMAJOnQ== X-Received: by 2002:a05:6512:39c5:b0:4fd:faa5:64ed with SMTP id k5-20020a05651239c500b004fdfaa564edmr7421632lfu.11.1695647882083; Mon, 25 Sep 2023 06:18:02 -0700 (PDT) Received: from uffe-tuxpro14.. (h-94-254-63-18.NA.cust.bahnhof.se. [94.254.63.18]) by smtp.gmail.com with ESMTPSA id m29-20020a056512015d00b004fe10276bbfsm1823583lfo.296.2023.09.25.06.18.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 25 Sep 2023 06:18:01 -0700 (PDT) From: Ulf Hansson To: Sudeep Holla , Cristian Marussi , Viresh Kumar , "Rafael J . Wysocki" Cc: Nishanth Menon , Stephen Boyd , Nikunj Kela , Prasad Sodagudi , Alexandre Torgue , Ulf Hansson , linux-pm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 6/9] OPP: Extend support for the opp-level beyond required-opps Date: Mon, 25 Sep 2023 15:17:12 +0200 Message-Id: <20230925131715.138411-7-ulf.hansson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230925131715.138411-1-ulf.hansson@linaro.org> References: <20230925131715.138411-1-ulf.hansson@linaro.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230925_061803_580459_769EC948 X-CRM114-Status: GOOD ( 17.61 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org At this point the level (performance state) for an OPP is currently limited to be requested for a device that is attached to a PM domain. Moreover, the device needs to have the so called required-opps assigned to it, which are based upon OPP tables being described in DT. To extend the support beyond required-opps and DT, let's enable the level to be set for all OPPs. More precisely, if the requested OPP has a valid level let's try to request it through the device's optional PM domain, via calling dev_pm_domain_set_performance_state(). Signed-off-by: Ulf Hansson --- drivers/opp/core.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/drivers/opp/core.c b/drivers/opp/core.c index 60dca60ac4af..afb73978cdcb 100644 --- a/drivers/opp/core.c +++ b/drivers/opp/core.c @@ -1107,6 +1107,22 @@ void _update_set_required_opps(struct opp_table *opp_table) opp_table->set_required_opps = _opp_set_required_opps_generic; } +static int _set_opp_level(struct device *dev, struct opp_table *opp_table, + struct dev_pm_opp *opp) +{ + int ret = 0; + + /* Request a new performance state through the device's PM domain. */ + if (opp && opp->level) { + ret = dev_pm_domain_set_performance_state(dev, opp->level); + if (ret) + dev_err(dev, "Failed to set performance state %u (%d)\n", + opp->level, ret); + } + + return ret; +} + static void _find_current_opp(struct device *dev, struct opp_table *opp_table) { struct dev_pm_opp *opp = ERR_PTR(-ENODEV); @@ -1154,8 +1170,13 @@ static int _disable_opp_table(struct device *dev, struct opp_table *opp_table) if (opp_table->regulators) regulator_disable(opp_table->regulators[0]); + ret = _set_opp_level(dev, opp_table, NULL); + if (ret) + goto out; + ret = _set_required_opps(dev, opp_table, NULL, false); +out: opp_table->enabled = false; return ret; } @@ -1198,6 +1219,10 @@ static int _set_opp(struct device *dev, struct opp_table *opp_table, return ret; } + ret = _set_opp_level(dev, opp_table, opp); + if (ret) + return ret; + ret = _set_opp_bw(opp_table, opp, dev); if (ret) { dev_err(dev, "Failed to set bw: %d\n", ret); @@ -1241,6 +1266,10 @@ static int _set_opp(struct device *dev, struct opp_table *opp_table, return ret; } + ret = _set_opp_level(dev, opp_table, opp); + if (ret) + return ret; + ret = _set_required_opps(dev, opp_table, opp, false); if (ret) { dev_err(dev, "Failed to set required opps: %d\n", ret); From patchwork Mon Sep 25 13:17:13 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ulf Hansson X-Patchwork-Id: 13397791 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 bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 5CFCCCE7A95 for ; Mon, 25 Sep 2023 13:18:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=1jr4DejOZ2XGeqCeFEIDU8gJ6RavsTyoi3OSClIrjdg=; b=xvJHfk5LhpzALA OPDRnys0LDFg0aMlIdWitmoGyf7FMVYnsjyb3I6rcj3y+wEWZeleSiFeK181rVcbfoDS3H3kpTOh7 zSJcI2S+aW66DnP/FNhUDRbn45Q5SnBo4zXRQ9a7yTsntJe7f1MsDbQPMy00m/9mdO8ubLS1/boXl OkrStWVMvbM/HEAN0+27R6+PRG6unPmSRP4q3wmzWrYVj/gecr30goY8POAUcGS8D6J6Bqm7vuib4 flDDF1pV1964ktGXG5YgNj5LhqWRidEaSsrOskycNJgFZIc/mQ0SJ/QOJ8W0+DouYR6SZ5R2OTCH0 tzKCbUFI7l/9VZl2lMsA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qklTe-00EJXX-0z; Mon, 25 Sep 2023 13:18:18 +0000 Received: from mail-lf1-x132.google.com ([2a00:1450:4864:20::132]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qklTR-00EJQi-0H for linux-arm-kernel@lists.infradead.org; Mon, 25 Sep 2023 13:18:06 +0000 Received: by mail-lf1-x132.google.com with SMTP id 2adb3069b0e04-5041d6d8b10so10562721e87.2 for ; Mon, 25 Sep 2023 06:18:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1695647883; x=1696252683; darn=lists.infradead.org; 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=wxw1p33YOE1Wx3IdS6/yDe9IgDNF8zci3+vg+kboqRc=; b=QQD+avgaFNFamFWupPbhTXz3408bC3JQ8Df+W5gbXyqrvPTcY2qS5atMvIn+/hwDi9 0F04x5Alb+4zZPo3CPzYcXd1rvJjYISt86BY+LI6qO/XBV+lgNfzuhUkg8ooBO7EwBzo ItX5Yv8yCtmG8RuelHa7DsB93V6T5ygOHl1NQ9oEX1TO6fmU6ZnUab+eK88dhjL3dtd1 KKxq5NEeou6WOIcX/NcLVXlqYCkcQa/J2cPJCojGrFaFTsmwWc2GZ2dtNF3xZUjt71bu 79Ol2r7+N43BXNuxO7X4BAeK39I5l3zEw+hRAtBQRxWEVOFr3YejZSxucNw5dKsqv8Et FYkg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695647883; x=1696252683; 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=wxw1p33YOE1Wx3IdS6/yDe9IgDNF8zci3+vg+kboqRc=; b=U2p46/jjirhjUetGy+kTi9Cg9sxr0b2045v0+tBPdtICORNCScOjvuIjckuf1/asYo Mnc0A7AYs9silR+n71vMCvrrvaWRvovFabwkbNkPcVaLDOW6aGA4PUxtPx8p42ju2J68 yZc+H5iuIKuiHD1Zh99q1m3Q99uLfw+U3hoCxbqMW1sndkjMM0q+9OSICMK0Vfjorpa6 B9M60LDpuOusR96pfpeanOZ126AAQtANCK9xObvx/mQxyX/xPOCMcq4bqZ9erV83fapU Iy9RbHTwjy8L3w5tDPC1u2ScGMXwL2oCvCoks1mwMU2TkqQ9oiDp9VlbIKJG6IV8ycaW JwZw== X-Gm-Message-State: AOJu0YyPLq1TpB6vMjDgyclrDjFQ6LiFX7cyuzfnVLnE6uD2kwLg/HyJ AdH/1NjWYPu44nPh/rVSoESV4lqmYVmqnJo8Xbc= X-Google-Smtp-Source: AGHT+IFNueuLCXRNbVrLA4eVjJu12iokEykiWxOyhkw7rPrvIF7kGqhFmBrd80yDDQXxWRiDucIYXA== X-Received: by 2002:a05:6512:308c:b0:500:79f7:1738 with SMTP id z12-20020a056512308c00b0050079f71738mr5892894lfd.17.1695647883494; Mon, 25 Sep 2023 06:18:03 -0700 (PDT) Received: from uffe-tuxpro14.. (h-94-254-63-18.NA.cust.bahnhof.se. [94.254.63.18]) by smtp.gmail.com with ESMTPSA id m29-20020a056512015d00b004fe10276bbfsm1823583lfo.296.2023.09.25.06.18.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 25 Sep 2023 06:18:02 -0700 (PDT) From: Ulf Hansson To: Sudeep Holla , Cristian Marussi , Viresh Kumar , "Rafael J . Wysocki" Cc: Nishanth Menon , Stephen Boyd , Nikunj Kela , Prasad Sodagudi , Alexandre Torgue , Ulf Hansson , linux-pm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 7/9] firmware: arm_scmi: Simplify error path in scmi_dvfs_device_opps_add() Date: Mon, 25 Sep 2023 15:17:13 +0200 Message-Id: <20230925131715.138411-8-ulf.hansson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230925131715.138411-1-ulf.hansson@linaro.org> References: <20230925131715.138411-1-ulf.hansson@linaro.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230925_061805_128793_8D84D5F1 X-CRM114-Status: GOOD ( 13.36 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Let's simplify the code in scmi_dvfs_device_opps_add() by using dev_pm_opp_remove_all_dynamic() in the error path. Signed-off-by: Ulf Hansson --- drivers/firmware/arm_scmi/perf.c | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/drivers/firmware/arm_scmi/perf.c b/drivers/firmware/arm_scmi/perf.c index 9eb58df9124d..733c5ebeb555 100644 --- a/drivers/firmware/arm_scmi/perf.c +++ b/drivers/firmware/arm_scmi/perf.c @@ -787,30 +787,22 @@ static int scmi_dvfs_device_opps_add(const struct scmi_protocol_handle *ph, { int idx, ret; unsigned long freq; - struct scmi_opp *opp; struct perf_dom_info *dom; dom = scmi_perf_domain_lookup(ph, domain); if (IS_ERR(dom)) return PTR_ERR(dom); - for (opp = dom->opp, idx = 0; idx < dom->opp_count; idx++, opp++) { + for (idx = 0; idx < dom->opp_count; idx++) { if (!dom->level_indexing_mode) - freq = opp->perf * dom->mult_factor; + freq = dom->opp[idx].perf * dom->mult_factor; else - freq = opp->indicative_freq * 1000; + freq = dom->opp[idx].indicative_freq * 1000; ret = dev_pm_opp_add(dev, freq, 0); if (ret) { dev_warn(dev, "failed to add opp %luHz\n", freq); - - while (idx-- > 0) { - if (!dom->level_indexing_mode) - freq = (--opp)->perf * dom->mult_factor; - else - freq = (--opp)->indicative_freq * 1000; - dev_pm_opp_remove(dev, freq); - } + dev_pm_opp_remove_all_dynamic(dev); return ret; } From patchwork Mon Sep 25 13:17:14 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ulf Hansson X-Patchwork-Id: 13397795 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 bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id C7BBFCE7A81 for ; Mon, 25 Sep 2023 13:18:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=BRkf1bYIUmCK6AW+BrYjp5i4xUJqPuvRhoLdR9Z/mdM=; b=233nvskp8G4kEX AHB7OmF9ADV7TPzev/ZQtTXpCxVjsSdXWjrRIdnsiI4zvC/6Z9pCPUxCclXdOvxfGmPSATZpIzyz5 gM/Ww4xYAv1gE5dYlvm1Cit6B56WuKa8C2DNEgj1ZBVWAUp12Mc4HYIj+94mOsSmIX0VbLPj7wc1b Iw8trgf4sxMVcMlkE2rLy4zsdCoi7km1Z/gUe1seb8huGRRXbxaf0dEGouizb9H2AGXAryUwa8jLE 0mfmDvelE5WpBe2xgTZFOB9dycCBjQNogZrfMGFx1sVbnkZR0KfKu72fXQEpIlrBOZ+V53Jbi7aW9 HoXym5YRQPydu5SgW+Wg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qklTe-00EJY2-2s; Mon, 25 Sep 2023 13:18:18 +0000 Received: from mail-lf1-x129.google.com ([2a00:1450:4864:20::129]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qklTS-00EJRS-0c for linux-arm-kernel@lists.infradead.org; Mon, 25 Sep 2023 13:18:07 +0000 Received: by mail-lf1-x129.google.com with SMTP id 2adb3069b0e04-504427aae4fso5151156e87.1 for ; Mon, 25 Sep 2023 06:18:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1695647885; x=1696252685; darn=lists.infradead.org; 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=v69V2ENFt1TssTyCbqe5C845eqJTGhyOD8iB4ntYSb0=; b=TnOp8VpCRDfTmgLpkN4jwyVZIgqEZWIkrNU3TUX801tHru6calNkpehKclNlaL0W6E 7j55q8W/sU1F/HrXQOSzVP65WEu8BGcg8t/1L3LVfuZzLdrVVJ2OfsBJo/nwtRfGY4i/ IVZeuBKEhqh5oPbvXqg4tnh6fF6ik8TpHhTt/Zd6Vk4pleyUg2ndYTRuwC0vZeiM2kyX D6HSwj4tbT9KbEkUOCOIhjR7NvOuR2EfjKR/LkwL8coMxjMtRIpvEb/M3wB+Y/6vLgOU BKa1nMRviKgJdgxgHBw9si+UAbDZv05jH1i3vTiBiH8BI/zbwM3ljV+JcW4rhidDyFgm f5Xw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695647885; x=1696252685; 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=v69V2ENFt1TssTyCbqe5C845eqJTGhyOD8iB4ntYSb0=; b=NV4eYVX1legJqypxREctQ2LnrtoYVNE74sA4UvO42COdOCuI7B7B6S7mSuQrl70ldd zmaytgjV0zd7hI39lwHBjsEaWuvmV8WF/g1OgOqZD0sfpTOL0V+ZfEEYoW3EiIHh2uOU 3irJ53bFwEiNAKM+aEJzTM/cU7P+dcaJ7i9KKmA0gXkYCMAJAl4ea8woYFsOMOnQ6t1y 0r3tCQZ/c3fx2qc8Pvxq+IJTx10tsbbzAymi30BqVTIcvnJXX8iYD3CkBmyzGSZTR7Lx EzUWww7aZyFbzux2ct17SxH+JNsUzmYnaShSkIR/+t7GAMABsnLTtdUBFYQESwafTt7L 7phw== X-Gm-Message-State: AOJu0Yz7sMiOr2qqMJ64hg39S6e6p2fT2iw3x8I9KWDkzJYimIsEsQcu 588waYZkxAW+ytlzwSH2Td2Y5Q== X-Google-Smtp-Source: AGHT+IFB4jox44cuBfgowSWNlx+iPrboExg7HfeLkLynB7PSkl1nWXmqlB8pRN1RfPF76Q7d8xE0dg== X-Received: by 2002:ac2:4e06:0:b0:502:e235:20c7 with SMTP id e6-20020ac24e06000000b00502e23520c7mr3144823lfr.20.1695647884853; Mon, 25 Sep 2023 06:18:04 -0700 (PDT) Received: from uffe-tuxpro14.. (h-94-254-63-18.NA.cust.bahnhof.se. [94.254.63.18]) by smtp.gmail.com with ESMTPSA id m29-20020a056512015d00b004fe10276bbfsm1823583lfo.296.2023.09.25.06.18.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 25 Sep 2023 06:18:04 -0700 (PDT) From: Ulf Hansson To: Sudeep Holla , Cristian Marussi , Viresh Kumar , "Rafael J . Wysocki" Cc: Nishanth Menon , Stephen Boyd , Nikunj Kela , Prasad Sodagudi , Alexandre Torgue , Ulf Hansson , linux-pm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 8/9] firmware: arm_scmi: Specify the performance level when adding an OPP Date: Mon, 25 Sep 2023 15:17:14 +0200 Message-Id: <20230925131715.138411-9-ulf.hansson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230925131715.138411-1-ulf.hansson@linaro.org> References: <20230925131715.138411-1-ulf.hansson@linaro.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230925_061806_232256_383ADC98 X-CRM114-Status: GOOD ( 13.22 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org To enable the performance level to be used for OPPs, let's convert into using the dev_pm_opp_add_dynamic() API when creating them. This will be particularly useful for the SCMI performance domain, as shown through subsequent changes. Signed-off-by: Ulf Hansson --- drivers/firmware/arm_scmi/perf.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/firmware/arm_scmi/perf.c b/drivers/firmware/arm_scmi/perf.c index 733c5ebeb555..c6a1332164c1 100644 --- a/drivers/firmware/arm_scmi/perf.c +++ b/drivers/firmware/arm_scmi/perf.c @@ -787,6 +787,7 @@ static int scmi_dvfs_device_opps_add(const struct scmi_protocol_handle *ph, { int idx, ret; unsigned long freq; + struct dev_pm_opp_data data = {}; struct perf_dom_info *dom; dom = scmi_perf_domain_lookup(ph, domain); @@ -799,7 +800,10 @@ static int scmi_dvfs_device_opps_add(const struct scmi_protocol_handle *ph, else freq = dom->opp[idx].indicative_freq * 1000; - ret = dev_pm_opp_add(dev, freq, 0); + data.level = dom->opp[idx].perf; + data.freq = freq; + + ret = dev_pm_opp_add_dynamic(dev, &data); if (ret) { dev_warn(dev, "failed to add opp %luHz\n", freq); dev_pm_opp_remove_all_dynamic(dev); From patchwork Mon Sep 25 13:17:15 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ulf Hansson X-Patchwork-Id: 13397792 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 bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 033C9CE7A81 for ; Mon, 25 Sep 2023 13:18:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=m5LEPafppkZOmoDJxx8uMqJVLZtWPNnEA4BvXr8oZlY=; b=Bdtk1IBRIJ4LuE MpxaS/SSHdGVrjQaBoTNmntG2yxaYmBdCDc50HWrD6E2Ay1RK2iDWMkmzkkqC3Jsh+CDZ6YFM6CwS sn8f+2OhWHcMoUNJE+WG0rU5KuRZ+AFRZsx/6OUJnpA1v59irILaQNoojJrfyMYe4l39Vixf1yOIe yyGchMaDzKaK4h+HwXnb5U1IcjQXdB49PBIe/yRUE+Im8GvWR7rXcBlrdrOxMOga3ixPaYWpdMHJI QfMGjhYqMmzP/eEaagLEc6FWWtLect3YR5qjN5J/WwLzQ4vswYt314YNYZNc/eJAW5Y9rAcVhfKt0 4FQgdEW+cBXe/AAE/1PA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qklTf-00EJYZ-1a; Mon, 25 Sep 2023 13:18:19 +0000 Received: from mail-lj1-x22d.google.com ([2a00:1450:4864:20::22d]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qklTT-00EJS3-1v for linux-arm-kernel@lists.infradead.org; Mon, 25 Sep 2023 13:18:08 +0000 Received: by mail-lj1-x22d.google.com with SMTP id 38308e7fff4ca-2bff936e10fso90935001fa.1 for ; Mon, 25 Sep 2023 06:18:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1695647886; x=1696252686; darn=lists.infradead.org; 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=fsWOr9mWvmZX2dTzJ+FE4Q2Az+t23E8t0uKEFGAoZOI=; b=wDi5DLTtYM+ATpygogDty/27A/WddrBTC0NbGVI4NsXhcnBxE12DrNGjVKDojW89CH YgWiQVgHYnl1jm0RCFTqV28zld66fVA6poVqbMGMXbPfA12J6pdNVpNMev0QSPXjR0e/ ZjPFXPHQDAxEuLFBwy5E01go84db6w/O/2vjofoH71QiekUkJKe9rWxL+12fET0ag4PC WSvX0/8UcyRPfYdlJJAkNUotc9Xcf2vPUDZOEdHtJt0lgVH0kSc8FezhzpaqU1xuor2u UdPLJ0n1iWDM+QNRQZEj7HazW+tUMWGoKv31ns9MEtmbOhEOiEq5WUttsRWQ3jKUoSUV BhAg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695647886; x=1696252686; 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=fsWOr9mWvmZX2dTzJ+FE4Q2Az+t23E8t0uKEFGAoZOI=; b=p0XJTLDtH3toueBfUfi5gYDUiXNKlmQpENqJK8gzGbtFIoc9ftP3tK2fOqvqPFBaYl gCtlNV9YPveZCTUe9OVCyj47C+tgxlfLVU9ShXScN8AfbAXCpIqacBJ3pILUaMbGMp0e L2yaeCH6z96/4gLSJRHHd/X1yj5Lo2UOXY9Kg/PxUZUlf282Iwt83+27EINyUQ3noPZi VAMonojwQd33hRGNevmHTWAIIVETR4mLoCpgIoAb/3jhBxqMvfxNqBVwA1mUSR2KxCFk jIuPdrMynN8wDzuwznY7JlxGsKFnoCojHHMB/dHjfAxZINmqf6+OXEgMKODwnxFK5FP4 iCGg== X-Gm-Message-State: AOJu0YwFyRRY/+UUUWSWQEav8Ksb6hK9U8ngbkKBIe5uYcAUidWVZV5N BBIxi3pvSkAoYkzKxsuwouKquw== X-Google-Smtp-Source: AGHT+IHKfCzTsoS2MbdaJLaciuQf01sFJ3IqvH48z4MJ8ZgPdLdgU+/B/Iawd1QmPe8D7Z1RTRnMSw== X-Received: by 2002:ac2:5110:0:b0:502:a964:84b1 with SMTP id q16-20020ac25110000000b00502a96484b1mr2196692lfb.25.1695647886003; Mon, 25 Sep 2023 06:18:06 -0700 (PDT) Received: from uffe-tuxpro14.. (h-94-254-63-18.NA.cust.bahnhof.se. [94.254.63.18]) by smtp.gmail.com with ESMTPSA id m29-20020a056512015d00b004fe10276bbfsm1823583lfo.296.2023.09.25.06.18.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 25 Sep 2023 06:18:05 -0700 (PDT) From: Ulf Hansson To: Sudeep Holla , Cristian Marussi , Viresh Kumar , "Rafael J . Wysocki" Cc: Nishanth Menon , Stephen Boyd , Nikunj Kela , Prasad Sodagudi , Alexandre Torgue , Ulf Hansson , linux-pm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 9/9] firmware: arm_scmi: Add generic OPP support to the SCMI performance domain Date: Mon, 25 Sep 2023 15:17:15 +0200 Message-Id: <20230925131715.138411-10-ulf.hansson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230925131715.138411-1-ulf.hansson@linaro.org> References: <20230925131715.138411-1-ulf.hansson@linaro.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230925_061807_639828_92E73E14 X-CRM114-Status: GOOD ( 18.15 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org To allow a consumer driver to use the OPP library to scale the performance for its device, let's dynamically add the OPP table when the device gets attached to its SCMI performance domain. Signed-off-by: Ulf Hansson --- drivers/pmdomain/arm/scmi_perf_domain.c | 34 +++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/drivers/pmdomain/arm/scmi_perf_domain.c b/drivers/pmdomain/arm/scmi_perf_domain.c index aa100270500f..bc3f78abb6da 100644 --- a/drivers/pmdomain/arm/scmi_perf_domain.c +++ b/drivers/pmdomain/arm/scmi_perf_domain.c @@ -9,6 +9,7 @@ #include #include #include +#include #include #include @@ -42,6 +43,37 @@ scmi_pd_set_perf_state(struct generic_pm_domain *genpd, unsigned int state) return ret; } +static int +scmi_pd_attach_dev(struct generic_pm_domain *genpd, struct device *dev) +{ + struct scmi_perf_domain *pd = to_scmi_pd(genpd); + int ret; + + /* + * Allow the device to be attached, but don't add the OPP table unless + * the performance level can be changed. + */ + if (!pd->info->set_perf) + return 0; + + ret = pd->perf_ops->device_opps_add(pd->ph, dev, pd->domain_id); + if (ret) + dev_warn(dev, "failed to add OPPs for the device\n"); + + return ret; +} + +static void +scmi_pd_detach_dev(struct generic_pm_domain *genpd, struct device *dev) +{ + struct scmi_perf_domain *pd = to_scmi_pd(genpd); + + if (!pd->info->set_perf) + return; + + dev_pm_opp_remove_all_dynamic(dev); +} + static int scmi_perf_domain_probe(struct scmi_device *sdev) { struct device *dev = &sdev->dev; @@ -95,6 +127,8 @@ static int scmi_perf_domain_probe(struct scmi_device *sdev) scmi_pd->genpd.flags = GENPD_FLAG_ALWAYS_ON | GENPD_FLAG_OPP_TABLE_FW; scmi_pd->genpd.set_performance_state = scmi_pd_set_perf_state; + scmi_pd->genpd.attach_dev = scmi_pd_attach_dev; + scmi_pd->genpd.detach_dev = scmi_pd_detach_dev; ret = pm_genpd_init(&scmi_pd->genpd, NULL, false); if (ret)