[PATCH 2/2] drm/amdgpu: save/restore uvd fence sequence number in suspend/resume
Jim Qu
Jim.Qu at amd.com
Thu Dec 14 11:38:12 UTC 2017
otherwise, uvd block will be never powered up in ring begin_use()
callback. uvd ring test will be fail in resume in rumtime pm.
Change-Id: I71b6c00bad174c90e12628e6037dc04a4ff9d9f2
Signed-off-by: Jim Qu <Jim.Qu at amd.com>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c | 10 ++++++++--
drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.h | 1 +
2 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
index 343b682..a2d0b84 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
@@ -293,6 +293,7 @@ int amdgpu_uvd_suspend(struct amdgpu_device *adev)
unsigned size;
void *ptr;
int i;
+ struct amdgpu_fence_driver *drv = &adev->uvd.ring.fence_drv;
cancel_delayed_work_sync(&adev->uvd.idle_work);
@@ -303,9 +304,11 @@ int amdgpu_uvd_suspend(struct amdgpu_device *adev)
if (atomic_read(&adev->uvd.handles[i]))
break;
- if (i == AMDGPU_MAX_UVD_HANDLES)
+ if (i == AMDGPU_MAX_UVD_HANDLES) {
+ if (drv->cpu_addr)
+ adev->uvd.fence_seq = le32_to_cpu(*drv->cpu_addr);
return 0;
-
+ }
size = amdgpu_bo_size(adev->uvd.vcpu_bo);
ptr = adev->uvd.cpu_addr;
@@ -322,6 +325,7 @@ int amdgpu_uvd_resume(struct amdgpu_device *adev)
{
unsigned size;
void *ptr;
+ struct amdgpu_fence_driver *drv = &adev->uvd.ring.fence_drv;
if (adev->uvd.vcpu_bo == NULL)
return -EINVAL;
@@ -346,6 +350,8 @@ int amdgpu_uvd_resume(struct amdgpu_device *adev)
ptr += le32_to_cpu(hdr->ucode_size_bytes);
}
memset_io(ptr, 0, size);
+ if (drv->cpu_addr)
+ *drv->cpu_addr = le32_to_cpu(adev->uvd.fence_seq);
}
return 0;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.h
index 32ea20b..88f6db9 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.h
@@ -55,6 +55,7 @@ struct amdgpu_uvd {
struct drm_sched_entity entity_enc;
uint32_t srbm_soft_reset;
unsigned num_enc_rings;
+ uint32_t fence_seq;
};
int amdgpu_uvd_sw_init(struct amdgpu_device *adev);
--
1.9.1
More information about the amd-gfx
mailing list