diff options
author | Christian König <christian.koenig@amd.com> | 2018-07-23 10:01:39 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2018-07-27 10:07:41 -0400 |
commit | 9d248517d4bd807c7690d55d0b6f54618fc60942 (patch) | |
tree | ac85222e732820ed7b44f441bdbe894fd5e5f6db /drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | |
parent | 6d52aacd92c60331ec8c3117522f4301b5195e28 (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.c | 22 |
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 | } |