All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 1/4] devfreq: Register devfreq as a cooling device on demand
@ 2021-03-05 17:03 Daniel Lezcano
  2021-03-05 17:03   ` Daniel Lezcano
                   ` (3 more replies)
  0 siblings, 4 replies; 8+ messages in thread
From: Daniel Lezcano @ 2021-03-05 17:03 UTC (permalink / raw)
  To: cwchoi00
  Cc: lukasz.luba, linux-kernel, linux-pm, steven.price, MyungJoo Ham,
	Kyungmin Park, Chanwoo Choi

Currently the default behavior is to manually having the devfreq
backend to register themselves as a devfreq cooling device.

Instead of adding the code in the drivers for the thermal cooling
device registering, let's provide a flag in the devfreq's profile to
tell the common devfreq code to register the newly created devfreq as
a cooling device.

Suggested-by: Chanwoo Choi <cwchoi00@gmail.com>
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
---
 drivers/devfreq/devfreq.c | 11 +++++++++++
 include/linux/devfreq.h   |  7 +++++++
 2 files changed, 18 insertions(+)

diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c
index b6d63f02d293..5c0fdd3a48d2 100644
--- a/drivers/devfreq/devfreq.c
+++ b/drivers/devfreq/devfreq.c
@@ -11,6 +11,7 @@
 #include <linux/kmod.h>
 #include <linux/sched.h>
 #include <linux/debugfs.h>
+#include <linux/devfreq_cooling.h>
 #include <linux/errno.h>
 #include <linux/err.h>
 #include <linux/init.h>
@@ -26,6 +27,7 @@
 #include <linux/hrtimer.h>
 #include <linux/of.h>
 #include <linux/pm_qos.h>
+#include <linux/thermal.h>
 #include <linux/units.h>
 #include "governor.h"
 
@@ -935,6 +937,13 @@ struct devfreq *devfreq_add_device(struct device *dev,
 
 	mutex_unlock(&devfreq_list_lock);
 
+	if (devfreq->profile->is_cooling_device) {
+		devfreq->cdev = devfreq_cooling_em_register(devfreq, NULL);
+		if (IS_ERR(devfreq->cdev))
+			dev_info(dev, "Failed to register devfreq "
+				 "cooling device\n");
+	}
+
 	return devfreq;
 
 err_init:
@@ -960,6 +969,8 @@ int devfreq_remove_device(struct devfreq *devfreq)
 	if (!devfreq)
 		return -EINVAL;
 
+	thermal_cooling_device_unregister(devfreq->cdev);
+
 	if (devfreq->governor) {
 		devfreq->governor->event_handler(devfreq,
 						 DEVFREQ_GOV_STOP, NULL);
diff --git a/include/linux/devfreq.h b/include/linux/devfreq.h
index 26ea0850be9b..554e7904b0c5 100644
--- a/include/linux/devfreq.h
+++ b/include/linux/devfreq.h
@@ -98,11 +98,15 @@ struct devfreq_dev_status {
  * @freq_table:		Optional list of frequencies to support statistics
  *			and freq_table must be generated in ascending order.
  * @max_state:		The size of freq_table.
+ *
+ * @is_cooling_device: A self-explanatory boolean giving the device a
+ *                     cooling effect property.
  */
 struct devfreq_dev_profile {
 	unsigned long initial_freq;
 	unsigned int polling_ms;
 	enum devfreq_timer timer;
+	bool is_cooling_device;
 
 	int (*target)(struct device *dev, unsigned long *freq, u32 flags);
 	int (*get_dev_status)(struct device *dev,
@@ -198,6 +202,9 @@ struct devfreq {
 
 	struct srcu_notifier_head transition_notifier_list;
 
+	/* Pointer to the cooling device if used for thermal mitigation */
+	struct thermal_cooling_device *cdev;
+
 	struct notifier_block nb_min;
 	struct notifier_block nb_max;
 };
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2021-03-06  0:41 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-03-05 17:03 [PATCH v2 1/4] devfreq: Register devfreq as a cooling device on demand Daniel Lezcano
2021-03-05 17:03 ` [PATCH v2 2/4] devfreq/drivers/lima: Use devfreq cooling device registration Daniel Lezcano
2021-03-05 17:03   ` Daniel Lezcano
2021-03-05 17:03 ` [PATCH v2 3/4] devfreq/drivers/msm: " Daniel Lezcano
2021-03-05 17:03   ` Daniel Lezcano
2021-03-05 17:03 ` [PATCH v2 4/4] devfreq/drivers/panfrost: " Daniel Lezcano
2021-03-05 17:03   ` Daniel Lezcano
2021-03-06  0:39 ` [PATCH v2 1/4] devfreq: Register devfreq as a cooling device on demand Chanwoo Choi

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.