[PATCH 1/6] drm/amd/amdgpu: Add a helper to copy the CSB buffer into the ring buffer
Rodrigo Siqueira
siqueira at igalia.com
Sun May 4 21:47:34 UTC 2025
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,
+ volatile u32 *csb_buffer,
+ 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);
--
2.47.2
More information about the amd-gfx
mailing list