Lines Matching +full:powervr +full:- +full:gpu
1 // SPDX-License-Identifier: GPL-2.0-only OR MIT
27 * pvr_device_lost() - Mark GPU device as lost
28 * @pvr_dev: Target PowerVR device.
35 if (!pvr_dev->lost) { in pvr_device_lost()
36 pvr_dev->lost = true; in pvr_device_lost()
44 struct pvr_fw_device *fw_dev = &pvr_dev->fw_dev; in pvr_power_send_command()
49 WRITE_ONCE(*fw_dev->power_sync, 0); in pvr_power_send_command()
56 return readl_poll_timeout(pvr_dev->fw_dev.power_sync, value, value != 0, 100, in pvr_power_send_command()
92 cancel_delayed_work_sync(&pvr_dev->watchdog.work); in pvr_power_fw_disable()
122 queue_delayed_work(pvr_dev->sched_wq, &pvr_dev->watchdog.work, in pvr_power_fw_enable()
135 enum rogue_fwif_pow_state pow_state = READ_ONCE(pvr_dev->fw_dev.fwif_sysdata->pow_state); in pvr_power_is_idle()
145 u32 kccb_cmds_executed = pvr_dev->fw_dev.fwif_osdata->kccb_cmds_executed; in pvr_watchdog_kccb_stalled()
148 if (pvr_dev->watchdog.old_kccb_cmds_executed == kccb_cmds_executed && !kccb_is_idle) { in pvr_watchdog_kccb_stalled()
149 pvr_dev->watchdog.kccb_stall_count++; in pvr_watchdog_kccb_stalled()
155 if (pvr_dev->watchdog.kccb_stall_count == 2) { in pvr_watchdog_kccb_stalled()
156 pvr_dev->watchdog.kccb_stall_count = 0; in pvr_watchdog_kccb_stalled()
159 } else if (pvr_dev->watchdog.old_kccb_cmds_executed == kccb_cmds_executed) { in pvr_watchdog_kccb_stalled()
162 mutex_lock(&pvr_dev->queues.lock); in pvr_watchdog_kccb_stalled()
163 has_active_contexts = list_empty(&pvr_dev->queues.active); in pvr_watchdog_kccb_stalled()
164 mutex_unlock(&pvr_dev->queues.lock); in pvr_watchdog_kccb_stalled()
175 pvr_dev->watchdog.old_kccb_cmds_executed = kccb_cmds_executed; in pvr_watchdog_kccb_stalled()
176 pvr_dev->watchdog.kccb_stall_count = 0; in pvr_watchdog_kccb_stalled()
189 if (pvr_dev->lost) in pvr_watchdog_worker()
192 if (pm_runtime_get_if_in_use(from_pvr_device(pvr_dev)->dev) <= 0) in pvr_watchdog_worker()
195 if (!pvr_dev->fw_dev.booted) in pvr_watchdog_worker()
208 pm_runtime_put(from_pvr_device(pvr_dev)->dev); in pvr_watchdog_worker()
211 if (!pvr_dev->lost) { in pvr_watchdog_worker()
212 queue_delayed_work(pvr_dev->sched_wq, &pvr_dev->watchdog.work, in pvr_watchdog_worker()
218 * pvr_watchdog_init() - Initialise watchdog for device
219 * @pvr_dev: Target PowerVR device.
223 * * -%ENOMEM on out of memory.
228 INIT_DELAYED_WORK(&pvr_dev->watchdog.work, pvr_watchdog_worker); in pvr_watchdog_init()
243 return -EIO; in pvr_power_device_suspend()
245 if (pvr_dev->fw_dev.booted) { in pvr_power_device_suspend()
251 clk_disable_unprepare(pvr_dev->mem_clk); in pvr_power_device_suspend()
252 clk_disable_unprepare(pvr_dev->sys_clk); in pvr_power_device_suspend()
253 clk_disable_unprepare(pvr_dev->core_clk); in pvr_power_device_suspend()
271 return -EIO; in pvr_power_device_resume()
273 err = clk_prepare_enable(pvr_dev->core_clk); in pvr_power_device_resume()
277 err = clk_prepare_enable(pvr_dev->sys_clk); in pvr_power_device_resume()
281 err = clk_prepare_enable(pvr_dev->mem_clk); in pvr_power_device_resume()
285 if (pvr_dev->fw_dev.booted) { in pvr_power_device_resume()
296 clk_disable_unprepare(pvr_dev->mem_clk); in pvr_power_device_resume()
299 clk_disable_unprepare(pvr_dev->sys_clk); in pvr_power_device_resume()
302 clk_disable_unprepare(pvr_dev->core_clk); in pvr_power_device_resume()
317 return pvr_power_is_idle(pvr_dev) ? 0 : -EBUSY; in pvr_power_device_idle()
321 * pvr_power_reset() - Reset the GPU
328 * If a hard reset fails then the GPU device is reported as lost.
346 down_write(&pvr_dev->reset_sem); in pvr_power_reset()
348 if (pvr_dev->lost) { in pvr_power_reset()
349 err = -EIO; in pvr_power_reset()
354 disable_irq(pvr_dev->irq); in pvr_power_reset()
365 pvr_dev->fw_dev.booted = false; in pvr_power_reset()
366 WARN_ON(pm_runtime_force_suspend(from_pvr_device(pvr_dev)->dev)); in pvr_power_reset()
372 err = pm_runtime_force_resume(from_pvr_device(pvr_dev)->dev); in pvr_power_reset()
373 pvr_dev->fw_dev.booted = true; in pvr_power_reset()
378 pvr_dev->fw_dev.fwif_sysdata->hwr_state_flags &= in pvr_power_reset()
400 enable_irq(pvr_dev->irq); in pvr_power_reset()
402 up_write(&pvr_dev->reset_sem); in pvr_power_reset()
409 drm_err(from_pvr_device(pvr_dev), "GPU device lost"); in pvr_power_reset()
418 up_write(&pvr_dev->reset_sem); in pvr_power_reset()
426 * pvr_watchdog_fini() - Shutdown watchdog for device
427 * @pvr_dev: Target PowerVR device.
432 cancel_delayed_work_sync(&pvr_dev->watchdog.work); in pvr_watchdog_fini()