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