Commit c5795c55 authored by Christian König's avatar Christian König Committed by Alex Deucher

drm/amdgpu: minor CS optimization

We only need to loop over all IBs for old UVD/VCE command stream patching.
Signed-off-by: default avatarChristian König <christian.koenig@amd.com>
Reviewed-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 7fd5e36c
...@@ -853,27 +853,28 @@ static int amdgpu_cs_ib_vm_chunk(struct amdgpu_device *adev, ...@@ -853,27 +853,28 @@ static int amdgpu_cs_ib_vm_chunk(struct amdgpu_device *adev,
struct amdgpu_fpriv *fpriv = p->filp->driver_priv; struct amdgpu_fpriv *fpriv = p->filp->driver_priv;
struct amdgpu_vm *vm = &fpriv->vm; struct amdgpu_vm *vm = &fpriv->vm;
struct amdgpu_ring *ring = p->job->ring; struct amdgpu_ring *ring = p->job->ring;
int i, j, r; int r;
for (i = 0, j = 0; i < p->nchunks && j < p->job->num_ibs; i++) { /* Only for UVD/VCE VM emulation */
if (p->job->ring->funcs->parse_cs) {
unsigned i, j;
for (i = 0, j = 0; i < p->nchunks && j < p->job->num_ibs; i++) {
struct drm_amdgpu_cs_chunk_ib *chunk_ib;
struct amdgpu_bo_va_mapping *m;
struct amdgpu_bo *aobj = NULL;
struct amdgpu_cs_chunk *chunk; struct amdgpu_cs_chunk *chunk;
struct amdgpu_ib *ib; struct amdgpu_ib *ib;
struct drm_amdgpu_cs_chunk_ib *chunk_ib; uint64_t offset;
uint8_t *kptr;
chunk = &p->chunks[i]; chunk = &p->chunks[i];
ib = &p->job->ibs[j]; ib = &p->job->ibs[j];
chunk_ib = (struct drm_amdgpu_cs_chunk_ib *)chunk->kdata; chunk_ib = chunk->kdata;
if (chunk->chunk_id != AMDGPU_CHUNK_ID_IB) if (chunk->chunk_id != AMDGPU_CHUNK_ID_IB)
continue; continue;
if (p->job->ring->funcs->parse_cs) {
struct amdgpu_bo_va_mapping *m;
struct amdgpu_bo *aobj = NULL;
uint64_t offset;
uint8_t *kptr;
r = amdgpu_cs_find_mapping(p, chunk_ib->va_start, r = amdgpu_cs_find_mapping(p, chunk_ib->va_start,
&aobj, &m); &aobj, &m);
if (r) { if (r) {
...@@ -899,13 +900,13 @@ static int amdgpu_cs_ib_vm_chunk(struct amdgpu_device *adev, ...@@ -899,13 +900,13 @@ static int amdgpu_cs_ib_vm_chunk(struct amdgpu_device *adev,
memcpy(ib->ptr, kptr, chunk_ib->ib_bytes); memcpy(ib->ptr, kptr, chunk_ib->ib_bytes);
amdgpu_bo_kunmap(aobj); amdgpu_bo_kunmap(aobj);
/* Only for UVD/VCE VM emulation */
r = amdgpu_ring_parse_cs(ring, p, j); r = amdgpu_ring_parse_cs(ring, p, j);
if (r) if (r)
return r; return r;
}
j++; j++;
} }
}
if (p->job->vm) { if (p->job->vm) {
p->job->vm_pd_addr = amdgpu_bo_gpu_offset(vm->root.base.bo); p->job->vm_pd_addr = amdgpu_bo_gpu_offset(vm->root.base.bo);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment