diff options
author | Christian König <christian.koenig@amd.com> | 2013-08-01 11:34:07 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2013-08-07 17:37:11 -0400 |
commit | 2858c00d2823c83acce2a1175dbabb2cebee8678 (patch) | |
tree | 1751bd3ac36c6749a0fded1775def26b19be2dcb /drivers/gpu/drm/radeon/evergreen.c | |
parent | 797f203f622164a322b9a0f962ce431e3f6ca48e (diff) |
drm/radeon: fix halting UVD
Removing the clock/power or resetting the VCPU can cause
hangs if that happens in the middle of a register write.
Stall the memory and register bus before putting the VCPU
into reset. Keep it in reset when unloading the module or
suspending.
Signed-off-by: Christian König <christian.koenig@amd.com>
Cc: stable@vger.kernel.org
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/radeon/evergreen.c')
-rw-r--r-- | drivers/gpu/drm/radeon/evergreen.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c index 038dcac7670c..5b98e573d60a 100644 --- a/drivers/gpu/drm/radeon/evergreen.c +++ b/drivers/gpu/drm/radeon/evergreen.c | |||
@@ -5291,10 +5291,10 @@ int evergreen_resume(struct radeon_device *rdev) | |||
5291 | int evergreen_suspend(struct radeon_device *rdev) | 5291 | int evergreen_suspend(struct radeon_device *rdev) |
5292 | { | 5292 | { |
5293 | r600_audio_fini(rdev); | 5293 | r600_audio_fini(rdev); |
5294 | r600_uvd_stop(rdev); | ||
5294 | radeon_uvd_suspend(rdev); | 5295 | radeon_uvd_suspend(rdev); |
5295 | r700_cp_stop(rdev); | 5296 | r700_cp_stop(rdev); |
5296 | r600_dma_stop(rdev); | 5297 | r600_dma_stop(rdev); |
5297 | r600_uvd_rbc_stop(rdev); | ||
5298 | evergreen_irq_suspend(rdev); | 5298 | evergreen_irq_suspend(rdev); |
5299 | radeon_wb_disable(rdev); | 5299 | radeon_wb_disable(rdev); |
5300 | evergreen_pcie_gart_disable(rdev); | 5300 | evergreen_pcie_gart_disable(rdev); |
@@ -5429,6 +5429,7 @@ void evergreen_fini(struct radeon_device *rdev) | |||
5429 | radeon_ib_pool_fini(rdev); | 5429 | radeon_ib_pool_fini(rdev); |
5430 | radeon_irq_kms_fini(rdev); | 5430 | radeon_irq_kms_fini(rdev); |
5431 | evergreen_pcie_gart_fini(rdev); | 5431 | evergreen_pcie_gart_fini(rdev); |
5432 | r600_uvd_stop(rdev); | ||
5432 | radeon_uvd_fini(rdev); | 5433 | radeon_uvd_fini(rdev); |
5433 | r600_vram_scratch_fini(rdev); | 5434 | r600_vram_scratch_fini(rdev); |
5434 | radeon_gem_fini(rdev); | 5435 | radeon_gem_fini(rdev); |