diff options
author | Christian König <christian.koenig@amd.com> | 2015-07-21 12:02:21 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2015-08-17 16:50:18 -0400 |
commit | 5430a3ffb0b1902e8aea4ed2ba256b1263126e8d (patch) | |
tree | c73e8f31dc1ef2f698c5f16fb8bc2c8e4d047b12 /drivers/gpu/drm/amd/amdgpu | |
parent | 5ceb54c68a28fc8af5cf8d32c4fde29c97dd3c18 (diff) |
drm/amdgpu: fix UVD/VCE fence handling
We need to return the sequence number to userspace
even when we don't use user fences.
Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu.h | 4 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c | 9 |
3 files changed, 9 insertions, 6 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h index 551143287698..e6c26c1716b6 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h | |||
@@ -414,8 +414,6 @@ struct amdgpu_user_fence { | |||
414 | struct amdgpu_bo *bo; | 414 | struct amdgpu_bo *bo; |
415 | /* write-back address offset to bo start */ | 415 | /* write-back address offset to bo start */ |
416 | uint32_t offset; | 416 | uint32_t offset; |
417 | /* resulting sequence number */ | ||
418 | uint64_t sequence; | ||
419 | }; | 417 | }; |
420 | 418 | ||
421 | int amdgpu_fence_driver_init(struct amdgpu_device *adev); | 419 | int amdgpu_fence_driver_init(struct amdgpu_device *adev); |
@@ -847,6 +845,8 @@ struct amdgpu_ib { | |||
847 | uint32_t gws_base, gws_size; | 845 | uint32_t gws_base, gws_size; |
848 | uint32_t oa_base, oa_size; | 846 | uint32_t oa_base, oa_size; |
849 | uint32_t flags; | 847 | uint32_t flags; |
848 | /* resulting sequence number */ | ||
849 | uint64_t sequence; | ||
850 | }; | 850 | }; |
851 | 851 | ||
852 | enum amdgpu_ring_type { | 852 | enum amdgpu_ring_type { |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c index cef8360698be..4794e14976ca 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | |||
@@ -794,7 +794,7 @@ int amdgpu_cs_ioctl(struct drm_device *dev, void *data, struct drm_file *filp) | |||
794 | goto out; | 794 | goto out; |
795 | } | 795 | } |
796 | 796 | ||
797 | cs->out.handle = parser.uf.sequence; | 797 | cs->out.handle = parser.ibs[parser.num_ibs - 1].sequence; |
798 | out: | 798 | out: |
799 | amdgpu_cs_parser_fini(&parser, r, true); | 799 | amdgpu_cs_parser_fini(&parser, r, true); |
800 | up_read(&adev->exclusive_lock); | 800 | up_read(&adev->exclusive_lock); |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c index f3ac9d8a5691..42d6298eb9d7 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c | |||
@@ -88,6 +88,7 @@ int amdgpu_ib_get(struct amdgpu_ring *ring, struct amdgpu_vm *vm, | |||
88 | ib->fence = NULL; | 88 | ib->fence = NULL; |
89 | ib->user = NULL; | 89 | ib->user = NULL; |
90 | ib->vm = vm; | 90 | ib->vm = vm; |
91 | ib->ctx = NULL; | ||
91 | ib->gds_base = 0; | 92 | ib->gds_base = 0; |
92 | ib->gds_size = 0; | 93 | ib->gds_size = 0; |
93 | ib->gws_base = 0; | 94 | ib->gws_base = 0; |
@@ -214,13 +215,15 @@ int amdgpu_ib_schedule(struct amdgpu_device *adev, unsigned num_ibs, | |||
214 | return r; | 215 | return r; |
215 | } | 216 | } |
216 | 217 | ||
218 | if (ib->ctx) | ||
219 | ib->sequence = amdgpu_ctx_add_fence(ib->ctx, ring, | ||
220 | &ib->fence->base); | ||
221 | |||
217 | /* wrap the last IB with fence */ | 222 | /* wrap the last IB with fence */ |
218 | if (ib->user) { | 223 | if (ib->user) { |
219 | uint64_t addr = amdgpu_bo_gpu_offset(ib->user->bo); | 224 | uint64_t addr = amdgpu_bo_gpu_offset(ib->user->bo); |
220 | ib->user->sequence = amdgpu_ctx_add_fence(ib->ctx, ring, | ||
221 | &ib->fence->base); | ||
222 | addr += ib->user->offset; | 225 | addr += ib->user->offset; |
223 | amdgpu_ring_emit_fence(ring, addr, ib->user->sequence, | 226 | amdgpu_ring_emit_fence(ring, addr, ib->sequence, |
224 | AMDGPU_FENCE_FLAG_64BIT); | 227 | AMDGPU_FENCE_FLAG_64BIT); |
225 | } | 228 | } |
226 | 229 | ||