Lines Matching defs:pdevfreq
48 static void panthor_devfreq_update_utilization(struct panthor_devfreq *pdevfreq)
53 last = pdevfreq->time_last_update;
55 if (pdevfreq->last_busy_state)
56 pdevfreq->busy_time += ktime_sub(now, last);
58 pdevfreq->idle_time += ktime_sub(now, last);
60 pdevfreq->time_last_update = now;
79 static void panthor_devfreq_reset(struct panthor_devfreq *pdevfreq)
81 pdevfreq->busy_time = 0;
82 pdevfreq->idle_time = 0;
83 pdevfreq->time_last_update = ktime_get();
90 struct panthor_devfreq *pdevfreq = ptdev->devfreq;
95 spin_lock_irqsave(&pdevfreq->lock, irqflags);
97 panthor_devfreq_update_utilization(pdevfreq);
99 status->total_time = ktime_to_ns(ktime_add(pdevfreq->busy_time,
100 pdevfreq->idle_time));
102 status->busy_time = ktime_to_ns(pdevfreq->busy_time);
104 panthor_devfreq_reset(pdevfreq);
106 spin_unlock_irqrestore(&pdevfreq->lock, irqflags);
144 struct panthor_devfreq *pdevfreq;
151 pdevfreq = drmm_kzalloc(&ptdev->base, sizeof(*ptdev->devfreq), GFP_KERNEL);
152 if (!pdevfreq)
155 ptdev->devfreq = pdevfreq;
181 spin_lock_init(&pdevfreq->lock);
183 panthor_devfreq_reset(pdevfreq);
246 pdevfreq->gov_data.upthreshold = 45;
247 pdevfreq->gov_data.downdifferential = 5;
249 pdevfreq->devfreq = devm_devfreq_add_device(dev, &panthor_devfreq_profile,
251 &pdevfreq->gov_data);
252 if (IS_ERR(pdevfreq->devfreq)) {
254 ret = PTR_ERR(pdevfreq->devfreq);
255 pdevfreq->devfreq = NULL;
259 cooling = devfreq_cooling_em_register(pdevfreq->devfreq, NULL);
268 struct panthor_devfreq *pdevfreq = ptdev->devfreq;
270 if (!pdevfreq->devfreq)
273 panthor_devfreq_reset(pdevfreq);
275 drm_WARN_ON(&ptdev->base, devfreq_resume_device(pdevfreq->devfreq));
280 struct panthor_devfreq *pdevfreq = ptdev->devfreq;
282 if (!pdevfreq->devfreq)
285 drm_WARN_ON(&ptdev->base, devfreq_suspend_device(pdevfreq->devfreq));
290 struct panthor_devfreq *pdevfreq = ptdev->devfreq;
293 if (!pdevfreq->devfreq)
296 spin_lock_irqsave(&pdevfreq->lock, irqflags);
298 panthor_devfreq_update_utilization(pdevfreq);
299 pdevfreq->last_busy_state = true;
301 spin_unlock_irqrestore(&pdevfreq->lock, irqflags);
306 struct panthor_devfreq *pdevfreq = ptdev->devfreq;
309 if (!pdevfreq->devfreq)
312 spin_lock_irqsave(&pdevfreq->lock, irqflags);
314 panthor_devfreq_update_utilization(pdevfreq);
315 pdevfreq->last_busy_state = false;
317 spin_unlock_irqrestore(&pdevfreq->lock, irqflags);
322 struct panthor_devfreq *pdevfreq = ptdev->devfreq;
326 if (!pdevfreq->devfreq)
329 ret = pdevfreq->devfreq->profile->get_cur_freq(ptdev->base.dev, &freq);