From nobody Sat Sep 21 23:32:57 2024 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 6052BC43334 for ; Thu, 7 Jul 2022 07:16:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234768AbiGGHQZ (ORCPT ); Thu, 7 Jul 2022 03:16:25 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38728 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234678AbiGGHQU (ORCPT ); Thu, 7 Jul 2022 03:16:20 -0400 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 619D62F675; Thu, 7 Jul 2022 00:16:19 -0700 (PDT) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 85EB2106F; Thu, 7 Jul 2022 00:16:19 -0700 (PDT) Received: from e123648.arm.com (unknown [10.57.11.194]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 503463F70D; Thu, 7 Jul 2022 00:16:16 -0700 (PDT) From: Lukasz Luba To: linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Cc: daniel.lezcano@linaro.org, amitk@kernel.org, rui.zhang@intel.com, lukasz.luba@arm.com, viresh.kumar@linaro.org, rafael@kernel.org, dietmar.eggemann@arm.com, nm@ti.com, sboyd@kernel.org, sudeep.holla@arm.com, cristian.marussi@arm.com, matthias.bgg@gmail.com, linux-mediatek@lists.infradead.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH v2 4/4] cpufreq: scmi: Support the power scale in micro-Watts in SCMI v3.1 Date: Thu, 7 Jul 2022 08:15:55 +0100 Message-Id: <20220707071555.10085-5-lukasz.luba@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20220707071555.10085-1-lukasz.luba@arm.com> References: <20220707071555.10085-1-lukasz.luba@arm.com> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" The SCMI v3.1 adds support for power values in micro-Watts. They are not always in milli-Watts anymore (ignoring the bogo-Watts). Thus, the power must be converted conditionally before sending to Energy Model. Add the logic which handles the needed checks and conversions. Acked-by: Sudeep Holla Signed-off-by: Lukasz Luba Acked-by: Viresh Kumar --- drivers/cpufreq/scmi-cpufreq.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/drivers/cpufreq/scmi-cpufreq.c b/drivers/cpufreq/scmi-cpufreq.c index bfd35583d653..513a071845c2 100644 --- a/drivers/cpufreq/scmi-cpufreq.c +++ b/drivers/cpufreq/scmi-cpufreq.c @@ -100,7 +100,7 @@ static int __maybe_unused scmi_get_cpu_power(struct device *cpu_dev, unsigned long *power, unsigned long *KHz) { - bool power_scale_mw =3D perf_ops->power_scale_mw_get(ph); + enum scmi_power_scale power_scale =3D perf_ops->power_scale_get(ph); unsigned long Hz; int ret, domain; =20 @@ -114,8 +114,8 @@ scmi_get_cpu_power(struct device *cpu_dev, unsigned lon= g *power, if (ret) return ret; =20 - /* Provide bigger resolution power to the Energy Model */ - if (power_scale_mw) + /* Convert the power to uW if it is mW (ignore bogoW) */ + if (power_scale =3D=3D SCMI_POWER_MILLIWATTS) *power *=3D MICROWATT_PER_MILLIWATT; =20 /* The EM framework specifies the frequency in KHz. */ @@ -255,8 +255,9 @@ static int scmi_cpufreq_exit(struct cpufreq_policy *pol= icy) static void scmi_cpufreq_register_em(struct cpufreq_policy *policy) { struct em_data_callback em_cb =3D EM_DATA_CB(scmi_get_cpu_power); - bool power_scale_mw =3D perf_ops->power_scale_mw_get(ph); + enum scmi_power_scale power_scale =3D perf_ops->power_scale_get(ph); struct scmi_data *priv =3D policy->driver_data; + bool em_power_scale =3D false; =20 /* * This callback will be called for each policy, but we don't need to @@ -268,9 +269,13 @@ static void scmi_cpufreq_register_em(struct cpufreq_po= licy *policy) if (!priv->nr_opp) return; =20 + if (power_scale =3D=3D SCMI_POWER_MILLIWATTS + || power_scale =3D=3D SCMI_POWER_MICROWATTS) + em_power_scale =3D true; + em_dev_register_perf_domain(get_cpu_device(policy->cpu), priv->nr_opp, &em_cb, priv->opp_shared_cpus, - power_scale_mw); + em_power_scale); } =20 static struct cpufreq_driver scmi_cpufreq_driver =3D { --=20 2.17.1