Lines Matching defs:devfreq
9 #include <linux/devfreq.h>
19 static void lima_devfreq_update_utilization(struct lima_devfreq *devfreq)
24 last = devfreq->time_last_update;
26 if (devfreq->busy_count > 0)
27 devfreq->busy_time += ktime_sub(now, last);
29 devfreq->idle_time += ktime_sub(now, last);
31 devfreq->time_last_update = now;
52 static void lima_devfreq_reset(struct lima_devfreq *devfreq)
54 devfreq->busy_time = 0;
55 devfreq->idle_time = 0;
56 devfreq->time_last_update = ktime_get();
63 struct lima_devfreq *devfreq = &ldev->devfreq;
68 spin_lock_irqsave(&devfreq->lock, irqflags);
70 lima_devfreq_update_utilization(devfreq);
72 status->total_time = ktime_to_ns(ktime_add(devfreq->busy_time,
73 devfreq->idle_time));
74 status->busy_time = ktime_to_ns(devfreq->busy_time);
76 lima_devfreq_reset(devfreq);
78 spin_unlock_irqrestore(&devfreq->lock, irqflags);
96 struct lima_devfreq *devfreq = &ldev->devfreq;
98 if (devfreq->cooling) {
99 devfreq_cooling_unregister(devfreq->cooling);
100 devfreq->cooling = NULL;
103 if (devfreq->devfreq) {
104 devm_devfreq_remove_device(ldev->dev, devfreq->devfreq);
105 devfreq->devfreq = NULL;
108 if (devfreq->opp_of_table_added) {
110 devfreq->opp_of_table_added = false;
113 if (devfreq->regulators_opp_table) {
114 dev_pm_opp_put_regulators(devfreq->regulators_opp_table);
115 devfreq->regulators_opp_table = NULL;
118 if (devfreq->clkname_opp_table) {
119 dev_pm_opp_put_clkname(devfreq->clkname_opp_table);
120 devfreq->clkname_opp_table = NULL;
129 struct devfreq *devfreq;
130 struct lima_devfreq *ldevfreq = &ldev->devfreq;
136 /* Optional, continue without devfreq */
180 devfreq = devm_devfreq_add_device(dev, &lima_devfreq_profile,
182 if (IS_ERR(devfreq)) {
183 dev_err(dev, "Couldn't initialize GPU devfreq\n");
184 ret = PTR_ERR(devfreq);
188 ldevfreq->devfreq = devfreq;
190 cooling = of_devfreq_cooling_register(dev->of_node, devfreq);
203 void lima_devfreq_record_busy(struct lima_devfreq *devfreq)
207 if (!devfreq->devfreq)
210 spin_lock_irqsave(&devfreq->lock, irqflags);
212 lima_devfreq_update_utilization(devfreq);
214 devfreq->busy_count++;
216 spin_unlock_irqrestore(&devfreq->lock, irqflags);
219 void lima_devfreq_record_idle(struct lima_devfreq *devfreq)
223 if (!devfreq->devfreq)
226 spin_lock_irqsave(&devfreq->lock, irqflags);
228 lima_devfreq_update_utilization(devfreq);
230 WARN_ON(--devfreq->busy_count < 0);
232 spin_unlock_irqrestore(&devfreq->lock, irqflags);
235 int lima_devfreq_resume(struct lima_devfreq *devfreq)
239 if (!devfreq->devfreq)
242 spin_lock_irqsave(&devfreq->lock, irqflags);
244 lima_devfreq_reset(devfreq);
246 spin_unlock_irqrestore(&devfreq->lock, irqflags);
248 return devfreq_resume_device(devfreq->devfreq);
251 int lima_devfreq_suspend(struct lima_devfreq *devfreq)
253 if (!devfreq->devfreq)
256 return devfreq_suspend_device(devfreq->devfreq);