Re: [PATCH] drm/amdgpu: add JPEG check to VCN idle handler and begin use

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Am 12.12.19 um 16:57 schrieb Leo Liu:

On 2019-12-12 3:18 a.m., Christian König wrote:
Am 11.12.19 um 20:48 schrieb Leo Liu:
Since it's only needed with VCN1.0 when HW has no its
own JPEG HW IP block

Wouldn't it be simpler/cleaner to just define a vcn_v1_0_ring_begin_use() and vcn_v1_0_idle_work_handler() instead?

Yeah, this way should be cleaner, even though the changes got bigger, the new set will be sent shortly.

Keep in mind that you don't need to fully clone the code.

You probably can still call the common VCN helper code quite a bit.

Christian.


Thanks,

Leo




Regards,
Christian.


Signed-off-by: Leo Liu <leo.liu@xxxxxxx>
---
  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);


_______________________________________________
amd-gfx mailing list
amd-gfx@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/amd-gfx




[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux