diff --git a/runtime/hsa-runtime/core/runtime/trap_handler/trap_handler.s b/runtime/hsa-runtime/core/runtime/trap_handler/trap_handler.s index fdbbfabfe7..1803f4fa10 100644 --- a/runtime/hsa-runtime/core/runtime/trap_handler/trap_handler.s +++ b/runtime/hsa-runtime/core/runtime/trap_handler/trap_handler.s @@ -225,7 +225,7 @@ trap_entry: // // ttmp7: pc_lo[31:0] // ttmp11: 1st_level_ttmp11[31:23] pc_hi[15:0] 1st_level_ttmp11[6:0] -.if (.amdgcn.gfx_generation_number == 9 && .amdgcn.gfx_generation_minor < 4) || (.amdgcn.gfx_generation_number == 10 && .amdgcn.gfx_generation_minor < 3) +.if (.amdgcn.gfx_generation_number == 9 && .amdgcn.gfx_generation_minor < 4) || (.amdgcn.gfx_generation_number == 10 && .amdgcn.gfx_generation_minor < 3) || (.amdgcn.gfx_generation_number == 11) // Save the PC s_mov_b32 ttmp7, ttmp0 s_and_b32 ttmp1, ttmp1, SQ_WAVE_PC_HI_ADDRESS_MASK @@ -283,3 +283,11 @@ trap_entry: .parked: s_trap 0x2 s_branch .parked + +// For gfx11, add padding instructions so we can ensure instruction cache +// prefetch always has something to load. +.if .amdgcn.gfx_generation_number == 11 +.rept (256 - ((. - trap_entry) % 64)) / 4 + s_code_end +.endr +.endif diff --git a/runtime/hsa-runtime/loader/executable.cpp b/runtime/hsa-runtime/loader/executable.cpp index b659d757e5..2a3b96f243 100644 --- a/runtime/hsa-runtime/loader/executable.cpp +++ b/runtime/hsa-runtime/loader/executable.cpp @@ -80,8 +80,9 @@ __attribute__((noinline)) static void _loader_debug_state() { // 5: New trap handler ABI. Save the PC in ttmp11[22:7] ttmp6[31:0], and park the wave if stopped // 6: New trap handler ABI. ttmp6[25:0] contains dispatch index modulo queue size // 7: New trap handler ABI. Send interrupts as a bitmask, coalescing concurrent exceptions. -// 8: New trap handler ABI for gfx940: Initialize ttmp[4:5] if ttmp11[31] == 0. -HSA_API r_debug _amdgpu_r_debug = {8, +// 8: New trap handler ABI. for gfx940: Initialize ttmp[4:5] if ttmp11[31] == 0. +// 9: New trap handler API. For gfx11: Save PC in ttmp11[22:7] ttmp6[31:0], and park the wave if stopped. +HSA_API r_debug _amdgpu_r_debug = {9, nullptr, reinterpret_cast(&_loader_debug_state), r_debug::RT_CONSISTENT,