[PATCH 1/2] lib/amdgpu: fix SDMA packet contents for deadlock helper

Alex Deucher alexander.deucher at amd.com
Wed Jun 25 04:21:32 UTC 2025


Use the right NOP packet for SDMA and set the retry
to infinite.  If it's set to 0, the engine gives up
after the first try.

Signed-off-by: Alex Deucher <alexander.deucher at amd.com>
---
 lib/amdgpu/amd_deadlock_helpers.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/lib/amdgpu/amd_deadlock_helpers.c b/lib/amdgpu/amd_deadlock_helpers.c
index 3b4822ca0..0cd83f061 100644
--- a/lib/amdgpu/amd_deadlock_helpers.c
+++ b/lib/amdgpu/amd_deadlock_helpers.c
@@ -101,8 +101,14 @@ amdgpu_wait_memory(amdgpu_device_handle device_handle, unsigned int ip_type, uin
 
 	base_cmd->emit(base_cmd, 0);/* reference value */
 	base_cmd->emit(base_cmd, 0xffffffff); /* and mask */
-	base_cmd->emit(base_cmd, 0x00000004);/* poll interval */
-	base_cmd->emit_repeat(base_cmd, GFX_COMPUTE_NOP, 16 - base_cmd->cdw);
+
+	if (ip_type == AMDGPU_HW_IP_DMA) {
+		base_cmd->emit(base_cmd, 0x0fff0004);/* poll interval and infinite retry */
+		base_cmd->emit_repeat(base_cmd, SDMA_NOP, 16 - base_cmd->cdw);
+	} else {
+		base_cmd->emit(base_cmd, 0x00000004);/* poll interval */
+		base_cmd->emit_repeat(base_cmd, GFX_COMPUTE_NOP, 16 - base_cmd->cdw);
+	}
 
 	ib_result_cpu2 = ib_result_cpu;
 	ib_result_cpu2[MEMORY_OFFSET] = 0x0; /* the memory we wait on to change */
-- 
2.49.0



More information about the igt-dev mailing list