diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c index bfb3c274d7f0..ef5342bd6968 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c | |||
@@ -1127,3 +1127,38 @@ void amdgpu_uvd_ring_end_use(struct amdgpu_ring *ring) | |||
1127 | { | 1127 | { |
1128 | schedule_delayed_work(&ring->adev->uvd.idle_work, UVD_IDLE_TIMEOUT); | 1128 | schedule_delayed_work(&ring->adev->uvd.idle_work, UVD_IDLE_TIMEOUT); |
1129 | } | 1129 | } |
1130 | |||
1131 | /** | ||
1132 | * amdgpu_uvd_ring_test_ib - test ib execution | ||
1133 | * | ||
1134 | * @ring: amdgpu_ring pointer | ||
1135 | * | ||
1136 | * Test if we can successfully execute an IB | ||
1137 | */ | ||
1138 | int amdgpu_uvd_ring_test_ib(struct amdgpu_ring *ring) | ||
1139 | { | ||
1140 | struct fence *fence = NULL; | ||
1141 | int r; | ||
1142 | |||
1143 | r = amdgpu_uvd_get_create_msg(ring, 1, NULL); | ||
1144 | if (r) { | ||
1145 | DRM_ERROR("amdgpu: failed to get create msg (%d).\n", r); | ||
1146 | goto error; | ||
1147 | } | ||
1148 | |||
1149 | r = amdgpu_uvd_get_destroy_msg(ring, 1, true, &fence); | ||
1150 | if (r) { | ||
1151 | DRM_ERROR("amdgpu: failed to get destroy ib (%d).\n", r); | ||
1152 | goto error; | ||
1153 | } | ||
1154 | |||
1155 | r = fence_wait(fence, false); | ||
1156 | if (r) { | ||
1157 | DRM_ERROR("amdgpu: fence wait failed (%d).\n", r); | ||
1158 | goto error; | ||
1159 | } | ||
1160 | DRM_INFO("ib test on ring %d succeeded\n", ring->idx); | ||
1161 | error: | ||
1162 | fence_put(fence); | ||
1163 | return r; | ||
1164 | } | ||