aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c9
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c3
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c3
3 files changed, 11 insertions, 4 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
index 04b7aaf770e4..cf03f9f01f40 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
@@ -822,13 +822,14 @@ static int amdgpu_cs_ib_vm_chunk(struct amdgpu_device *adev,
822 822
823 /* Only for UVD/VCE VM emulation */ 823 /* Only for UVD/VCE VM emulation */
824 if (ring->funcs->parse_cs) { 824 if (ring->funcs->parse_cs) {
825 p->job->vm = NULL;
826 for (i = 0; i < p->job->num_ibs; i++) { 825 for (i = 0; i < p->job->num_ibs; i++) {
827 r = amdgpu_ring_parse_cs(ring, p, i); 826 r = amdgpu_ring_parse_cs(ring, p, i);
828 if (r) 827 if (r)
829 return r; 828 return r;
830 } 829 }
831 } else { 830 }
831
832 if (p->job->vm) {
832 p->job->vm_pd_addr = amdgpu_bo_gpu_offset(vm->page_directory); 833 p->job->vm_pd_addr = amdgpu_bo_gpu_offset(vm->page_directory);
833 834
834 r = amdgpu_bo_vm_update_pte(p, vm); 835 r = amdgpu_bo_vm_update_pte(p, vm);
@@ -917,7 +918,7 @@ static int amdgpu_cs_ib_fill(struct amdgpu_device *adev,
917 offset = ((uint64_t)m->it.start) * AMDGPU_GPU_PAGE_SIZE; 918 offset = ((uint64_t)m->it.start) * AMDGPU_GPU_PAGE_SIZE;
918 kptr += chunk_ib->va_start - offset; 919 kptr += chunk_ib->va_start - offset;
919 920
920 r = amdgpu_ib_get(adev, NULL, chunk_ib->ib_bytes, ib); 921 r = amdgpu_ib_get(adev, vm, chunk_ib->ib_bytes, ib);
921 if (r) { 922 if (r) {
922 DRM_ERROR("Failed to get ib !\n"); 923 DRM_ERROR("Failed to get ib !\n");
923 return r; 924 return r;
@@ -932,9 +933,9 @@ static int amdgpu_cs_ib_fill(struct amdgpu_device *adev,
932 return r; 933 return r;
933 } 934 }
934 935
935 ib->gpu_addr = chunk_ib->va_start;
936 } 936 }
937 937
938 ib->gpu_addr = chunk_ib->va_start;
938 ib->length_dw = chunk_ib->ib_bytes / 4; 939 ib->length_dw = chunk_ib->ib_bytes / 4;
939 ib->flags = chunk_ib->flags; 940 ib->flags = chunk_ib->flags;
940 j++; 941 j++;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
index d67eadaa91a3..1b54cc218b47 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
@@ -876,6 +876,9 @@ int amdgpu_uvd_ring_parse_cs(struct amdgpu_cs_parser *parser, uint32_t ib_idx)
876 struct amdgpu_ib *ib = &parser->job->ibs[ib_idx]; 876 struct amdgpu_ib *ib = &parser->job->ibs[ib_idx];
877 int r; 877 int r;
878 878
879 parser->job->vm = NULL;
880 ib->gpu_addr = amdgpu_sa_bo_gpu_addr(ib->sa_bo);
881
879 if (ib->length_dw % 16) { 882 if (ib->length_dw % 16) {
880 DRM_ERROR("UVD IB length (%d) not 16 dwords aligned!\n", 883 DRM_ERROR("UVD IB length (%d) not 16 dwords aligned!\n",
881 ib->length_dw); 884 ib->length_dw);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c
index 2fb469aa850a..05a1ea998fd6 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c
@@ -642,6 +642,9 @@ int amdgpu_vce_ring_parse_cs(struct amdgpu_cs_parser *p, uint32_t ib_idx)
642 uint32_t *size = &tmp; 642 uint32_t *size = &tmp;
643 int i, r, idx = 0; 643 int i, r, idx = 0;
644 644
645 p->job->vm = NULL;
646 ib->gpu_addr = amdgpu_sa_bo_gpu_addr(ib->sa_bo);
647
645 r = amdgpu_cs_sysvm_access_required(p); 648 r = amdgpu_cs_sysvm_access_required(p);
646 if (r) 649 if (r)
647 return r; 650 return r;