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;
47 static void lima_devfreq_reset(struct lima_devfreq *devfreq)
49 devfreq->busy_time = 0;
50 devfreq->idle_time = 0;
51 devfreq->time_last_update = ktime_get();
58 struct lima_devfreq *devfreq = &ldev->devfreq;
63 spin_lock_irqsave(&devfreq->lock, irqflags);
65 lima_devfreq_update_utilization(devfreq);
67 status->total_time = ktime_to_ns(ktime_add(devfreq->busy_time,
68 devfreq->idle_time));
69 status->busy_time = ktime_to_ns(devfreq->busy_time);
71 lima_devfreq_reset(devfreq);
73 spin_unlock_irqrestore(&devfreq->lock, irqflags);
92 struct lima_devfreq *devfreq = &ldev->devfreq;
94 if (devfreq->cooling) {
95 devfreq_cooling_unregister(devfreq->cooling);
96 devfreq->cooling = NULL;
99 if (devfreq->devfreq) {
100 devm_devfreq_remove_device(ldev->dev, devfreq->devfreq);
101 devfreq->devfreq = NULL;
109 struct devfreq *devfreq;
110 struct lima_devfreq *ldevfreq = &ldev->devfreq;
117 /* Optional, continue without devfreq */
159 devfreq = devm_devfreq_add_device(dev, &lima_devfreq_profile,
162 if (IS_ERR(devfreq)) {
163 dev_err(dev, "Couldn't initialize GPU devfreq\n");
164 return PTR_ERR(devfreq);
167 ldevfreq->devfreq = devfreq;
169 cooling = of_devfreq_cooling_register(dev->of_node, devfreq);
178 void lima_devfreq_record_busy(struct lima_devfreq *devfreq)
182 if (!devfreq->devfreq)
185 spin_lock_irqsave(&devfreq->lock, irqflags);
187 lima_devfreq_update_utilization(devfreq);
189 devfreq->busy_count++;
191 spin_unlock_irqrestore(&devfreq->lock, irqflags);
194 void lima_devfreq_record_idle(struct lima_devfreq *devfreq)
198 if (!devfreq->devfreq)
201 spin_lock_irqsave(&devfreq->lock, irqflags);
203 lima_devfreq_update_utilization(devfreq);
205 WARN_ON(--devfreq->busy_count < 0);
207 spin_unlock_irqrestore(&devfreq->lock, irqflags);
210 int lima_devfreq_resume(struct lima_devfreq *devfreq)
214 if (!devfreq->devfreq)
217 spin_lock_irqsave(&devfreq->lock, irqflags);
219 lima_devfreq_reset(devfreq);
221 spin_unlock_irqrestore(&devfreq->lock, irqflags);
223 return devfreq_resume_device(devfreq->devfreq);
226 int lima_devfreq_suspend(struct lima_devfreq *devfreq)
228 if (!devfreq->devfreq)
231 return devfreq_suspend_device(devfreq->devfreq);