trap_handler: Set status.skip_export when halting a wave

When inspecting waves on architectures where SPI may not initialize TTMP
registers, the debugger cannot reliably know if the trap handler was
entered and if it saved valuable information in TTMP registers.

This patch uses the status.skip_export bit (unused by the compute
shaders) to indicate that it got executed before halting a wave.
This is done except for gfx940, where ttmp11[31] can be used (as long as
TTMP registers are always initialized by SPI for this architecture).  It
could be possible to be more selective as architectures always
initializing TTMP registers do not require this step, but always doing
is makes maintenance simpler.

Change-Id: I314db6b37772f7daa8bd405e6662a86658d3f5e0
Esse commit está contido em:
Lancelot SIX
2023-12-01 16:42:01 +00:00
commit de Lancelot Six
commit c5db063b2f
2 arquivos alterados com 10 adições e 2 exclusões
@@ -47,6 +47,7 @@
.set SQ_WAVE_PC_HI_TRAP_ID_SIZE , 8
.set SQ_WAVE_PC_HI_TRAP_ID_BFE , (SQ_WAVE_PC_HI_TRAP_ID_SHIFT | (SQ_WAVE_PC_HI_TRAP_ID_SIZE << 16))
.set SQ_WAVE_STATUS_HALT_SHIFT , 13
.set SQ_WAVE_STATUS_TRAP_SKIP_EXPORT_SHIFT , 18
.set SQ_WAVE_STATUS_HALT_BFE , (SQ_WAVE_STATUS_HALT_SHIFT | (1 << 16))
.set SQ_WAVE_TRAPSTS_MEM_VIOL_SHIFT , 8
.set SQ_WAVE_TRAPSTS_ILLEGAL_INST_SHIFT , 11
@@ -64,6 +65,7 @@
.set EC_QUEUE_WAVE_MEMORY_VIOLATION_M0 , (1 << (DOORBELL_ID_SIZE + 4))
.set EC_QUEUE_WAVE_APERTURE_VIOLATION_M0 , (1 << (DOORBELL_ID_SIZE + 5))
.set TTMP6_SPI_TTMPS_SETUP_DISABLED_SHIFT , 31
.set TTMP6_WAVE_STOPPED_SHIFT , 30
.set TTMP6_SAVED_STATUS_HALT_SHIFT , 29
.set TTMP6_SAVED_STATUS_HALT_MASK , (1 << TTMP6_SAVED_STATUS_HALT_SHIFT)
@@ -243,12 +245,16 @@ trap_entry:
// Halt the wavefront upon restoring STATUS below.
s_bitset1_b32 ttmp6, TTMP6_WAVE_STOPPED_SHIFT
s_bitset1_b32 ttmp12, SQ_WAVE_STATUS_HALT_SHIFT
// Set WAVE.SKIP_EXPORT as a maker so the debugger knows the trap handler was
// entered and has decided to halt the wavee.
s_bitset1_b32 ttmp12, SQ_WAVE_STATUS_TRAP_SKIP_EXPORT_SHIFT
.if (.amdgcn.gfx_generation_number == 9 && .amdgcn.gfx_generation_minor >= 4)
s_bitcmp1_b32 ttmp11, TTMP11_TTMPS_SETUP_SHIFT
s_cbranch_scc1 .ttmps_initialized
s_mov_b32 ttmp4, 0
s_mov_b32 ttmp5, 0
s_bitset0_b32 ttmp6, TTMP6_SPI_TTMPS_SETUP_DISABLED_SHIFT
s_bitset1_b32 ttmp11, TTMP11_TTMPS_SETUP_SHIFT
.ttmps_initialized:
.endif