aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
diff options
context:
space:
mode:
authorChristian König <christian.koenig@amd.com>2016-02-01 06:20:25 -0500
committerAlex Deucher <alexander.deucher@amd.com>2016-02-10 14:17:22 -0500
commitd71518b5aa7c9c298ffbd12ddd23297e3373a37b (patch)
treebb548c89c8f21770cdf7086fee8c1c92aea1fa64 /drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
parenta0332b56f6e03e15946fb9d8813cfe44aeeb0e6c (diff)
drm/amdgpu: cleanup in kernel job submission
Add a job_alloc_with_ib helper and proper job submission. Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Alex Deucher <alexander.deucer@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c37
1 files changed, 12 insertions, 25 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
index 46f2bdb76d20..4e98be8b29fb 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
@@ -823,14 +823,6 @@ int amdgpu_uvd_ring_parse_cs(struct amdgpu_cs_parser *parser, uint32_t ib_idx)
823 return 0; 823 return 0;
824} 824}
825 825
826static int amdgpu_uvd_free_job(
827 struct amdgpu_job *job)
828{
829 amdgpu_ib_free(job->adev, job->ibs);
830 kfree(job->ibs);
831 return 0;
832}
833
834static int amdgpu_uvd_send_msg(struct amdgpu_ring *ring, 826static int amdgpu_uvd_send_msg(struct amdgpu_ring *ring,
835 struct amdgpu_bo *bo, 827 struct amdgpu_bo *bo,
836 struct fence **fence) 828 struct fence **fence)
@@ -838,7 +830,8 @@ static int amdgpu_uvd_send_msg(struct amdgpu_ring *ring,
838 struct ttm_validate_buffer tv; 830 struct ttm_validate_buffer tv;
839 struct ww_acquire_ctx ticket; 831 struct ww_acquire_ctx ticket;
840 struct list_head head; 832 struct list_head head;
841 struct amdgpu_ib *ib = NULL; 833 struct amdgpu_job *job;
834 struct amdgpu_ib *ib;
842 struct fence *f = NULL; 835 struct fence *f = NULL;
843 struct amdgpu_device *adev = ring->adev; 836 struct amdgpu_device *adev = ring->adev;
844 uint64_t addr; 837 uint64_t addr;
@@ -862,15 +855,12 @@ static int amdgpu_uvd_send_msg(struct amdgpu_ring *ring,
862 r = ttm_bo_validate(&bo->tbo, &bo->placement, true, false); 855 r = ttm_bo_validate(&bo->tbo, &bo->placement, true, false);
863 if (r) 856 if (r)
864 goto err; 857 goto err;
865 ib = kzalloc(sizeof(struct amdgpu_ib), GFP_KERNEL); 858
866 if (!ib) { 859 r = amdgpu_job_alloc_with_ib(adev, 64, &job);
867 r = -ENOMEM;
868 goto err;
869 }
870 r = amdgpu_ib_get(adev, NULL, 64, ib);
871 if (r) 860 if (r)
872 goto err1; 861 goto err;
873 862
863 ib = &job->ibs[0];
874 addr = amdgpu_bo_gpu_offset(bo); 864 addr = amdgpu_bo_gpu_offset(bo);
875 ib->ptr[0] = PACKET0(mmUVD_GPCOM_VCPU_DATA0, 0); 865 ib->ptr[0] = PACKET0(mmUVD_GPCOM_VCPU_DATA0, 0);
876 ib->ptr[1] = addr; 866 ib->ptr[1] = addr;
@@ -882,12 +872,9 @@ static int amdgpu_uvd_send_msg(struct amdgpu_ring *ring,
882 ib->ptr[i] = PACKET2(0); 872 ib->ptr[i] = PACKET2(0);
883 ib->length_dw = 16; 873 ib->length_dw = 16;
884 874
885 r = amdgpu_sched_ib_submit_kernel_helper(adev, ring, ib, 1, 875 r = amdgpu_job_submit(job, ring, AMDGPU_FENCE_OWNER_UNDEFINED, &f);
886 &amdgpu_uvd_free_job,
887 AMDGPU_FENCE_OWNER_UNDEFINED,
888 &f);
889 if (r) 876 if (r)
890 goto err2; 877 goto err_free;
891 878
892 ttm_eu_fence_buffer_objects(&ticket, &head, f); 879 ttm_eu_fence_buffer_objects(&ticket, &head, f);
893 880
@@ -897,10 +884,10 @@ static int amdgpu_uvd_send_msg(struct amdgpu_ring *ring,
897 fence_put(f); 884 fence_put(f);
898 885
899 return 0; 886 return 0;
900err2: 887
901 amdgpu_ib_free(ring->adev, ib); 888err_free:
902err1: 889 amdgpu_job_free(job);
903 kfree(ib); 890
904err: 891err:
905 ttm_eu_backoff_reservation(&ticket, &head); 892 ttm_eu_backoff_reservation(&ticket, &head);
906 return r; 893 return r;