[PATCH] drm/amdgpu: fix random data corruption for sdma 7

Min, Frank Frank.Min at amd.com
Wed Oct 16 02:59:05 UTC 2024


[AMD Official Use Only - AMD Internal Distribution Only]

From: Frank Min <Frank.Min at amd.com>

There is random data corruption caused by const fill, this is caused by write compression mode not correclt configured.

So correct compression mode for const fill.

Signed-off-by: Frank Min <Frank.Min at amd.com>
---
 drivers/gpu/drm/amd/amdgpu/sdma_v6_0_0_pkt_open.h | 5 ++++-
 drivers/gpu/drm/amd/amdgpu/sdma_v7_0.c            | 3 ++-
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v6_0_0_pkt_open.h b/drivers/gpu/drm/amd/amdgpu/sdma_v6_0_0_pkt_open.h
index d8cf830916b9..18e73057e6ba 100644
--- a/drivers/gpu/drm/amd/amdgpu/sdma_v6_0_0_pkt_open.h
+++ b/drivers/gpu/drm/amd/amdgpu/sdma_v6_0_0_pkt_open.h
@@ -116,11 +116,14 @@
 #define SDMA_PKT_COPY_LINEAR_HEADER_sub_op_shift  8  #define SDMA_PKT_COPY_LINEAR_HEADER_SUB_OP(x) (((x) & SDMA_PKT_COPY_LINEAR_HEADER_sub_op_mask) << SDMA_PKT_COPY_LINEAR_HEADER_sub_op_shift)

-/*define for encrypt field*/
+/*define for encrypt/compress field*/
 #define SDMA_PKT_COPY_LINEAR_HEADER_encrypt_offset 0
 #define SDMA_PKT_COPY_LINEAR_HEADER_encrypt_mask   0x00000001
 #define SDMA_PKT_COPY_LINEAR_HEADER_encrypt_shift  16
+/*sdma6 use bit 16 for data encryption*/
 #define SDMA_PKT_COPY_LINEAR_HEADER_ENCRYPT(x) (((x) & SDMA_PKT_COPY_LINEAR_HEADER_encrypt_mask) << SDMA_PKT_COPY_LINEAR_HEADER_encrypt_shift)
+/*sdma7 use bit 16 for dcc compression*/ #define
+SDMA_PKT_COPY_LINEAR_HEADER_COMPRESS(x) (((x) &
+SDMA_PKT_COPY_LINEAR_HEADER_encrypt_mask) <<
+SDMA_PKT_COPY_LINEAR_HEADER_encrypt_shift)

 /*define for tmz field*/
 #define SDMA_PKT_COPY_LINEAR_HEADER_tmz_offset 0 diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v7_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v7_0.c
index a8763496aed3..9181579ae6a1 100644
--- a/drivers/gpu/drm/amd/amdgpu/sdma_v7_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/sdma_v7_0.c
@@ -1724,7 +1724,8 @@ static void sdma_v7_0_emit_fill_buffer(struct amdgpu_ib *ib,
                                       uint64_t dst_offset,
                                       uint32_t byte_count)
 {
-       ib->ptr[ib->length_dw++] = SDMA_PKT_COPY_LINEAR_HEADER_OP(SDMA_OP_CONST_FILL);
+       ib->ptr[ib->length_dw++] = SDMA_PKT_COPY_LINEAR_HEADER_OP(SDMA_OP_CONST_FILL) |
+               SDMA_PKT_COPY_LINEAR_HEADER_COMPRESS(1);
        ib->ptr[ib->length_dw++] = lower_32_bits(dst_offset);
        ib->ptr[ib->length_dw++] = upper_32_bits(dst_offset);
        ib->ptr[ib->length_dw++] = src_data;
--
2.43.0



More information about the amd-gfx mailing list