[PATCH 2/4] drm/amdgpu: initialize the cpu/gpu address of rptr/wptr/fence
Christian König
christian.koenig at amd.com
Tue Jul 28 11:19:28 UTC 2020
Am 28.07.20 um 12:21 schrieb Jack Xiao:
> Initialize the cpu/gpu address of rptr/wptr/fence.
>
> Signed-off-by: Jack Xiao <Jack.Xiao at amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c | 37 ++++++++++++++++++++----
> 1 file changed, 32 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
> index 13ea8ebc421c..ff63ecc861bc 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
> @@ -150,6 +150,12 @@ void amdgpu_ring_undo(struct amdgpu_ring *ring)
> ring->funcs->end_use(ring);
> }
>
> +#define amdgpu_ring_get_gpu_addr(ring, offset) \
> + (ring->adev->wb.gpu_addr + offset * 4)
> +
> +#define amdgpu_ring_get_cpu_addr(ring, offset) \
> + (&ring->adev->wb.wb[offset])
Those are not ring functions, but rather wb functions. Please clean that up.
Christian.
> +
> /**
> * amdgpu_ring_init - init driver ring struct.
> *
> @@ -217,17 +223,38 @@ int amdgpu_ring_init(struct amdgpu_device *adev, struct amdgpu_ring *ring,
> "(%d) ring trail_fence_offs wb alloc failed\n", r);
> return r;
> }
> - ring->trail_fence_gpu_addr =
> - adev->wb.gpu_addr + (ring->trail_fence_offs * 4);
> - ring->trail_fence_cpu_addr = &adev->wb.wb[ring->trail_fence_offs];
>
> r = amdgpu_device_wb_get(adev, &ring->cond_exe_offs);
> if (r) {
> dev_err(adev->dev, "(%d) ring cond_exec_polling wb alloc failed\n", r);
> return r;
> }
> - ring->cond_exe_gpu_addr = adev->wb.gpu_addr + (ring->cond_exe_offs * 4);
> - ring->cond_exe_cpu_addr = &adev->wb.wb[ring->cond_exe_offs];
> +
> + ring->fence_gpu_addr =
> + amdgpu_ring_get_gpu_addr(ring, ring->fence_offs);
> + ring->fence_cpu_addr =
> + amdgpu_ring_get_cpu_addr(ring, ring->fence_offs);
> +
> + ring->rptr_gpu_addr =
> + amdgpu_ring_get_gpu_addr(ring, ring->rptr_offs);
> + ring->rptr_cpu_addr =
> + amdgpu_ring_get_cpu_addr(ring, ring->rptr_offs);
> +
> + ring->wptr_gpu_addr =
> + amdgpu_ring_get_gpu_addr(ring, ring->wptr_offs);
> + ring->wptr_cpu_addr =
> + amdgpu_ring_get_cpu_addr(ring, ring->wptr_offs);
> +
> + ring->trail_fence_gpu_addr =
> + amdgpu_ring_get_gpu_addr(ring, ring->trail_fence_offs);
> + ring->trail_fence_cpu_addr =
> + amdgpu_ring_get_cpu_addr(ring, ring->trail_fence_offs);
> +
> + ring->cond_exe_gpu_addr =
> + amdgpu_ring_get_gpu_addr(ring, ring->cond_exe_offs);
> + ring->cond_exe_cpu_addr =
> + amdgpu_ring_get_cpu_addr(ring, ring->cond_exe_offs);
> +
> /* always set cond_exec_polling to CONTINUE */
> *ring->cond_exe_cpu_addr = 1;
>
More information about the amd-gfx
mailing list