From: Lukasz Luba <lukasz.luba@arm.com> 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 4/4] cpufreq: scmi: Support the power scale in micro-Watts in SCMI v3.1 Date: Wed, 22 Jun 2022 15:58:02 +0100 [thread overview] Message-ID: <20220622145802.13032-5-lukasz.luba@arm.com> (raw) In-Reply-To: <20220622145802.13032-1-lukasz.luba@arm.com> 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. Signed-off-by: Lukasz Luba <lukasz.luba@arm.com> --- 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 = perf_ops->power_scale_mw_get(ph); + enum scmi_power_scale power_scale = perf_ops->power_scale_get(ph); unsigned long Hz; int ret, domain; @@ -114,8 +114,8 @@ scmi_get_cpu_power(struct device *cpu_dev, unsigned long *power, if (ret) return ret; - /* 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 == SCMI_POWER_MILLIWATTS) *power *= MICROWATT_PER_MILLIWATT; /* The EM framework specifies the frequency in KHz. */ @@ -255,8 +255,9 @@ static int scmi_cpufreq_exit(struct cpufreq_policy *policy) static void scmi_cpufreq_register_em(struct cpufreq_policy *policy) { struct em_data_callback em_cb = EM_DATA_CB(scmi_get_cpu_power); - bool power_scale_mw = perf_ops->power_scale_mw_get(ph); + enum scmi_power_scale power_scale = perf_ops->power_scale_get(ph); struct scmi_data *priv = policy->driver_data; + bool em_power_scale = false; /* * 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_policy *policy) if (!priv->nr_opp) return; + if (power_scale == SCMI_POWER_MILLIWATTS + || power_scale == SCMI_POWER_MICROWATTS) + em_power_scale = 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); } static struct cpufreq_driver scmi_cpufreq_driver = { -- 2.17.1
WARNING: multiple messages have this Message-ID (diff)
From: Lukasz Luba <lukasz.luba@arm.com> 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 4/4] cpufreq: scmi: Support the power scale in micro-Watts in SCMI v3.1 Date: Wed, 22 Jun 2022 15:58:02 +0100 [thread overview] Message-ID: <20220622145802.13032-5-lukasz.luba@arm.com> (raw) In-Reply-To: <20220622145802.13032-1-lukasz.luba@arm.com> 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. Signed-off-by: Lukasz Luba <lukasz.luba@arm.com> --- 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 = perf_ops->power_scale_mw_get(ph); + enum scmi_power_scale power_scale = perf_ops->power_scale_get(ph); unsigned long Hz; int ret, domain; @@ -114,8 +114,8 @@ scmi_get_cpu_power(struct device *cpu_dev, unsigned long *power, if (ret) return ret; - /* 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 == SCMI_POWER_MILLIWATTS) *power *= MICROWATT_PER_MILLIWATT; /* The EM framework specifies the frequency in KHz. */ @@ -255,8 +255,9 @@ static int scmi_cpufreq_exit(struct cpufreq_policy *policy) static void scmi_cpufreq_register_em(struct cpufreq_policy *policy) { struct em_data_callback em_cb = EM_DATA_CB(scmi_get_cpu_power); - bool power_scale_mw = perf_ops->power_scale_mw_get(ph); + enum scmi_power_scale power_scale = perf_ops->power_scale_get(ph); struct scmi_data *priv = policy->driver_data; + bool em_power_scale = false; /* * 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_policy *policy) if (!priv->nr_opp) return; + if (power_scale == SCMI_POWER_MILLIWATTS + || power_scale == SCMI_POWER_MICROWATTS) + em_power_scale = 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); } static struct cpufreq_driver scmi_cpufreq_driver = { -- 2.17.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2022-06-22 14:59 UTC|newest] Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top 2022-06-22 14:57 [PATCH 0/4] Energy Model power in micro-Watts and SCMI v3.1 alignment Lukasz Luba 2022-06-22 14:57 ` Lukasz Luba 2022-06-22 14:57 ` [PATCH 1/4] PM: EM: convert power field to micro-Watts precision and align drivers Lukasz Luba 2022-06-22 14:57 ` Lukasz Luba 2022-07-05 9:09 ` Daniel Lezcano 2022-07-05 9:09 ` Daniel Lezcano 2022-07-06 9:05 ` Lukasz Luba 2022-07-06 9:05 ` Lukasz Luba 2022-06-22 14:58 ` [PATCH 2/4] Documentation: EM: Switch to micro-Watts scale Lukasz Luba 2022-06-22 14:58 ` Lukasz Luba 2022-07-05 9:10 ` Daniel Lezcano 2022-07-05 9:10 ` Daniel Lezcano 2022-07-06 9:06 ` Lukasz Luba 2022-07-06 9:06 ` Lukasz Luba 2022-06-22 14:58 ` [PATCH 3/4] firmware: arm_scmi: Get detailed power scale from perf Lukasz Luba 2022-06-22 14:58 ` Lukasz Luba 2022-06-22 15:53 ` Sudeep Holla 2022-06-22 15:53 ` Sudeep Holla 2022-06-23 7:50 ` Lukasz Luba 2022-06-23 7:50 ` Lukasz Luba 2022-06-22 14:58 ` Lukasz Luba [this message] 2022-06-22 14:58 ` [PATCH 4/4] cpufreq: scmi: Support the power scale in micro-Watts in SCMI v3.1 Lukasz Luba 2022-06-22 15:55 ` Sudeep Holla 2022-06-22 15:55 ` Sudeep Holla 2022-07-05 9:25 ` Daniel Lezcano 2022-07-05 9:25 ` Daniel Lezcano 2022-07-06 9:08 ` Lukasz Luba 2022-07-06 9:08 ` Lukasz Luba 2022-06-29 9:49 ` [PATCH 0/4] Energy Model power in micro-Watts and SCMI v3.1 alignment Lukasz Luba 2022-06-29 9:49 ` Lukasz Luba 2022-06-29 9:53 ` Viresh Kumar 2022-06-29 9:53 ` Viresh Kumar 2022-06-29 10:00 ` Lukasz Luba 2022-06-29 10:00 ` Lukasz Luba 2022-06-29 10:01 ` Viresh Kumar 2022-06-29 10:01 ` Viresh Kumar 2022-06-29 10:21 ` Daniel Lezcano 2022-06-29 10:21 ` Daniel Lezcano 2022-06-29 10:24 ` Lukasz Luba 2022-06-29 10:24 ` Lukasz Luba
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20220622145802.13032-5-lukasz.luba@arm.com \ --to=lukasz.luba@arm.com \ --cc=amitk@kernel.org \ --cc=cristian.marussi@arm.com \ --cc=daniel.lezcano@linaro.org \ --cc=dietmar.eggemann@arm.com \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-mediatek@lists.infradead.org \ --cc=linux-pm@vger.kernel.org \ --cc=matthias.bgg@gmail.com \ --cc=nm@ti.com \ --cc=rafael@kernel.org \ --cc=rui.zhang@intel.com \ --cc=sboyd@kernel.org \ --cc=sudeep.holla@arm.com \ --cc=viresh.kumar@linaro.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.