Lines Matching +full:cooling +full:- +full:device

1 // SPDX-License-Identifier: GPL-2.0
11 #include <linux/device.h>
24 last = devfreq->time_last_update; in lima_devfreq_update_utilization()
26 if (devfreq->busy_count > 0) in lima_devfreq_update_utilization()
27 devfreq->busy_time += ktime_sub(now, last); in lima_devfreq_update_utilization()
29 devfreq->idle_time += ktime_sub(now, last); in lima_devfreq_update_utilization()
31 devfreq->time_last_update = now; in lima_devfreq_update_utilization()
34 static int lima_devfreq_target(struct device *dev, unsigned long *freq, in lima_devfreq_target()
54 devfreq->busy_time = 0; in lima_devfreq_reset()
55 devfreq->idle_time = 0; in lima_devfreq_reset()
56 devfreq->time_last_update = ktime_get(); in lima_devfreq_reset()
59 static int lima_devfreq_get_dev_status(struct device *dev, in lima_devfreq_get_dev_status()
63 struct lima_devfreq *devfreq = &ldev->devfreq; in lima_devfreq_get_dev_status()
66 status->current_frequency = clk_get_rate(ldev->clk_gpu); in lima_devfreq_get_dev_status()
68 spin_lock_irqsave(&devfreq->lock, irqflags); in lima_devfreq_get_dev_status()
72 status->total_time = ktime_to_ns(ktime_add(devfreq->busy_time, in lima_devfreq_get_dev_status()
73 devfreq->idle_time)); in lima_devfreq_get_dev_status()
74 status->busy_time = ktime_to_ns(devfreq->busy_time); in lima_devfreq_get_dev_status()
78 spin_unlock_irqrestore(&devfreq->lock, irqflags); in lima_devfreq_get_dev_status()
80 dev_dbg(ldev->dev, "busy %lu total %lu %lu %% freq %lu MHz\n", in lima_devfreq_get_dev_status()
81 status->busy_time, status->total_time, in lima_devfreq_get_dev_status()
82 status->busy_time / (status->total_time / 100), in lima_devfreq_get_dev_status()
83 status->current_frequency / 1000 / 1000); in lima_devfreq_get_dev_status()
96 struct lima_devfreq *devfreq = &ldev->devfreq; in lima_devfreq_fini()
98 if (devfreq->cooling) { in lima_devfreq_fini()
99 devfreq_cooling_unregister(devfreq->cooling); in lima_devfreq_fini()
100 devfreq->cooling = NULL; in lima_devfreq_fini()
103 if (devfreq->devfreq) { in lima_devfreq_fini()
104 devm_devfreq_remove_device(ldev->dev, devfreq->devfreq); in lima_devfreq_fini()
105 devfreq->devfreq = NULL; in lima_devfreq_fini()
108 if (devfreq->opp_of_table_added) { in lima_devfreq_fini()
109 dev_pm_opp_of_remove_table(ldev->dev); in lima_devfreq_fini()
110 devfreq->opp_of_table_added = false; in lima_devfreq_fini()
113 if (devfreq->regulators_opp_table) { in lima_devfreq_fini()
114 dev_pm_opp_put_regulators(devfreq->regulators_opp_table); in lima_devfreq_fini()
115 devfreq->regulators_opp_table = NULL; in lima_devfreq_fini()
118 if (devfreq->clkname_opp_table) { in lima_devfreq_fini()
119 dev_pm_opp_put_clkname(devfreq->clkname_opp_table); in lima_devfreq_fini()
120 devfreq->clkname_opp_table = NULL; in lima_devfreq_fini()
126 struct thermal_cooling_device *cooling; in lima_devfreq_init() local
127 struct device *dev = ldev->dev; in lima_devfreq_init()
130 struct lima_devfreq *ldevfreq = &ldev->devfreq; in lima_devfreq_init()
135 if (!device_property_present(dev, "operating-points-v2")) in lima_devfreq_init()
139 spin_lock_init(&ldevfreq->lock); in lima_devfreq_init()
147 ldevfreq->clkname_opp_table = opp_table; in lima_devfreq_init()
156 if (ret != -ENODEV) in lima_devfreq_init()
159 ldevfreq->regulators_opp_table = opp_table; in lima_devfreq_init()
165 ldevfreq->opp_of_table_added = true; in lima_devfreq_init()
169 cur_freq = clk_get_rate(ldev->clk_gpu); in lima_devfreq_init()
188 ldevfreq->devfreq = devfreq; in lima_devfreq_init()
190 cooling = of_devfreq_cooling_register(dev->of_node, devfreq); in lima_devfreq_init()
191 if (IS_ERR(cooling)) in lima_devfreq_init()
192 dev_info(dev, "Failed to register cooling device\n"); in lima_devfreq_init()
194 ldevfreq->cooling = cooling; in lima_devfreq_init()
207 if (!devfreq->devfreq) in lima_devfreq_record_busy()
210 spin_lock_irqsave(&devfreq->lock, irqflags); in lima_devfreq_record_busy()
214 devfreq->busy_count++; in lima_devfreq_record_busy()
216 spin_unlock_irqrestore(&devfreq->lock, irqflags); in lima_devfreq_record_busy()
223 if (!devfreq->devfreq) in lima_devfreq_record_idle()
226 spin_lock_irqsave(&devfreq->lock, irqflags); in lima_devfreq_record_idle()
230 WARN_ON(--devfreq->busy_count < 0); in lima_devfreq_record_idle()
232 spin_unlock_irqrestore(&devfreq->lock, irqflags); in lima_devfreq_record_idle()
239 if (!devfreq->devfreq) in lima_devfreq_resume()
242 spin_lock_irqsave(&devfreq->lock, irqflags); in lima_devfreq_resume()
246 spin_unlock_irqrestore(&devfreq->lock, irqflags); in lima_devfreq_resume()
248 return devfreq_resume_device(devfreq->devfreq); in lima_devfreq_resume()
253 if (!devfreq->devfreq) in lima_devfreq_suspend()
256 return devfreq_suspend_device(devfreq->devfreq); in lima_devfreq_suspend()