Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/radeon: split out radeon_uvd_resume from uvd_v4_2_resume

For powergating, we just need to re-init the registers, there
is no need to restore the uvd BOs. This just adds needless
work when powergating uvd for playback while the system is
on. We only need to restore the uvd BOs on an actual resume
from suspend or when the driver loads.

This fixes multi-stream UVD playback on KB systems.

Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>

+8 -10
+8 -5
drivers/gpu/drm/radeon/cik.c
··· 7051 7051 return r; 7052 7052 } 7053 7053 7054 - r = uvd_v4_2_resume(rdev); 7054 + r = radeon_uvd_resume(rdev); 7055 7055 if (!r) { 7056 - r = radeon_fence_driver_start_ring(rdev, 7057 - R600_RING_TYPE_UVD_INDEX); 7058 - if (r) 7059 - dev_err(rdev->dev, "UVD fences init error (%d).\n", r); 7056 + r = uvd_v4_2_resume(rdev); 7057 + if (!r) { 7058 + r = radeon_fence_driver_start_ring(rdev, 7059 + R600_RING_TYPE_UVD_INDEX); 7060 + if (r) 7061 + dev_err(rdev->dev, "UVD fences init error (%d).\n", r); 7062 + } 7060 7063 } 7061 7064 if (r) 7062 7065 rdev->ring[R600_RING_TYPE_UVD_INDEX].ring_size = 0;
-5
drivers/gpu/drm/radeon/uvd_v4_2.c
··· 39 39 { 40 40 uint64_t addr; 41 41 uint32_t size; 42 - int r; 43 - 44 - r = radeon_uvd_resume(rdev); 45 - if (r) 46 - return r; 47 42 48 43 /* programm the VCPU memory controller bits 0-27 */ 49 44 addr = rdev->uvd.gpu_addr >> 3;