[PATCH] drm/amdgpu: add JPEG check to VCN idle handler and begin use
Alex Deucher
alexdeucher at gmail.com
Wed Dec 11 19:52:10 UTC 2019
On Wed, Dec 11, 2019 at 2:49 PM Leo Liu <leo.liu at amd.com> wrote:
>
> Since it's only needed with VCN1.0 when HW has no its
> own JPEG HW IP block
typo "HW does not have its own"
With that fixed:
Reviewed-by: Alex Deucher <alexander.deucher at amd.com>
>
> Signed-off-by: Leo Liu <leo.liu at 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 at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
More information about the amd-gfx
mailing list