summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/uvd_v3_1.c
diff options
context:
space:
mode:
authorSonny Jiang <sonny.jiang@amd.com>2020-11-20 02:38:09 -0500
committerAlex Deucher <alexander.deucher@amd.com>2020-11-24 12:03:37 -0500
commit7203a2fd98c85d366e88e7cbacf5e639060452d9 (patch)
tree79b9f4163e9ebc7df9f3e4b3525a93464a6b63ec /drivers/gpu/drm/amd/amdgpu/uvd_v3_1.c
parentfce8a4ac46b0726bc25098855214a67b22b624d0 (diff)
downloadlinux-stable-7203a2fd98c85d366e88e7cbacf5e639060452d9.tar.gz
linux-stable-7203a2fd98c85d366e88e7cbacf5e639060452d9.tar.bz2
linux-stable-7203a2fd98c85d366e88e7cbacf5e639060452d9.zip
drm/amdgpu: fix a page fault
The UVD firmware is copied to cpu addr in uvd_resume, so it should be used after that. This is to fix a bug introduced by patch drm/amdgpu: fix SI UVD firmware validate resume fail. Signed-off-by: Sonny Jiang <sonny.jiang@amd.com> Reviewed-by: Leo Liu <leo.liu@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/uvd_v3_1.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/uvd_v3_1.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v3_1.c b/drivers/gpu/drm/amd/amdgpu/uvd_v3_1.c
index 3a5dce634cda..41800fcad410 100644
--- a/drivers/gpu/drm/amd/amdgpu/uvd_v3_1.c
+++ b/drivers/gpu/drm/amd/amdgpu/uvd_v3_1.c
@@ -555,13 +555,6 @@ static int uvd_v3_1_sw_init(void *handle)
if (r)
return r;
- /* Retrieval firmware validate key */
- ptr = adev->uvd.inst[0].cpu_addr;
- ptr += 192 + 16;
- memcpy(&ucode_len, ptr, 4);
- ptr += ucode_len;
- memcpy(&adev->uvd.keyselect, ptr, 4);
-
ring = &adev->uvd.inst->ring;
sprintf(ring->name, "uvd");
r = amdgpu_ring_init(adev, ring, 512, &adev->uvd.inst->irq, 0,
@@ -573,6 +566,13 @@ static int uvd_v3_1_sw_init(void *handle)
if (r)
return r;
+ /* Retrieval firmware validate key */
+ ptr = adev->uvd.inst[0].cpu_addr;
+ ptr += 192 + 16;
+ memcpy(&ucode_len, ptr, 4);
+ ptr += ucode_len;
+ memcpy(&adev->uvd.keyselect, ptr, 4);
+
r = amdgpu_uvd_entity_init(adev);
return r;