mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-04 20:19:47 +08:00
![]() The GPU hard reset sequence calls pm_runtime_force_suspend() and
pm_runtime_force_resume(), which according to their documentation should
only be used during system-wide PM transitions to sleep states.
The main issue though is that depending on some internal runtime PM
state as seen by pm_runtime_force_suspend() (whether the usage count is
<= 1), pm_runtime_force_resume() might not resume the device unless
needed. If that happens, the runtime PM resume callback
pvr_power_device_resume() is not called, the GPU clocks are not
re-enabled, and the kernel crashes on the next attempt to access GPU
registers as part of the power-on sequence.
Replace calls to pm_runtime_force_suspend() and
pm_runtime_force_resume() with direct calls to the driver's runtime PM
callbacks, pvr_power_device_suspend() and pvr_power_device_resume(),
to ensure clocks are re-enabled and avoid the kernel crash.
Fixes:
|
||
---|---|---|
.. | ||
Kconfig | ||
Makefile | ||
pvr_ccb.c | ||
pvr_ccb.h | ||
pvr_cccb.c | ||
pvr_cccb.h | ||
pvr_context.c | ||
pvr_context.h | ||
pvr_debugfs.c | ||
pvr_debugfs.h | ||
pvr_device_info.c | ||
pvr_device_info.h | ||
pvr_device.c | ||
pvr_device.h | ||
pvr_drv.c | ||
pvr_drv.h | ||
pvr_free_list.c | ||
pvr_free_list.h | ||
pvr_fw_info.h | ||
pvr_fw_meta.c | ||
pvr_fw_meta.h | ||
pvr_fw_mips.c | ||
pvr_fw_mips.h | ||
pvr_fw_riscv.c | ||
pvr_fw_startstop.c | ||
pvr_fw_startstop.h | ||
pvr_fw_trace.c | ||
pvr_fw_trace.h | ||
pvr_fw_util.c | ||
pvr_fw.c | ||
pvr_fw.h | ||
pvr_gem.c | ||
pvr_gem.h | ||
pvr_hwrt.c | ||
pvr_hwrt.h | ||
pvr_job.c | ||
pvr_job.h | ||
pvr_mmu.c | ||
pvr_mmu.h | ||
pvr_params.c | ||
pvr_params.h | ||
pvr_power.c | ||
pvr_power.h | ||
pvr_queue.c | ||
pvr_queue.h | ||
pvr_rogue_cr_defs_client.h | ||
pvr_rogue_cr_defs.h | ||
pvr_rogue_defs.h | ||
pvr_rogue_fwif_check.h | ||
pvr_rogue_fwif_client_check.h | ||
pvr_rogue_fwif_client.h | ||
pvr_rogue_fwif_common.h | ||
pvr_rogue_fwif_dev_info.h | ||
pvr_rogue_fwif_resetframework.h | ||
pvr_rogue_fwif_sf.h | ||
pvr_rogue_fwif_shared_check.h | ||
pvr_rogue_fwif_shared.h | ||
pvr_rogue_fwif_stream.h | ||
pvr_rogue_fwif.h | ||
pvr_rogue_heap_config.h | ||
pvr_rogue_meta.h | ||
pvr_rogue_mips_check.h | ||
pvr_rogue_mips.h | ||
pvr_rogue_mmu_defs.h | ||
pvr_rogue_riscv.h | ||
pvr_stream_defs.c | ||
pvr_stream_defs.h | ||
pvr_stream.c | ||
pvr_stream.h | ||
pvr_sync.c | ||
pvr_sync.h | ||
pvr_vm_mips.c | ||
pvr_vm_mips.h | ||
pvr_vm.c | ||
pvr_vm.h |