From: Matthias Kaehlcke <mka@chromium.org>
To: Quentin Perret <quentin.perret@arm.com>
Cc: rjw@rjwysocki.net, viresh.kumar@linaro.org, sudeep.holla@arm.com,
liviu.dudau@arm.com, lorenzo.pieralisi@arm.com,
robh+dt@kernel.org, mark.rutland@arm.com, nm@ti.com,
sboyd@kernel.org, linux-arm-kernel@lists.infradead.org,
devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-pm@vger.kernel.org, dietmar.eggemann@arm.com
Subject: Re: [PATCH 2/7] cpufreq: dt: Register an Energy Model
Date: Mon, 28 Jan 2019 11:36:56 -0800 [thread overview]
Message-ID: <20190128193656.GI81583@google.com> (raw)
In-Reply-To: <20190128165522.31749-3-quentin.perret@arm.com>
On Mon, Jan 28, 2019 at 04:55:17PM +0000, Quentin Perret wrote:
> Now that PM_OPP provides a helper function to estimate the power
> consumed by CPUs, make sure to try and register an Energy Model (EM)
> from cpufreq-dt, hence ensuring interested subsystems (the task
> scheduler, for example) can make use of that information when available.
>
> Signed-off-by: Quentin Perret <quentin.perret@arm.com>
> ---
> drivers/cpufreq/cpufreq-dt.c | 7 ++++++-
> 1 file changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/cpufreq/cpufreq-dt.c b/drivers/cpufreq/cpufreq-dt.c
> index e58bfcb1169e..7556e07e7a9f 100644
> --- a/drivers/cpufreq/cpufreq-dt.c
> +++ b/drivers/cpufreq/cpufreq-dt.c
> @@ -16,6 +16,7 @@
> #include <linux/cpu_cooling.h>
> #include <linux/cpufreq.h>
> #include <linux/cpumask.h>
> +#include <linux/energy_model.h>
> #include <linux/err.h>
> #include <linux/module.h>
> #include <linux/of.h>
> @@ -152,6 +153,7 @@ static int resources_available(void)
>
> static int cpufreq_init(struct cpufreq_policy *policy)
> {
> + struct em_data_callback em_cb = EM_DATA_CB(of_dev_pm_opp_get_cpu_power);
> struct cpufreq_frequency_table *freq_table;
> struct opp_table *opp_table = NULL;
> struct private_data *priv;
> @@ -160,7 +162,7 @@ static int cpufreq_init(struct cpufreq_policy *policy)
> unsigned int transition_latency;
> bool fallback = false;
> const char *name;
> - int ret;
> + int ret, nr_opp;
>
> cpu_dev = get_cpu_device(policy->cpu);
> if (!cpu_dev) {
> @@ -237,6 +239,7 @@ static int cpufreq_init(struct cpufreq_policy *policy)
> ret = -EPROBE_DEFER;
> goto out_free_opp;
> }
> + nr_opp = ret;
>
> if (fallback) {
> cpumask_setall(policy->cpus);
> @@ -280,6 +283,8 @@ static int cpufreq_init(struct cpufreq_policy *policy)
> policy->cpuinfo.transition_latency = transition_latency;
> policy->dvfs_possible_from_any_cpu = true;
>
> + em_register_perf_domain(policy->cpus, nr_opp, &em_cb);
The perf domain is registered here but not unregistered in exit()
(there is currently no API do do this). When init() is called for the
second (or third, ...) time em_register_perf_domain() is called again,
though it skips the registration. To make things more explicit and not
rely on internal behavior of em_register_perf_domain() you could place
the registration inside an 'if (!em_cpu_get(cpu))' branch.
You should probably check the return value of em_register_perf_domain()
and at least print a warning in case of failure. This would require to
call em_register_perf_domain() only when CONFIG_ENERGY_MODEL=y (the
function returns -EINVAL otherwise).
I think this patch will result in error messages at registration on
platforms that use the cpufreq-dt driver and don't specify
'dynamic-power-coefficient' for the CPUs in the DT. Not sure if that's
a problem as long as the cpufreq initialization succeeds regardless,
it could be seen as a not-so-gentle nudge to add the values.
Cheers
Matthias
next prev parent reply other threads:[~2019-01-28 19:36 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-01-28 16:55 [PATCH 0/7] Register an Energy Model for Arm reference platforms Quentin Perret
2019-01-28 16:55 ` [PATCH 1/7] PM / OPP: Introduce a power estimation helper Quentin Perret
2019-01-28 19:02 ` Matthias Kaehlcke
2019-01-29 9:03 ` Quentin Perret
2019-01-29 17:52 ` Matthias Kaehlcke
2019-01-29 5:10 ` Viresh Kumar
2019-01-29 9:09 ` Quentin Perret
2019-01-28 16:55 ` [PATCH 2/7] cpufreq: dt: Register an Energy Model Quentin Perret
2019-01-28 19:36 ` Matthias Kaehlcke [this message]
2019-01-29 5:21 ` Viresh Kumar
2019-01-29 9:15 ` Quentin Perret
2019-01-30 5:18 ` Viresh Kumar
2019-01-30 9:12 ` Quentin Perret
2019-01-30 10:17 ` Viresh Kumar
2019-01-30 10:20 ` Quentin Perret
2019-01-29 5:30 ` Viresh Kumar
2019-01-29 9:10 ` Quentin Perret
2019-01-28 16:55 ` [PATCH 3/7] cpufreq: scpi: " Quentin Perret
2019-01-29 5:31 ` Viresh Kumar
2019-01-28 16:55 ` [PATCH 4/7] cpufreq: arm_big_little: " Quentin Perret
2019-01-28 16:55 ` [PATCH 5/7] cpufreq: scmi: " Quentin Perret
2019-01-28 16:55 ` [PATCH 6/7] arm64: dts: juno: Add cpu dynamic-power-coefficient information Quentin Perret
2019-01-29 15:27 ` Sudeep Holla
2019-01-30 10:23 ` Quentin Perret
2019-01-28 16:55 ` [PATCH 7/7] arm: dts: vexpress-v2p-ca15_a7: " Quentin Perret
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=20190128193656.GI81583@google.com \
--to=mka@chromium.org \
--cc=devicetree@vger.kernel.org \
--cc=dietmar.eggemann@arm.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=liviu.dudau@arm.com \
--cc=lorenzo.pieralisi@arm.com \
--cc=mark.rutland@arm.com \
--cc=nm@ti.com \
--cc=quentin.perret@arm.com \
--cc=rjw@rjwysocki.net \
--cc=robh+dt@kernel.org \
--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: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).