On Wed, Dec 11, 2019 at 2:49 PM Leo Liu <leo.liu@xxxxxxx> 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@xxxxxxx> > > 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); > -- > 2.17.1 > > _______________________________________________ > amd-gfx mailing list > amd-gfx@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/amd-gfx _______________________________________________ amd-gfx mailing list amd-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/amd-gfx