diff options
author | Dave Airlie <airlied@redhat.com> | 2018-11-18 20:07:52 -0500 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2018-11-18 20:07:52 -0500 |
commit | 9235dd441af43599b9cdcce599a3da4083fcad3c (patch) | |
tree | 5f8a79cc2d378f05e807c6c5e388394b8e86319d /drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c | |
parent | d7563c55ef9fc1fd2301b8708b3c1f53509d6745 (diff) | |
parent | 36b486bc682114a2f1001cbf1a87f21ae381bfc1 (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.c | 38 |
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 | */ |
1035 | void amdgpu_vce_ring_emit_ib(struct amdgpu_ring *ring, struct amdgpu_ib *ib, | 1035 | void 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 | |
1145 | error: | 1131 | error: |
1146 | dma_fence_put(fence); | 1132 | dma_fence_put(fence); |
1147 | return r; | 1133 | return r; |