Skip to content

Commit cf07ece

Browse files
committed
drm/amdgpu/jpeg4.0.5: add queue reset
Add queue reset support for jpeg 4.0.5. Use the new helpers to re-emit the unprocessed state after resetting the queue. Reviewed-by: Sathishkumar S <[email protected]> Tested-by: Sathishkumar S <[email protected]> Signed-off-by: Alex Deucher <[email protected]>
1 parent 98f1663 commit cf07ece

File tree

1 file changed

+22
-1
lines changed

1 file changed

+22
-1
lines changed

drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_5.c

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,9 +174,10 @@ static int jpeg_v4_0_5_sw_init(struct amdgpu_ip_block *ip_block)
174174
if (r)
175175
return r;
176176

177-
/* TODO: Add queue reset mask when FW fully supports it */
178177
adev->jpeg.supported_reset =
179178
amdgpu_get_soft_full_reset_mask(&adev->jpeg.inst[0].ring_dec[0]);
179+
if (!amdgpu_sriov_vf(adev))
180+
adev->jpeg.supported_reset = AMDGPU_RESET_TYPE_PER_QUEUE;
180181
r = amdgpu_jpeg_sysfs_reset_mask_init(adev);
181182
if (r)
182183
return r;
@@ -767,6 +768,25 @@ static int jpeg_v4_0_5_process_interrupt(struct amdgpu_device *adev,
767768
return 0;
768769
}
769770

771+
static int jpeg_v4_0_5_ring_reset(struct amdgpu_ring *ring,
772+
unsigned int vmid,
773+
struct amdgpu_fence *timedout_fence)
774+
{
775+
int r;
776+
777+
if (!(ring->adev->jpeg.supported_reset & AMDGPU_RESET_TYPE_PER_QUEUE))
778+
return -EOPNOTSUPP;
779+
780+
amdgpu_ring_reset_helper_begin(ring, timedout_fence);
781+
r = jpeg_v4_0_5_stop(ring->adev);
782+
if (r)
783+
return r;
784+
r = jpeg_v4_0_5_start(ring->adev);
785+
if (r)
786+
return r;
787+
return amdgpu_ring_reset_helper_end(ring, timedout_fence);
788+
}
789+
770790
static const struct amd_ip_funcs jpeg_v4_0_5_ip_funcs = {
771791
.name = "jpeg_v4_0_5",
772792
.early_init = jpeg_v4_0_5_early_init,
@@ -812,6 +832,7 @@ static const struct amdgpu_ring_funcs jpeg_v4_0_5_dec_ring_vm_funcs = {
812832
.emit_wreg = jpeg_v2_0_dec_ring_emit_wreg,
813833
.emit_reg_wait = jpeg_v2_0_dec_ring_emit_reg_wait,
814834
.emit_reg_write_reg_wait = amdgpu_ring_emit_reg_write_reg_wait_helper,
835+
.reset = jpeg_v4_0_5_ring_reset,
815836
};
816837

817838
static void jpeg_v4_0_5_set_dec_ring_funcs(struct amdgpu_device *adev)

0 commit comments

Comments
 (0)