[PATCH 1/6] drm/amd/amdgpu: Add a helper to copy the CSB buffer into the ring buffer
Christian König
christian.koenig at amd.com
Mon May 5 09:12:03 UTC 2025
On 5/4/25 23:47, Rodrigo Siqueira wrote:
> In the GFX code, there are multiple parsers of the CSB buffer, which can
> be avoided. This data is parsed via get_csb_buffer() in earlier stages,
> and the result can be checked in "adev->gfx.rlc.cs_ptr". To avoid
> re-parser the CSB buffer, this commit introduces a helper that copies
> the CSB buffer into the ring buffer.
>
> Signed-off-by: Rodrigo Siqueira <siqueira at igalia.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c | 21 +++++++++++++++++++++
> drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.h | 4 ++++
> 2 files changed, 25 insertions(+)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c
> index 8f1a2f7b03c1..dfd48670a0bf 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c
> @@ -2323,6 +2323,27 @@ void amdgpu_gfx_csb_preamble_end(volatile u32 *buffer, u32 count)
> buffer[count++] = cpu_to_le32(0);
> }
>
> +/**
> + * amdgpu_gfx_write_csb_to_ring - Write the CSB buffer into the ring
> + *
> + * @ring: Ring reference.
> + * @csb_buffer: CSB buffer.
> + * @csb_size: CSB buffer size.
> + *
> + * Usually, the adev->gfx.rlc.cs_ptr field is filled in earlier stages via
> + * get_csb_buffer(). This function just gets the CSB buffer and fills it in the
> + * ring buffer.
> + */
> +void amdgpu_gfx_write_csb_to_ring(struct amdgpu_ring *ring,
We already have the amdgpu_ring_write_multiple() function for exactly that.
> + volatile u32 *csb_buffer,
Please drop volatile from all pointers inside the kernel and point me out if you still find some in existing code.
They are nearly always used incorrectly, see here https://docs.kernel.org/process/volatile-considered-harmful.html
Thanks,
Christian.
> + u32 csb_size)
> +{
> + int i;
> +
> + for (i = 0; i < csb_size; i++)
> + amdgpu_ring_write(ring, csb_buffer[i]);
> +}
> +
> /*
> * debugfs for to enable/disable gfx job submission to specific core.
> */
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.h
> index 08f268dab8f5..ce684c3d3d89 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.h
> @@ -646,6 +646,10 @@ u32 amdgpu_gfx_csb_preamble_start(volatile u32 *buffer);
> u32 amdgpu_gfx_csb_data_parser(struct amdgpu_device *adev, volatile u32 *buffer, u32 count);
> void amdgpu_gfx_csb_preamble_end(volatile u32 *buffer, u32 count);
>
> +void amdgpu_gfx_write_csb_to_ring(struct amdgpu_ring *ring,
> + volatile u32 *csb_buffer,
> + u32 csb_size);
> +
> void amdgpu_debugfs_gfx_sched_mask_init(struct amdgpu_device *adev);
> void amdgpu_debugfs_compute_sched_mask_init(struct amdgpu_device *adev);
>
More information about the amd-gfx
mailing list