From: Lukasz Luba <lukasz.luba@arm.com>
To: linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
dri-devel@lists.freedesktop.org, linux-omap@vger.kernel.org,
linux-mediatek@lists.infradead.org,
linux-arm-msm@vger.kernel.org, linux-imx@nxp.com
Cc: nm@ti.com, juri.lelli@redhat.com, peterz@infradead.org,
viresh.kumar@linaro.org, liviu.dudau@arm.com,
bjorn.andersson@linaro.org, bsegall@google.com,
festevam@gmail.com, mka@chromium.org, robh@kernel.org,
amit.kucheria@verdurent.com, lorenzo.pieralisi@arm.com,
khilman@kernel.org, daniel.lezcano@linaro.org,
steven.price@arm.com, cw00.choi@samsung.com, mingo@redhat.com,
mgorman@suse.de, rui.zhang@intel.com,
alyssa.rosenzweig@collabora.com, orjan.eide@arm.com,
daniel@ffwll.ch, b.zolnierkie@samsung.com,
s.hauer@pengutronix.de, rostedt@goodmis.org,
matthias.bgg@gmail.com, Dietmar.Eggemann@arm.com,
airlied@linux.ie, tomeu.vizoso@collabora.com, qperret@google.com,
sboyd@kernel.org, rdunlap@infradead.org, rjw@rjwysocki.net,
agross@kernel.org, kernel@pengutronix.de, sudeep.holla@arm.com,
patrick.bellasi@matbug.net, shawnguo@kernel.org,
lukasz.luba@arm.com
Subject: [PATCH v6 03/10] PM / EM: update callback structure and add device pointer
Date: Fri, 10 Apr 2020 09:42:03 +0100 [thread overview]
Message-ID: <20200410084210.24932-4-lukasz.luba@arm.com> (raw)
In-Reply-To: <20200410084210.24932-1-lukasz.luba@arm.com>
The Energy Model framework is going to support devices other that CPUs. In
order to make this happen change the callback function and add pointer to
a device as an argument.
Update the related users to use new function and new callback from the
Energy Model.
Signed-off-by: Lukasz Luba <lukasz.luba@arm.com>
---
drivers/cpufreq/scmi-cpufreq.c | 11 +++--------
drivers/opp/of.c | 9 ++-------
include/linux/energy_model.h | 15 ++++++++-------
kernel/power/energy_model.c | 9 +++++----
4 files changed, 18 insertions(+), 26 deletions(-)
diff --git a/drivers/cpufreq/scmi-cpufreq.c b/drivers/cpufreq/scmi-cpufreq.c
index 61623e2ff149..11ee24e06d12 100644
--- a/drivers/cpufreq/scmi-cpufreq.c
+++ b/drivers/cpufreq/scmi-cpufreq.c
@@ -103,17 +103,12 @@ scmi_get_sharing_cpus(struct device *cpu_dev, struct cpumask *cpumask)
}
static int __maybe_unused
-scmi_get_cpu_power(unsigned long *power, unsigned long *KHz, int cpu)
+scmi_get_cpu_power(unsigned long *power, unsigned long *KHz,
+ struct device *cpu_dev)
{
- struct device *cpu_dev = get_cpu_device(cpu);
unsigned long Hz;
int ret, domain;
- if (!cpu_dev) {
- pr_err("failed to get cpu%d device\n", cpu);
- return -ENODEV;
- }
-
domain = handle->perf_ops->device_domain_id(cpu_dev);
if (domain < 0)
return domain;
@@ -200,7 +195,7 @@ static int scmi_cpufreq_init(struct cpufreq_policy *policy)
policy->fast_switch_possible = true;
- em_register_perf_domain(policy->cpus, nr_opp, &em_cb);
+ em_dev_register_perf_domain(cpu_dev, nr_opp, &em_cb, policy->cpus);
return 0;
diff --git a/drivers/opp/of.c b/drivers/opp/of.c
index 9cd8f0adacae..5b75829a915d 100644
--- a/drivers/opp/of.c
+++ b/drivers/opp/of.c
@@ -1047,9 +1047,8 @@ EXPORT_SYMBOL_GPL(dev_pm_opp_get_of_node);
* calculation failed because of missing parameters, 0 otherwise.
*/
static int __maybe_unused _get_cpu_power(unsigned long *mW, unsigned long *kHz,
- int cpu)
+ struct device *cpu_dev)
{
- struct device *cpu_dev;
struct dev_pm_opp *opp;
struct device_node *np;
unsigned long mV, Hz;
@@ -1057,10 +1056,6 @@ static int __maybe_unused _get_cpu_power(unsigned long *mW, unsigned long *kHz,
u64 tmp;
int ret;
- cpu_dev = get_cpu_device(cpu);
- if (!cpu_dev)
- return -ENODEV;
-
np = of_node_get(cpu_dev->of_node);
if (!np)
return -EINVAL;
@@ -1128,6 +1123,6 @@ void dev_pm_opp_of_register_em(struct cpumask *cpus)
if (ret || !cap)
return;
- em_register_perf_domain(cpus, nr_opp, &em_cb);
+ em_dev_register_perf_domain(cpu_dev, nr_opp, &em_cb, cpus);
}
EXPORT_SYMBOL_GPL(dev_pm_opp_of_register_em);
diff --git a/include/linux/energy_model.h b/include/linux/energy_model.h
index 7c048df98447..7076cb22b247 100644
--- a/include/linux/energy_model.h
+++ b/include/linux/energy_model.h
@@ -48,24 +48,25 @@ struct em_perf_domain {
struct em_data_callback {
/**
* active_power() - Provide power at the next performance state of
- * a CPU
+ * a device
* @power : Active power at the performance state in mW
* (modified)
* @freq : Frequency at the performance state in kHz
* (modified)
- * @cpu : CPU for which we do this operation
+ * @dev : Device for which we do this operation (can be a CPU)
*
- * active_power() must find the lowest performance state of 'cpu' above
+ * active_power() must find the lowest performance state of 'dev' above
* 'freq' and update 'power' and 'freq' to the matching active power
* and frequency.
*
- * The power is the one of a single CPU in the domain, expressed in
- * milli-watts. It is expected to fit in the [0, EM_MAX_POWER]
- * range.
+ * In case of CPUs, the power is the one of a single CPU in the domain,
+ * expressed in milli-watts. It is expected to fit in the
+ * [0, EM_MAX_POWER] range.
*
* Return 0 on success.
*/
- int (*active_power)(unsigned long *power, unsigned long *freq, int cpu);
+ int (*active_power)(unsigned long *power, unsigned long *freq,
+ struct device *dev);
};
#define EM_DATA_CB(_active_power_cb) { .active_power = &_active_power_cb }
diff --git a/kernel/power/energy_model.c b/kernel/power/energy_model.c
index 875b163e54ab..5b8a1566526a 100644
--- a/kernel/power/energy_model.c
+++ b/kernel/power/energy_model.c
@@ -78,8 +78,9 @@ core_initcall(em_debug_init);
#else /* CONFIG_DEBUG_FS */
static void em_debug_create_pd(struct em_perf_domain *pd, int cpu) {}
#endif
-static struct em_perf_domain *em_create_pd(cpumask_t *span, int nr_states,
- struct em_data_callback *cb)
+static struct em_perf_domain *
+em_create_pd(struct device *dev, int nr_states, struct em_data_callback *cb,
+ cpumask_t *span)
{
unsigned long opp_eff, prev_opp_eff = ULONG_MAX;
unsigned long power, freq, prev_freq = 0;
@@ -106,7 +107,7 @@ static struct em_perf_domain *em_create_pd(cpumask_t *span, int nr_states,
* lowest performance state of 'cpu' above 'freq' and updates
* 'power' and 'freq' accordingly.
*/
- ret = cb->active_power(&power, &freq, cpu);
+ ret = cb->active_power(&power, &freq, dev);
if (ret) {
pr_err("pd%d: invalid perf. state: %d\n", cpu, ret);
goto free_ps_table;
@@ -237,7 +238,7 @@ int em_dev_register_perf_domain(struct device *dev, unsigned int nr_states,
}
/* Create the performance domain and add it to the Energy Model. */
- pd = em_create_pd(span, nr_states, cb);
+ pd = em_create_pd(dev, nr_states, cb, span);
if (!pd) {
ret = -EINVAL;
goto unlock;
--
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:[~2020-04-10 8:43 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-10 8:42 [PATCH v6 00/10] Add support for devices in the Energy Model Lukasz Luba
2020-04-10 8:42 ` [PATCH v6 01/10] PM / EM: change naming convention from 'capacity' to 'performance' Lukasz Luba
2020-04-23 9:55 ` Daniel Lezcano
2020-04-10 8:42 ` [PATCH v6 02/10] PM / EM: introduce em_dev_register_perf_domain function Lukasz Luba
2020-04-23 10:46 ` Daniel Lezcano
2020-04-10 8:42 ` Lukasz Luba [this message]
2020-04-23 13:22 ` [PATCH v6 03/10] PM / EM: update callback structure and add device pointer Daniel Lezcano
2020-04-23 15:28 ` Lukasz Luba
2020-04-10 8:42 ` [PATCH v6 04/10] PM / EM: add support for other devices than CPUs in Energy Model Lukasz Luba
2020-04-10 11:12 ` Luis Gerhorst
2020-04-10 11:34 ` Lukasz Luba
2020-04-23 15:12 ` Daniel Lezcano
2020-04-23 16:57 ` Lukasz Luba
2020-04-23 17:15 ` Daniel Lezcano
2020-04-23 17:19 ` Lukasz Luba
2020-04-10 8:42 ` [PATCH v6 05/10] PM / EM: remove em_register_perf_domain Lukasz Luba
2020-04-23 15:14 ` Daniel Lezcano
2020-04-10 8:42 ` [PATCH v6 06/10] PM / EM: change name of em_pd_energy to em_cpu_energy Lukasz Luba
2020-04-23 15:28 ` Daniel Lezcano
2020-04-10 8:42 ` [PATCH v6 07/10] Documentation: power: update Energy Model description Lukasz Luba
2020-04-23 16:07 ` Daniel Lezcano
2020-04-10 8:42 ` [PATCH v6 08/10] OPP: refactor dev_pm_opp_of_register_em() and update related drivers Lukasz Luba
2020-04-23 16:47 ` Daniel Lezcano
2020-04-10 8:42 ` [PATCH v6 09/10] thermal: devfreq_cooling: Refactor code and switch to use Energy Model Lukasz Luba
2020-04-23 17:57 ` Daniel Lezcano
2020-04-24 10:02 ` Lukasz Luba
2020-04-24 10:43 ` Daniel Lezcano
2020-04-10 8:42 ` [PATCH v6 10/10] drm/panfrost: Register devfreq cooling and attempt to add " 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=20200410084210.24932-4-lukasz.luba@arm.com \
--to=lukasz.luba@arm.com \
--cc=Dietmar.Eggemann@arm.com \
--cc=agross@kernel.org \
--cc=airlied@linux.ie \
--cc=alyssa.rosenzweig@collabora.com \
--cc=amit.kucheria@verdurent.com \
--cc=b.zolnierkie@samsung.com \
--cc=bjorn.andersson@linaro.org \
--cc=bsegall@google.com \
--cc=cw00.choi@samsung.com \
--cc=daniel.lezcano@linaro.org \
--cc=daniel@ffwll.ch \
--cc=dri-devel@lists.freedesktop.org \
--cc=festevam@gmail.com \
--cc=juri.lelli@redhat.com \
--cc=kernel@pengutronix.de \
--cc=khilman@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-imx@nxp.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mediatek@lists.infradead.org \
--cc=linux-omap@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=liviu.dudau@arm.com \
--cc=lorenzo.pieralisi@arm.com \
--cc=matthias.bgg@gmail.com \
--cc=mgorman@suse.de \
--cc=mingo@redhat.com \
--cc=mka@chromium.org \
--cc=nm@ti.com \
--cc=orjan.eide@arm.com \
--cc=patrick.bellasi@matbug.net \
--cc=peterz@infradead.org \
--cc=qperret@google.com \
--cc=rdunlap@infradead.org \
--cc=rjw@rjwysocki.net \
--cc=robh@kernel.org \
--cc=rostedt@goodmis.org \
--cc=rui.zhang@intel.com \
--cc=s.hauer@pengutronix.de \
--cc=sboyd@kernel.org \
--cc=shawnguo@kernel.org \
--cc=steven.price@arm.com \
--cc=sudeep.holla@arm.com \
--cc=tomeu.vizoso@collabora.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).