This patch is 
Reviewed-by: Boyuan Zhang <boyuan.zh...@amd.com>

-----Original Message-----
From: amd-gfx <amd-gfx-boun...@lists.freedesktop.org> On Behalf Of Leo Liu
Sent: December 11, 2019 2:48 PM
To: amd-gfx@lists.freedesktop.org
Cc: Liu, Leo <leo....@amd.com>
Subject: [PATCH] drm/amdgpu: add JPEG check to VCN idle handler and begin use

Since it's only needed with VCN1.0 when HW has no its own JPEG HW IP block

Signed-off-by: Leo Liu <leo....@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c | 29 +++++++++++++++----------  
drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h |  2 ++
 2 files changed, 20 insertions(+), 11 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
index 428cfd58b37d..95ac721f2de0 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
@@ -186,6 +186,9 @@ int amdgpu_vcn_sw_init(struct amdgpu_device *adev)
                }
        }
 
+       adev->vcn.has_jpeg_block = (amdgpu_device_ip_get_ip_block(adev, 
AMD_IP_BLOCK_TYPE_JPEG)) ?
+               true : false;
+
        return 0;
 }
 
@@ -306,15 +309,17 @@ static void amdgpu_vcn_idle_work_handler(struct 
work_struct *work)
                        else
                                new_state.fw_based = VCN_DPG_STATE__UNPAUSE;
 
-                       if 
(amdgpu_fence_count_emitted(&adev->jpeg.inst[j].ring_dec))
-                               new_state.jpeg = VCN_DPG_STATE__PAUSE;
-                       else
-                               new_state.jpeg = VCN_DPG_STATE__UNPAUSE;
-
+                       if (!adev->vcn.has_jpeg_block) {
+                               if 
(amdgpu_fence_count_emitted(&adev->jpeg.inst[j].ring_dec))
+                                       new_state.jpeg = VCN_DPG_STATE__PAUSE;
+                               else
+                                       new_state.jpeg = VCN_DPG_STATE__UNPAUSE;
+                       }
                        adev->vcn.pause_dpg_mode(adev, &new_state);
                }
 
-               fence[j] += 
amdgpu_fence_count_emitted(&adev->jpeg.inst[j].ring_dec);
+               if (!adev->vcn.has_jpeg_block)
+                       fence[j] += 
+amdgpu_fence_count_emitted(&adev->jpeg.inst[j].ring_dec);
                fence[j] += 
amdgpu_fence_count_emitted(&adev->vcn.inst[j].ring_dec);
                fences += fence[j];
        }
@@ -358,14 +363,16 @@ void amdgpu_vcn_ring_begin_use(struct amdgpu_ring *ring)
                else
                        new_state.fw_based = VCN_DPG_STATE__UNPAUSE;
 
-               if 
(amdgpu_fence_count_emitted(&adev->jpeg.inst[ring->me].ring_dec))
-                       new_state.jpeg = VCN_DPG_STATE__PAUSE;
-               else
-                       new_state.jpeg = VCN_DPG_STATE__UNPAUSE;
+               if (!adev->vcn.has_jpeg_block) {
+                       if 
(amdgpu_fence_count_emitted(&adev->jpeg.inst[ring->me].ring_dec))
+                               new_state.jpeg = VCN_DPG_STATE__PAUSE;
+                       else
+                               new_state.jpeg = VCN_DPG_STATE__UNPAUSE;
+               }
 
                if (ring->funcs->type == AMDGPU_RING_TYPE_VCN_ENC)
                        new_state.fw_based = VCN_DPG_STATE__PAUSE;
-               else if (ring->funcs->type == AMDGPU_RING_TYPE_VCN_JPEG)
+               else if (!adev->vcn.has_jpeg_block && ring->funcs->type == 
+AMDGPU_RING_TYPE_VCN_JPEG)
                        new_state.jpeg = VCN_DPG_STATE__PAUSE;
 
                adev->vcn.pause_dpg_mode(adev, &new_state); diff --git 
a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h
index 402a5046b985..9a2381d006c6 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h
@@ -192,6 +192,8 @@ struct amdgpu_vcn {
        unsigned        harvest_config;
        int (*pause_dpg_mode)(struct amdgpu_device *adev,
                struct dpg_pause_state *new_state);
+
+       bool has_jpeg_block;
 };
 
 int amdgpu_vcn_sw_init(struct amdgpu_device *adev);
--
2.17.1

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Flists.freedesktop.org%2Fmailman%2Flistinfo%2Famd-gfx&amp;data=02%7C01%7Cboyuan.zhang%40amd.com%7C141d98480bb4442c6dff08d77e733651%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637116905879102653&amp;sdata=6Ce6RR2jvpsESZs1I%2FOsYTX1cmImmftEBqfqpN8cp4s%3D&amp;reserved=0
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to