Lines Matching full:pm
116 struct ivpu_pm_info *pm = container_of(work, struct ivpu_pm_info, recovery_work); in ivpu_pm_recovery_work() local
117 struct ivpu_device *vdev = pm->vdev; in ivpu_pm_recovery_work()
121 ivpu_err(vdev, "Recovering the VPU (reset #%d)\n", atomic_read(&vdev->pm->reset_counter)); in ivpu_pm_recovery_work()
129 atomic_inc(&vdev->pm->reset_counter); in ivpu_pm_recovery_work()
130 atomic_set(&vdev->pm->reset_pending, 1); in ivpu_pm_recovery_work()
131 down_write(&vdev->pm->reset_lock); in ivpu_pm_recovery_work()
141 up_write(&vdev->pm->reset_lock); in ivpu_pm_recovery_work()
142 atomic_set(&vdev->pm->reset_pending, 0); in ivpu_pm_recovery_work()
164 if (atomic_cmpxchg(&vdev->pm->reset_pending, 0, 1) == 0) { in ivpu_pm_trigger_recovery()
167 queue_work(system_long_wq, &vdev->pm->recovery_work); in ivpu_pm_trigger_recovery()
173 struct ivpu_pm_info *pm = container_of(work, struct ivpu_pm_info, job_timeout_work.work); in ivpu_job_timeout_work() local
174 struct ivpu_device *vdev = pm->vdev; in ivpu_job_timeout_work()
184 queue_delayed_work(system_wq, &vdev->pm->job_timeout_work, msecs_to_jiffies(timeout_ms)); in ivpu_start_job_timeout_detection()
189 cancel_delayed_work_sync(&vdev->pm->job_timeout_work); in ivpu_stop_job_timeout_detection()
198 ivpu_dbg(vdev, PM, "Suspend..\n"); in ivpu_pm_suspend_cb()
214 ivpu_dbg(vdev, PM, "Suspend done.\n"); in ivpu_pm_suspend_cb()
225 ivpu_dbg(vdev, PM, "Resume..\n"); in ivpu_pm_resume_cb()
231 ivpu_dbg(vdev, PM, "Resume done.\n"); in ivpu_pm_resume_cb()
244 drm_WARN_ON(&vdev->drm, work_pending(&vdev->pm->recovery_work)); in ivpu_pm_runtime_suspend_cb()
246 ivpu_dbg(vdev, PM, "Runtime suspend..\n"); in ivpu_pm_runtime_suspend_cb()
248 if (!ivpu_hw_is_idle(vdev) && vdev->pm->suspend_reschedule_counter) { in ivpu_pm_runtime_suspend_cb()
249 ivpu_dbg(vdev, PM, "Failed to enter idle, rescheduling suspend, retries left %d\n", in ivpu_pm_runtime_suspend_cb()
250 vdev->pm->suspend_reschedule_counter); in ivpu_pm_runtime_suspend_cb()
252 vdev->pm->suspend_reschedule_counter--; in ivpu_pm_runtime_suspend_cb()
256 if (!vdev->pm->suspend_reschedule_counter) in ivpu_pm_runtime_suspend_cb()
273 vdev->pm->suspend_reschedule_counter = PM_RESCHEDULE_LIMIT; in ivpu_pm_runtime_suspend_cb()
275 ivpu_dbg(vdev, PM, "Runtime suspend done.\n"); in ivpu_pm_runtime_suspend_cb()
286 ivpu_dbg(vdev, PM, "Runtime resume..\n"); in ivpu_pm_runtime_resume_cb()
292 ivpu_dbg(vdev, PM, "Runtime resume done.\n"); in ivpu_pm_runtime_resume_cb()
303 vdev->pm->suspend_reschedule_counter = PM_RESCHEDULE_LIMIT; in ivpu_rpm_get()
328 ivpu_dbg(vdev, PM, "Pre-reset..\n"); in ivpu_pm_reset_prepare_cb()
329 atomic_inc(&vdev->pm->reset_counter); in ivpu_pm_reset_prepare_cb()
330 atomic_set(&vdev->pm->reset_pending, 1); in ivpu_pm_reset_prepare_cb()
333 down_write(&vdev->pm->reset_lock); in ivpu_pm_reset_prepare_cb()
338 ivpu_dbg(vdev, PM, "Pre-reset done.\n"); in ivpu_pm_reset_prepare_cb()
346 ivpu_dbg(vdev, PM, "Post-reset..\n"); in ivpu_pm_reset_done_cb()
350 up_write(&vdev->pm->reset_lock); in ivpu_pm_reset_done_cb()
351 atomic_set(&vdev->pm->reset_pending, 0); in ivpu_pm_reset_done_cb()
352 ivpu_dbg(vdev, PM, "Post-reset done.\n"); in ivpu_pm_reset_done_cb()
361 struct ivpu_pm_info *pm = vdev->pm; in ivpu_pm_init() local
364 pm->vdev = vdev; in ivpu_pm_init()
365 pm->suspend_reschedule_counter = PM_RESCHEDULE_LIMIT; in ivpu_pm_init()
367 init_rwsem(&pm->reset_lock); in ivpu_pm_init()
368 atomic_set(&pm->reset_pending, 0); in ivpu_pm_init()
369 atomic_set(&pm->reset_counter, 0); in ivpu_pm_init()
371 INIT_WORK(&pm->recovery_work, ivpu_pm_recovery_work); in ivpu_pm_init()
372 INIT_DELAYED_WORK(&pm->job_timeout_work, ivpu_job_timeout_work); in ivpu_pm_init()
382 ivpu_dbg(vdev, PM, "Autosuspend delay = %d\n", delay); in ivpu_pm_init()
387 drm_WARN_ON(&vdev->drm, delayed_work_pending(&vdev->pm->job_timeout_work)); in ivpu_pm_cancel_recovery()
388 cancel_work_sync(&vdev->pm->recovery_work); in ivpu_pm_cancel_recovery()