Lines Matching refs:pdevfreq

47 static void panthor_devfreq_update_utilization(struct panthor_devfreq *pdevfreq)  in panthor_devfreq_update_utilization()  argument
52 last = pdevfreq->time_last_update; in panthor_devfreq_update_utilization()
54 if (pdevfreq->last_busy_state) in panthor_devfreq_update_utilization()
55 pdevfreq->busy_time += ktime_sub(now, last); in panthor_devfreq_update_utilization()
57 pdevfreq->idle_time += ktime_sub(now, last); in panthor_devfreq_update_utilization()
59 pdevfreq->time_last_update = now; in panthor_devfreq_update_utilization()
81 static void panthor_devfreq_reset(struct panthor_devfreq *pdevfreq) in panthor_devfreq_reset() argument
83 pdevfreq->busy_time = 0; in panthor_devfreq_reset()
84 pdevfreq->idle_time = 0; in panthor_devfreq_reset()
85 pdevfreq->time_last_update = ktime_get(); in panthor_devfreq_reset()
92 struct panthor_devfreq *pdevfreq = ptdev->devfreq; in panthor_devfreq_get_dev_status() local
97 spin_lock_irqsave(&pdevfreq->lock, irqflags); in panthor_devfreq_get_dev_status()
99 panthor_devfreq_update_utilization(pdevfreq); in panthor_devfreq_get_dev_status()
101 status->total_time = ktime_to_ns(ktime_add(pdevfreq->busy_time, in panthor_devfreq_get_dev_status()
102 pdevfreq->idle_time)); in panthor_devfreq_get_dev_status()
104 status->busy_time = ktime_to_ns(pdevfreq->busy_time); in panthor_devfreq_get_dev_status()
106 panthor_devfreq_reset(pdevfreq); in panthor_devfreq_get_dev_status()
108 spin_unlock_irqrestore(&pdevfreq->lock, irqflags); in panthor_devfreq_get_dev_status()
136 struct panthor_devfreq *pdevfreq; in panthor_devfreq_init() local
142 pdevfreq = drmm_kzalloc(&ptdev->base, sizeof(*ptdev->devfreq), GFP_KERNEL); in panthor_devfreq_init()
143 if (!pdevfreq) in panthor_devfreq_init()
146 ptdev->devfreq = pdevfreq; in panthor_devfreq_init()
160 spin_lock_init(&pdevfreq->lock); in panthor_devfreq_init()
162 panthor_devfreq_reset(pdevfreq); in panthor_devfreq_init()
226 pdevfreq->gov_data.upthreshold = 45; in panthor_devfreq_init()
227 pdevfreq->gov_data.downdifferential = 5; in panthor_devfreq_init()
229 pdevfreq->devfreq = devm_devfreq_add_device(dev, &panthor_devfreq_profile, in panthor_devfreq_init()
231 &pdevfreq->gov_data); in panthor_devfreq_init()
232 if (IS_ERR(pdevfreq->devfreq)) { in panthor_devfreq_init()
234 ret = PTR_ERR(pdevfreq->devfreq); in panthor_devfreq_init()
235 pdevfreq->devfreq = NULL; in panthor_devfreq_init()
239 cooling = devfreq_cooling_em_register(pdevfreq->devfreq, NULL); in panthor_devfreq_init()
248 struct panthor_devfreq *pdevfreq = ptdev->devfreq; in panthor_devfreq_resume() local
250 if (!pdevfreq->devfreq) in panthor_devfreq_resume()
253 panthor_devfreq_reset(pdevfreq); in panthor_devfreq_resume()
255 drm_WARN_ON(&ptdev->base, devfreq_resume_device(pdevfreq->devfreq)); in panthor_devfreq_resume()
260 struct panthor_devfreq *pdevfreq = ptdev->devfreq; in panthor_devfreq_suspend() local
262 if (!pdevfreq->devfreq) in panthor_devfreq_suspend()
265 drm_WARN_ON(&ptdev->base, devfreq_suspend_device(pdevfreq->devfreq)); in panthor_devfreq_suspend()
270 struct panthor_devfreq *pdevfreq = ptdev->devfreq; in panthor_devfreq_record_busy() local
273 if (!pdevfreq->devfreq) in panthor_devfreq_record_busy()
276 spin_lock_irqsave(&pdevfreq->lock, irqflags); in panthor_devfreq_record_busy()
278 panthor_devfreq_update_utilization(pdevfreq); in panthor_devfreq_record_busy()
279 pdevfreq->last_busy_state = true; in panthor_devfreq_record_busy()
281 spin_unlock_irqrestore(&pdevfreq->lock, irqflags); in panthor_devfreq_record_busy()
286 struct panthor_devfreq *pdevfreq = ptdev->devfreq; in panthor_devfreq_record_idle() local
289 if (!pdevfreq->devfreq) in panthor_devfreq_record_idle()
292 spin_lock_irqsave(&pdevfreq->lock, irqflags); in panthor_devfreq_record_idle()
294 panthor_devfreq_update_utilization(pdevfreq); in panthor_devfreq_record_idle()
295 pdevfreq->last_busy_state = false; in panthor_devfreq_record_idle()
297 spin_unlock_irqrestore(&pdevfreq->lock, irqflags); in panthor_devfreq_record_idle()