[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