aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2018-11-18 20:07:52 -0500
committerDave Airlie <airlied@redhat.com>2018-11-18 20:07:52 -0500
commit9235dd441af43599b9cdcce599a3da4083fcad3c (patch)
tree5f8a79cc2d378f05e807c6c5e388394b8e86319d /drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c
parentd7563c55ef9fc1fd2301b8708b3c1f53509d6745 (diff)
parent36b486bc682114a2f1001cbf1a87f21ae381bfc1 (diff)
Merge branch 'drm-next-4.21' of git://people.freedesktop.org/~agd5f/linux into drm-next
New features for 4.21: amdgpu: - Support for SDMA paging queue on vega - Put compute EOP buffers into vram for better performance - Share more code with amdkfd - Support for scanout with DCC on gfx9 - Initial kerneldoc for DC - Updated SMU firmware support for gfx8 chips - Rework CSA handling for eventual support for preemption - XGMI PSP support - Clean up RLC handling - Enable GPU reset by default on VI, SOC15 dGPUs - Ring and IB test cleanups amdkfd: - Share more code with amdgpu ttm: - Move global init out of the drivers scheduler: - Track if schedulers are ready for work - Timeout/fault handling changes to facilitate GPU recovery Signed-off-by: Dave Airlie <airlied@redhat.com> From: Alex Deucher <alexdeucher@gmail.com> Link: https://patchwork.freedesktop.org/patch/msgid/20181114165113.3751-1-alexander.deucher@amd.com
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c38
1 files changed, 12 insertions, 26 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c
index 5f3f54073818..98a1b2ce2b9d 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c
@@ -1032,8 +1032,10 @@ out:
1032 * @ib: the IB to execute 1032 * @ib: the IB to execute
1033 * 1033 *
1034 */ 1034 */
1035void amdgpu_vce_ring_emit_ib(struct amdgpu_ring *ring, struct amdgpu_ib *ib, 1035void amdgpu_vce_ring_emit_ib(struct amdgpu_ring *ring,
1036 unsigned vmid, bool ctx_switch) 1036 struct amdgpu_job *job,
1037 struct amdgpu_ib *ib,
1038 bool ctx_switch)
1037{ 1039{
1038 amdgpu_ring_write(ring, VCE_CMD_IB); 1040 amdgpu_ring_write(ring, VCE_CMD_IB);
1039 amdgpu_ring_write(ring, lower_32_bits(ib->gpu_addr)); 1041 amdgpu_ring_write(ring, lower_32_bits(ib->gpu_addr));
@@ -1079,11 +1081,9 @@ int amdgpu_vce_ring_test_ring(struct amdgpu_ring *ring)
1079 return 0; 1081 return 0;
1080 1082
1081 r = amdgpu_ring_alloc(ring, 16); 1083 r = amdgpu_ring_alloc(ring, 16);
1082 if (r) { 1084 if (r)
1083 DRM_ERROR("amdgpu: vce failed to lock ring %d (%d).\n",
1084 ring->idx, r);
1085 return r; 1085 return r;
1086 } 1086
1087 amdgpu_ring_write(ring, VCE_CMD_END); 1087 amdgpu_ring_write(ring, VCE_CMD_END);
1088 amdgpu_ring_commit(ring); 1088 amdgpu_ring_commit(ring);
1089 1089
@@ -1093,14 +1093,8 @@ int amdgpu_vce_ring_test_ring(struct amdgpu_ring *ring)
1093 DRM_UDELAY(1); 1093 DRM_UDELAY(1);
1094 } 1094 }
1095 1095
1096 if (i < timeout) { 1096 if (i >= timeout)
1097 DRM_DEBUG("ring test on %d succeeded in %d usecs\n",
1098 ring->idx, i);
1099 } else {
1100 DRM_ERROR("amdgpu: ring %d test failed\n",
1101 ring->idx);
1102 r = -ETIMEDOUT; 1097 r = -ETIMEDOUT;
1103 }
1104 1098
1105 return r; 1099 return r;
1106} 1100}
@@ -1121,27 +1115,19 @@ int amdgpu_vce_ring_test_ib(struct amdgpu_ring *ring, long timeout)
1121 return 0; 1115 return 0;
1122 1116
1123 r = amdgpu_vce_get_create_msg(ring, 1, NULL); 1117 r = amdgpu_vce_get_create_msg(ring, 1, NULL);
1124 if (r) { 1118 if (r)
1125 DRM_ERROR("amdgpu: failed to get create msg (%ld).\n", r);
1126 goto error; 1119 goto error;
1127 }
1128 1120
1129 r = amdgpu_vce_get_destroy_msg(ring, 1, true, &fence); 1121 r = amdgpu_vce_get_destroy_msg(ring, 1, true, &fence);
1130 if (r) { 1122 if (r)
1131 DRM_ERROR("amdgpu: failed to get destroy ib (%ld).\n", r);
1132 goto error; 1123 goto error;
1133 }
1134 1124
1135 r = dma_fence_wait_timeout(fence, false, timeout); 1125 r = dma_fence_wait_timeout(fence, false, timeout);
1136 if (r == 0) { 1126 if (r == 0)
1137 DRM_ERROR("amdgpu: IB test timed out.\n");
1138 r = -ETIMEDOUT; 1127 r = -ETIMEDOUT;
1139 } else if (r < 0) { 1128 else if (r > 0)
1140 DRM_ERROR("amdgpu: fence wait failed (%ld).\n", r);
1141 } else {
1142 DRM_DEBUG("ib test on ring %d succeeded\n", ring->idx);
1143 r = 0; 1129 r = 0;
1144 } 1130
1145error: 1131error:
1146 dma_fence_put(fence); 1132 dma_fence_put(fence);
1147 return r; 1133 return r;