From 2cc3e1b9ae338a906d366d0e4e4878bb013ff836 Mon Sep 17 00:00:00 2001 From: Rob Clark Date: Sat, 2 Aug 2025 08:12:55 -0700 Subject: [PATCH] freedreno/drm: Expose attach_ring() This will fit in better with the upcoming new cs builders. Signed-off-by: Rob Clark Part-of: --- src/freedreno/drm/freedreno_ringbuffer.h | 10 ++++++++++ src/freedreno/drm/freedreno_ringbuffer_sp.c | 4 ++++ 2 files changed, 14 insertions(+) diff --git a/src/freedreno/drm/freedreno_ringbuffer.h b/src/freedreno/drm/freedreno_ringbuffer.h index 70c31e3a602..3ffa992f2c3 100644 --- a/src/freedreno/drm/freedreno_ringbuffer.h +++ b/src/freedreno/drm/freedreno_ringbuffer.h @@ -92,6 +92,8 @@ struct fd_ringbuffer_funcs { * the kernel would need to do a legacy reloc. */ void (*attach_bo)(struct fd_ringbuffer *ring, struct fd_bo *bo); + uint32_t (*attach_ring)(struct fd_ringbuffer *ring, struct fd_ringbuffer *target, + uint32_t cmd_idx, uint64_t *iova); void (*assert_attached)(struct fd_ringbuffer *ring, struct fd_bo *bo); void (*emit_reloc)(struct fd_ringbuffer *ring, const struct fd_reloc *reloc); @@ -210,6 +212,14 @@ fd_ringbuffer_attach_bo(struct fd_ringbuffer *ring, struct fd_bo *bo) ring->funcs->attach_bo(ring, bo); } +static inline +uint32_t fd_ringbuffer_attach_ring(struct fd_ringbuffer *ring, + struct fd_ringbuffer *target, + uint32_t cmd_idx, uint64_t *iova) +{ + return ring->funcs->attach_ring(ring, target, cmd_idx, iova); +} + static inline void fd_ringbuffer_assert_attached(struct fd_ringbuffer *ring, struct fd_bo *bo) { diff --git a/src/freedreno/drm/freedreno_ringbuffer_sp.c b/src/freedreno/drm/freedreno_ringbuffer_sp.c index c3df1d7f47e..0ede1c849f0 100644 --- a/src/freedreno/drm/freedreno_ringbuffer_sp.c +++ b/src/freedreno/drm/freedreno_ringbuffer_sp.c @@ -747,6 +747,7 @@ fd_ringbuffer_sp_destroy(struct fd_ringbuffer *ring) static const struct fd_ringbuffer_funcs ring_funcs_nonobj_32 = { .grow = fd_ringbuffer_sp_grow, .attach_bo = fd_ringbuffer_sp_attach_bo_nonobj, + .attach_ring = fd_ringbuffer_sp_attach_ring_nonobj, .assert_attached = fd_ringbuffer_sp_assert_attached_nonobj, .emit_reloc = fd_ringbuffer_sp_emit_reloc_nonobj_32, .emit_reloc_ring = fd_ringbuffer_sp_emit_reloc_ring_nonobj_32, @@ -758,6 +759,7 @@ static const struct fd_ringbuffer_funcs ring_funcs_nonobj_32 = { static const struct fd_ringbuffer_funcs ring_funcs_obj_32 = { .grow = fd_ringbuffer_sp_grow, .attach_bo = fd_ringbuffer_sp_attach_bo_obj, + .attach_ring = fd_ringbuffer_sp_attach_ring_obj, .assert_attached = fd_ringbuffer_sp_assert_attached_obj, .emit_reloc = fd_ringbuffer_sp_emit_reloc_obj_32, .emit_reloc_ring = fd_ringbuffer_sp_emit_reloc_ring_obj_32, @@ -768,6 +770,7 @@ static const struct fd_ringbuffer_funcs ring_funcs_obj_32 = { static const struct fd_ringbuffer_funcs ring_funcs_nonobj_64 = { .grow = fd_ringbuffer_sp_grow, .attach_bo = fd_ringbuffer_sp_attach_bo_nonobj, + .attach_ring = fd_ringbuffer_sp_attach_ring_nonobj, .assert_attached = fd_ringbuffer_sp_assert_attached_nonobj, .emit_reloc = fd_ringbuffer_sp_emit_reloc_nonobj_64, .emit_reloc_ring = fd_ringbuffer_sp_emit_reloc_ring_nonobj_64, @@ -779,6 +782,7 @@ static const struct fd_ringbuffer_funcs ring_funcs_nonobj_64 = { static const struct fd_ringbuffer_funcs ring_funcs_obj_64 = { .grow = fd_ringbuffer_sp_grow, .attach_bo = fd_ringbuffer_sp_attach_bo_obj, + .attach_ring = fd_ringbuffer_sp_attach_ring_obj, .assert_attached = fd_ringbuffer_sp_assert_attached_obj, .emit_reloc = fd_ringbuffer_sp_emit_reloc_obj_64, .emit_reloc_ring = fd_ringbuffer_sp_emit_reloc_ring_obj_64,