diff options
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 | ||
