[RFC 4/4] drm/amdgpu: Document the magic big endian bit

Tvrtko Ursulin tursulin at igalia.com
Tue Oct 8 15:05:32 UTC 2024


From: Tvrtko Ursulin <tvrtko.ursulin at igalia.com>

Similar to the previous patch but with the addition of a magic bit1 set on
big endian platforms. No idea what it is but maybe adding a helper and
giving both it and the magic bit a proper name would be worth it.

Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin at igalia.com>
Cc: Christian König <ckoenig.leichtzumerken at gmail.com>
Cc: Sunil Khatri <sunil.khatri at amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h | 13 +++++++++++++
 drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c   | 14 ++------------
 2 files changed, 15 insertions(+), 12 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h
index aeab6fe21db6..68f3799f173c 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h
@@ -503,6 +503,19 @@ static inline void amdgpu_ring_write_addr(struct amdgpu_ring *ring, u64 addr)
 	amdgpu_ring_write64(ring, v);
 }
 
+static inline void
+amdgpu_ring_write_addr_xbe(struct amdgpu_ring *ring, u64 addr)
+{
+	u64 v;
+
+#ifdef __BIG_ENDIAN
+	v = (u64)lower_32_bits(addr) << 32 | upper_32_bits(addr) | (2 << 0); /* Magic bit name? */
+#else
+	v = addr;
+#endif
+	amdgpu_ring_write64(ring, v);
+}
+
 /**
  * amdgpu_ring_patch_cond_exec - patch dw count of conditional execute
  * @ring: amdgpu_ring structure
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c
index 24fb58543041..de1909c1de49 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c
@@ -8549,12 +8549,7 @@ static void gfx_v10_0_ring_emit_ib_gfx(struct amdgpu_ring *ring,
 
 	amdgpu_ring_write(ring, header);
 	BUG_ON(ib->gpu_addr & 0x3); /* Dword align */
-	amdgpu_ring_write(ring,
-#ifdef __BIG_ENDIAN
-		(2 << 0) |
-#endif
-		lower_32_bits(ib->gpu_addr));
-	amdgpu_ring_write(ring, upper_32_bits(ib->gpu_addr));
+	amdgpu_ring_write_addr_xbe(ring, ib->gpu_addr);
 	amdgpu_ring_write(ring, control);
 }
 
@@ -8584,12 +8579,7 @@ static void gfx_v10_0_ring_emit_ib_compute(struct amdgpu_ring *ring,
 
 	amdgpu_ring_write(ring, PACKET3(PACKET3_INDIRECT_BUFFER, 2));
 	BUG_ON(ib->gpu_addr & 0x3); /* Dword align */
-	amdgpu_ring_write(ring,
-#ifdef __BIG_ENDIAN
-				(2 << 0) |
-#endif
-				lower_32_bits(ib->gpu_addr));
-	amdgpu_ring_write(ring, upper_32_bits(ib->gpu_addr));
+	amdgpu_ring_write_addr_xbe(ring, ib->gpu_addr);
 	amdgpu_ring_write(ring, control);
 }
 
-- 
2.46.0



More information about the amd-gfx mailing list