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 <[email protected]>
---
 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

_______________________________________________
amd-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to