diff options
Diffstat (limited to 'common/recipes-kernel/linux/files/0509-drm-amdgpu-stop-trying-to-suspend-UVD-sessions-v2.patch')
-rw-r--r-- | common/recipes-kernel/linux/files/0509-drm-amdgpu-stop-trying-to-suspend-UVD-sessions-v2.patch | 105 |
1 files changed, 0 insertions, 105 deletions
diff --git a/common/recipes-kernel/linux/files/0509-drm-amdgpu-stop-trying-to-suspend-UVD-sessions-v2.patch b/common/recipes-kernel/linux/files/0509-drm-amdgpu-stop-trying-to-suspend-UVD-sessions-v2.patch deleted file mode 100644 index 8b0179fa..00000000 --- a/common/recipes-kernel/linux/files/0509-drm-amdgpu-stop-trying-to-suspend-UVD-sessions-v2.patch +++ /dev/null @@ -1,105 +0,0 @@ -From 8f8202f771c182a7244caa5880f50def1bedd713 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com> -Date: Thu, 7 May 2015 15:19:25 +0200 -Subject: [PATCH 0509/1050] drm/amdgpu: stop trying to suspend UVD sessions v2 -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Saving the current UVD state on suspend and restoring it on resume -just doesn't work reliable. Just close cleanup all sessions on suspend. - -Ported from radeon commit "12e49feadff6d7b7ebbe852b36943a71524d8d34". - -v2: rebased - -Signed-off-by: Christian König <christian.koenig@amd.com> -Reviewed-by: Alex Deucher <alexander.deucher@amd.com> (v1) ---- - drivers/gpu/drm/amd/amdgpu/amdgpu.h | 1 - - drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c | 42 +++++++++++++++------------------ - 2 files changed, 19 insertions(+), 24 deletions(-) - -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h -index 7195068..9fefcd9 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h -@@ -1666,7 +1666,6 @@ struct amdgpu_uvd { - struct amdgpu_bo *vcpu_bo; - void *cpu_addr; - uint64_t gpu_addr; -- void *saved_bo; - atomic_t handles[AMDGPU_MAX_UVD_HANDLES]; - struct drm_file *filp[AMDGPU_MAX_UVD_HANDLES]; - struct delayed_work idle_work; -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c -index b87355c..3ad4a83 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c -@@ -221,31 +221,32 @@ int amdgpu_uvd_sw_fini(struct amdgpu_device *adev) - - int amdgpu_uvd_suspend(struct amdgpu_device *adev) - { -- unsigned size; -- void *ptr; -- const struct common_firmware_header *hdr; -- int i; -+ struct amdgpu_ring *ring = &adev->uvd.ring; -+ int i, r; - - if (adev->uvd.vcpu_bo == NULL) - return 0; - -- for (i = 0; i < AMDGPU_MAX_UVD_HANDLES; ++i) -- if (atomic_read(&adev->uvd.handles[i])) -- break; -- -- if (i == AMDGPU_MAX_UVD_HANDLES) -- return 0; -+ for (i = 0; i < AMDGPU_MAX_UVD_HANDLES; ++i) { -+ uint32_t handle = atomic_read(&adev->uvd.handles[i]); -+ if (handle != 0) { -+ struct fence *fence; - -- hdr = (const struct common_firmware_header *)adev->uvd.fw->data; -+ amdgpu_uvd_note_usage(adev); - -- size = amdgpu_bo_size(adev->uvd.vcpu_bo); -- size -= le32_to_cpu(hdr->ucode_size_bytes); -+ r = amdgpu_uvd_get_destroy_msg(ring, handle, &fence); -+ if (r) { -+ DRM_ERROR("Error destroying UVD (%d)!\n", r); -+ continue; -+ } - -- ptr = adev->uvd.cpu_addr; -- ptr += le32_to_cpu(hdr->ucode_size_bytes); -+ fence_wait(fence, false); -+ fence_put(fence); - -- adev->uvd.saved_bo = kmalloc(size, GFP_KERNEL); -- memcpy(adev->uvd.saved_bo, ptr, size); -+ adev->uvd.filp[i] = NULL; -+ atomic_set(&adev->uvd.handles[i], 0); -+ } -+ } - - return 0; - } -@@ -270,12 +271,7 @@ int amdgpu_uvd_resume(struct amdgpu_device *adev) - ptr = adev->uvd.cpu_addr; - ptr += le32_to_cpu(hdr->ucode_size_bytes); - -- if (adev->uvd.saved_bo != NULL) { -- memcpy(ptr, adev->uvd.saved_bo, size); -- kfree(adev->uvd.saved_bo); -- adev->uvd.saved_bo = NULL; -- } else -- memset(ptr, 0, size); -+ memset(ptr, 0, size); - - return 0; - } --- -1.9.1 - |