[PATCH 10/24] drm/amdkfd: trigger pc sampling trap for gfx v9
Yat Sin, David
David.YatSin at amd.com
Fri Nov 10 19:08:50 UTC 2023
[AMD Official Use Only - General]
> -----Original Message-----
> From: Zhu, James <James.Zhu at amd.com>
> Sent: Friday, November 3, 2023 9:11 AM
> To: amd-gfx at lists.freedesktop.org
> Cc: Kuehling, Felix <Felix.Kuehling at amd.com>; Greathouse, Joseph
> <Joseph.Greathouse at amd.com>; Yat Sin, David <David.YatSin at amd.com>; Zhu,
> James <James.Zhu at amd.com>
> Subject: [PATCH 10/24] drm/amdkfd: trigger pc sampling trap for gfx v9
>
> Implement trigger pc sampling trap for gfx v9.
>
> Signed-off-by: James Zhu <James.Zhu at amd.com>
> ---
> .../gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c | 35
> +++++++++++++++++++ .../gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.h
> | 7 ++++
> 2 files changed, 42 insertions(+)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c
> index 51011e8ee90d..723fef2d45d6 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c
> @@ -1146,6 +1146,41 @@ void
> kgd_gfx_v9_program_trap_handler_settings(struct amdgpu_device *adev,
> kgd_gfx_v9_unlock_srbm(adev, inst);
> }
>
> +uint32_t kgd_gfx_v9_trigger_pc_sample_trap(struct amdgpu_device *adev,
> + uint32_t vmid,
> + uint32_t max_wave_slot,
> + uint32_t max_simd,
> + uint32_t *target_simd,
> + uint32_t *target_wave_slot,
> + enum kfd_ioctl_pc_sample_method
> method) {
Function should return void if it will always return 0.
> + if (method == KFD_IOCTL_PCS_METHOD_HOSTTRAP) {
> + uint32_t value = 0;
> +
> + value = REG_SET_FIELD(value, SQ_CMD, CMD,
> SQ_IND_CMD_CMD_TRAP);
> + value = REG_SET_FIELD(value, SQ_CMD, MODE,
> SQ_IND_CMD_MODE_SINGLE);
> +
> + /* select *target_simd */
> + value = REG_SET_FIELD(value, SQ_CMD, SIMD_ID, *target_simd);
> + /* select *target_wave_slot */
> + value = REG_SET_FIELD(value, SQ_CMD, WAVE_ID,
> (*target_wave_slot)++);
> +
> + mutex_lock(&adev->grbm_idx_mutex);
> + amdgpu_gfx_select_se_sh(adev, 0xFFFFFFFF, 0xFFFFFFFF,
> 0xFFFFFFFF, 0);
> + WREG32_SOC15(GC, 0, mmSQ_CMD, value);
> + mutex_unlock(&adev->grbm_idx_mutex);
> +
> + *target_wave_slot %= max_wave_slot;
> + if (!(*target_wave_slot)) {
> + (*target_simd)++;
> + *target_simd %= max_simd;
> + }
> + } else {
> + pr_debug("PC Sampling method %d not supported.", method);
> + }
> + return 0;
> +}
> +
> const struct kfd2kgd_calls gfx_v9_kfd2kgd = {
> .program_sh_mem_settings = kgd_gfx_v9_program_sh_mem_settings,
> .set_pasid_vmid_mapping = kgd_gfx_v9_set_pasid_vmid_mapping,
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.h
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.h
> index ce424615f59b..b47b926891a8 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.h
> @@ -101,3 +101,10 @@ void
> kgd_gfx_v9_build_grace_period_packet_info(struct amdgpu_device *adev,
> uint32_t grace_period,
> uint32_t *reg_offset,
> uint32_t *reg_data);
> +uint32_t kgd_gfx_v9_trigger_pc_sample_trap(struct amdgpu_device *adev,
> + uint32_t vmid,
> + uint32_t max_wave_slot,
> + uint32_t max_simd,
> + uint32_t *target_simd,
> + uint32_t *target_wave_slot,
> + enum kfd_ioctl_pc_sample_method
> method);
> --
> 2.25.1
More information about the amd-gfx
mailing list