From: Lukasz Luba <lukasz.luba@arm.com>
To: linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org
Cc: amit.kachhap@gmail.com, daniel.lezcano@linaro.org,
viresh.kumar@linaro.org, rafael@kernel.org, amitk@kernel.org,
rui.zhang@intel.com, dietmar.eggemann@arm.com,
lukasz.luba@arm.com, Pierre.Gondois@arm.com
Subject: [PATCH 1/2] thermal: cooling: Check Energy Model type in cpufreq_cooling and devfreq_cooling
Date: Mon, 7 Feb 2022 07:30:35 +0000 [thread overview]
Message-ID: <20220207073036.14901-2-lukasz.luba@arm.com> (raw)
In-Reply-To: <20220207073036.14901-1-lukasz.luba@arm.com>
The Energy Model supports power values either in Watts or in some abstract
scale. When the 2nd option is in use, the thermal governor IPA should not
be allowed to operate, since the relation between cooling devices is not
properly defined. Thus, it might be possible that big GPU has lower power
values in abstract scale than a Little CPU. To mitigate a misbehaviour
of the thermal control algorithm, simply not register a cooling device
capable of working with IPA.
Signed-off-by: Lukasz Luba <lukasz.luba@arm.com>
---
drivers/thermal/cpufreq_cooling.c | 2 +-
drivers/thermal/devfreq_cooling.c | 16 +++++++++++++---
2 files changed, 14 insertions(+), 4 deletions(-)
diff --git a/drivers/thermal/cpufreq_cooling.c b/drivers/thermal/cpufreq_cooling.c
index 43b1ae8a7789..f831ed40b333 100644
--- a/drivers/thermal/cpufreq_cooling.c
+++ b/drivers/thermal/cpufreq_cooling.c
@@ -328,7 +328,7 @@ static inline bool em_is_sane(struct cpufreq_cooling_device *cpufreq_cdev,
struct cpufreq_policy *policy;
unsigned int nr_levels;
- if (!em)
+ if (!em || !(em->flags & EM_PERF_DOMAIN_MILLIWATTS))
return false;
policy = cpufreq_cdev->policy;
diff --git a/drivers/thermal/devfreq_cooling.c b/drivers/thermal/devfreq_cooling.c
index 4310cb342a9f..7e8bd1368cab 100644
--- a/drivers/thermal/devfreq_cooling.c
+++ b/drivers/thermal/devfreq_cooling.c
@@ -336,6 +336,14 @@ static int devfreq_cooling_gen_tables(struct devfreq_cooling_device *dfc,
return 0;
}
+static inline bool em_is_sane(struct em_perf_domain *em)
+{
+ if (!em || !(em->flags & EM_PERF_DOMAIN_MILLIWATTS))
+ return false;
+ else
+ return true;
+}
+
/**
* of_devfreq_cooling_register_power() - Register devfreq cooling device,
* with OF and power information.
@@ -358,6 +366,7 @@ of_devfreq_cooling_register_power(struct device_node *np, struct devfreq *df,
struct thermal_cooling_device *cdev;
struct device *dev = df->dev.parent;
struct devfreq_cooling_device *dfc;
+ struct em_perf_domain *em;
char *name;
int err, num_opps;
@@ -367,8 +376,9 @@ of_devfreq_cooling_register_power(struct device_node *np, struct devfreq *df,
dfc->devfreq = df;
- dfc->em_pd = em_pd_get(dev);
- if (dfc->em_pd) {
+ em = em_pd_get(dev);
+ if (em_is_sane(em)) {
+ dfc->em_pd = em;
devfreq_cooling_ops.get_requested_power =
devfreq_cooling_get_requested_power;
devfreq_cooling_ops.state2power = devfreq_cooling_state2power;
@@ -379,7 +389,7 @@ of_devfreq_cooling_register_power(struct device_node *np, struct devfreq *df,
num_opps = em_pd_nr_perf_states(dfc->em_pd);
} else {
/* Backward compatibility for drivers which do not use IPA */
- dev_dbg(dev, "missing EM for cooling device\n");
+ dev_dbg(dev, "missing proper EM for cooling device\n");
num_opps = dev_pm_opp_get_opp_count(dev);
--
2.17.1
next prev parent reply other threads:[~2022-02-07 7:43 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-02-07 7:30 [PATCH 0/2] Ignore Energy Model with abstract scale in IPA and DTPM Lukasz Luba
2022-02-07 7:30 ` Lukasz Luba [this message]
2022-02-08 0:50 ` [PATCH 1/2] thermal: cooling: Check Energy Model type in cpufreq_cooling and devfreq_cooling Matthias Kaehlcke
2022-02-08 9:32 ` Lukasz Luba
2022-02-08 17:25 ` Matthias Kaehlcke
2022-02-09 11:16 ` Lukasz Luba
2022-02-09 22:17 ` Matthias Kaehlcke
2022-02-16 15:35 ` Lukasz Luba
2022-02-16 17:33 ` Doug Anderson
2022-02-16 22:13 ` Matthias Kaehlcke
2022-02-16 22:43 ` Lukasz Luba
2022-02-17 0:26 ` Matthias Kaehlcke
2022-02-17 10:15 ` Daniel Lezcano
2022-02-17 9:59 ` Daniel Lezcano
2022-02-17 10:10 ` Daniel Lezcano
2022-02-17 10:47 ` Lukasz Luba
2022-02-17 11:28 ` Daniel Lezcano
2022-02-17 12:11 ` Lukasz Luba
2022-02-17 12:33 ` Daniel Lezcano
2022-02-17 12:37 ` Lukasz Luba
2022-02-17 16:46 ` Matthias Kaehlcke
2022-02-17 16:37 ` Doug Anderson
2022-02-17 17:14 ` Matthias Kaehlcke
2022-02-17 18:05 ` Lukasz Luba
2022-02-17 18:27 ` Daniel Lezcano
2022-02-16 17:21 ` Doug Anderson
2022-02-16 23:28 ` Lukasz Luba
2022-02-17 16:50 ` Doug Anderson
2022-02-17 17:58 ` Lukasz Luba
2022-02-17 18:18 ` Lukasz Luba
2022-02-22 17:05 ` Lukasz Luba
2022-02-22 18:12 ` Daniel Lezcano
2022-02-22 18:31 ` Lukasz Luba
2022-02-22 22:10 ` Daniel Lezcano
2022-02-23 9:10 ` Lukasz Luba
2022-02-07 7:30 ` [PATCH 2/2] powercap: DTPM: Check Energy Model type for power values scale Lukasz Luba
2022-02-07 10:41 ` [PATCH 0/2] Ignore Energy Model with abstract scale in IPA and DTPM Daniel Lezcano
2022-02-07 11:44 ` Lukasz Luba
2022-02-08 7:39 ` Daniel Lezcano
2022-02-08 9:47 ` 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=20220207073036.14901-2-lukasz.luba@arm.com \
--to=lukasz.luba@arm.com \
--cc=Pierre.Gondois@arm.com \
--cc=amit.kachhap@gmail.com \
--cc=amitk@kernel.org \
--cc=daniel.lezcano@linaro.org \
--cc=dietmar.eggemann@arm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=rafael@kernel.org \
--cc=rui.zhang@intel.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
all inboxes | Powered by JetHome®