Message ID | 20230125195401.4183544-11-jonathan.kim@amd.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Upstream of kernel support for AMDGPU ISA debugging | expand |
On 2023-01-25 14:53, Jonathan Kim wrote: > Implement the per-device calls to enable or disable HW debug mode > for GFX11. > > Signed-off-by: Jonathan Kim <jonathan.kim@amd.com> > --- > .../drm/amd/amdgpu/amdgpu_amdkfd_gfx_v11.c | 39 +++++++++++++++++++ > 1 file changed, 39 insertions(+) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v11.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v11.c > index 7e80caa05060..34aeff692eba 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v11.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v11.c > @@ -30,6 +30,7 @@ > #include "soc15d.h" > #include "v11_structs.h" > #include "soc21.h" > +#include <uapi/linux/kfd_ioctl.h> What is this needed for? Maybe for a later patch? > > enum hqd_dequeue_request_type { > NO_ACTION = 0, > @@ -606,6 +607,42 @@ static void set_vm_context_page_table_base_v11(struct amdgpu_device *adev, > adev->gfxhub.funcs->setup_vm_pt_regs(adev, vmid, page_table_base); > } > > +/** Use /* here. > + * Returns TRAP_EN, EXCP_EN and EXCP_REPLACE. > + * > + * restore_dbg_reisters is ignored here but is a general interface requirement Typo: registers With those fixed, the patch is Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com> > + * for devices that support GFXOFF and where the RLC save/restore list > + * does not support hw registers for debugging i.e. the driver has to manually > + * initialize the debug mode registers after it has disabled GFX off during the > + * debug session. > + */ > +static uint32_t kgd_gfx_v11_enable_debug_trap(struct amdgpu_device *adev, > + bool restore_dbg_registers, > + uint32_t vmid) > +{ > + uint32_t data = 0; > + > + data = REG_SET_FIELD(data, SPI_GDBG_PER_VMID_CNTL, TRAP_EN, 1); > + data = REG_SET_FIELD(data, SPI_GDBG_PER_VMID_CNTL, EXCP_EN, 0); > + data = REG_SET_FIELD(data, SPI_GDBG_PER_VMID_CNTL, EXCP_REPLACE, 0); > + > + return data; > +} > + > +/* Returns TRAP_EN, EXCP_EN and EXCP_REPLACE. */ > +static uint32_t kgd_gfx_v11_disable_debug_trap(struct amdgpu_device *adev, > + bool keep_trap_enabled, > + uint32_t vmid) > +{ > + uint32_t data = 0; > + > + data = REG_SET_FIELD(data, SPI_GDBG_PER_VMID_CNTL, TRAP_EN, keep_trap_enabled); > + data = REG_SET_FIELD(data, SPI_GDBG_PER_VMID_CNTL, EXCP_EN, 0); > + data = REG_SET_FIELD(data, SPI_GDBG_PER_VMID_CNTL, EXCP_REPLACE, 0); > + > + return data; > +} > + > const struct kfd2kgd_calls gfx_v11_kfd2kgd = { > .program_sh_mem_settings = program_sh_mem_settings_v11, > .set_pasid_vmid_mapping = set_pasid_vmid_mapping_v11, > @@ -622,4 +659,6 @@ const struct kfd2kgd_calls gfx_v11_kfd2kgd = { > .wave_control_execute = wave_control_execute_v11, > .get_atc_vmid_pasid_mapping_info = NULL, > .set_vm_context_page_table_base = set_vm_context_page_table_base_v11, > + .enable_debug_trap = kgd_gfx_v11_enable_debug_trap, > + .disable_debug_trap = kgd_gfx_v11_disable_debug_trap > };
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v11.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v11.c index 7e80caa05060..34aeff692eba 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v11.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v11.c @@ -30,6 +30,7 @@ #include "soc15d.h" #include "v11_structs.h" #include "soc21.h" +#include <uapi/linux/kfd_ioctl.h> enum hqd_dequeue_request_type { NO_ACTION = 0, @@ -606,6 +607,42 @@ static void set_vm_context_page_table_base_v11(struct amdgpu_device *adev, adev->gfxhub.funcs->setup_vm_pt_regs(adev, vmid, page_table_base); } +/** + * Returns TRAP_EN, EXCP_EN and EXCP_REPLACE. + * + * restore_dbg_reisters is ignored here but is a general interface requirement + * for devices that support GFXOFF and where the RLC save/restore list + * does not support hw registers for debugging i.e. the driver has to manually + * initialize the debug mode registers after it has disabled GFX off during the + * debug session. + */ +static uint32_t kgd_gfx_v11_enable_debug_trap(struct amdgpu_device *adev, + bool restore_dbg_registers, + uint32_t vmid) +{ + uint32_t data = 0; + + data = REG_SET_FIELD(data, SPI_GDBG_PER_VMID_CNTL, TRAP_EN, 1); + data = REG_SET_FIELD(data, SPI_GDBG_PER_VMID_CNTL, EXCP_EN, 0); + data = REG_SET_FIELD(data, SPI_GDBG_PER_VMID_CNTL, EXCP_REPLACE, 0); + + return data; +} + +/* Returns TRAP_EN, EXCP_EN and EXCP_REPLACE. */ +static uint32_t kgd_gfx_v11_disable_debug_trap(struct amdgpu_device *adev, + bool keep_trap_enabled, + uint32_t vmid) +{ + uint32_t data = 0; + + data = REG_SET_FIELD(data, SPI_GDBG_PER_VMID_CNTL, TRAP_EN, keep_trap_enabled); + data = REG_SET_FIELD(data, SPI_GDBG_PER_VMID_CNTL, EXCP_EN, 0); + data = REG_SET_FIELD(data, SPI_GDBG_PER_VMID_CNTL, EXCP_REPLACE, 0); + + return data; +} + const struct kfd2kgd_calls gfx_v11_kfd2kgd = { .program_sh_mem_settings = program_sh_mem_settings_v11, .set_pasid_vmid_mapping = set_pasid_vmid_mapping_v11, @@ -622,4 +659,6 @@ const struct kfd2kgd_calls gfx_v11_kfd2kgd = { .wave_control_execute = wave_control_execute_v11, .get_atc_vmid_pasid_mapping_info = NULL, .set_vm_context_page_table_base = set_vm_context_page_table_base_v11, + .enable_debug_trap = kgd_gfx_v11_enable_debug_trap, + .disable_debug_trap = kgd_gfx_v11_disable_debug_trap };
Implement the per-device calls to enable or disable HW debug mode for GFX11. Signed-off-by: Jonathan Kim <jonathan.kim@amd.com> --- .../drm/amd/amdgpu/amdgpu_amdkfd_gfx_v11.c | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+)