aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
diff options
context:
space:
mode:
authorChristian König <christian.koenig@amd.com>2018-07-23 10:01:39 -0400
committerAlex Deucher <alexander.deucher@amd.com>2018-07-27 10:07:41 -0400
commit9d248517d4bd807c7690d55d0b6f54618fc60942 (patch)
treeac85222e732820ed7b44f441bdbe894fd5e5f6db /drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
parent6d52aacd92c60331ec8c3117522f4301b5195e28 (diff)
drm/amdgpu: add support for inplace IB patching for MM engines v2
We are going to need that for the second UVD instance on Vega20. v2: rename to patch_cs_in_place Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-and-tested-by: James Zhu <James.Zhu@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c22
1 files changed, 15 insertions, 7 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
index 178d9ce4eba1..533b2e7656c0 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
@@ -916,7 +916,7 @@ static int amdgpu_cs_ib_vm_chunk(struct amdgpu_device *adev,
916 int r; 916 int r;
917 917
918 /* Only for UVD/VCE VM emulation */ 918 /* Only for UVD/VCE VM emulation */
919 if (p->ring->funcs->parse_cs) { 919 if (p->ring->funcs->parse_cs || p->ring->funcs->patch_cs_in_place) {
920 unsigned i, j; 920 unsigned i, j;
921 921
922 for (i = 0, j = 0; i < p->nchunks && j < p->job->num_ibs; i++) { 922 for (i = 0, j = 0; i < p->nchunks && j < p->job->num_ibs; i++) {
@@ -957,12 +957,20 @@ static int amdgpu_cs_ib_vm_chunk(struct amdgpu_device *adev,
957 offset = m->start * AMDGPU_GPU_PAGE_SIZE; 957 offset = m->start * AMDGPU_GPU_PAGE_SIZE;
958 kptr += va_start - offset; 958 kptr += va_start - offset;
959 959
960 memcpy(ib->ptr, kptr, chunk_ib->ib_bytes); 960 if (p->ring->funcs->parse_cs) {
961 amdgpu_bo_kunmap(aobj); 961 memcpy(ib->ptr, kptr, chunk_ib->ib_bytes);
962 962 amdgpu_bo_kunmap(aobj);
963 r = amdgpu_ring_parse_cs(ring, p, j); 963
964 if (r) 964 r = amdgpu_ring_parse_cs(ring, p, j);
965 return r; 965 if (r)
966 return r;
967 } else {
968 ib->ptr = (uint32_t *)kptr;
969 r = amdgpu_ring_patch_cs_in_place(ring, p, j);
970 amdgpu_bo_kunmap(aobj);
971 if (r)
972 return r;
973 }
966 974
967 j++; 975 j++;
968 } 976 }