diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 9 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c | 3 |
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; |