[PATCH 13/24] drm/amdgpu: add sq host trap status check
Yat Sin, David
David.YatSin at amd.com
Fri Nov 10 19:07:26 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 13/24] drm/amdgpu: add sq host trap status check
>
> Before fire a new host trap, check the host trap status.
>
> Signed-off-by: James Zhu <James.Zhu at amd.com>
> ---
> .../gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c | 35
> +++++++++++++++++++
> .../amd/include/asic_reg/gc/gc_9_0_offset.h | 2 ++
> .../amd/include/asic_reg/gc/gc_9_0_sh_mask.h | 5 +++
> 3 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 740d8a0c9252..2c5bbbb7e34e 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,35 @@ void
> kgd_gfx_v9_program_trap_handler_settings(struct amdgpu_device *adev,
> kgd_gfx_v9_unlock_srbm(adev, inst);
> }
>
> +static uint32_t kgd_aldebaran_get_hosttrap_status(struct amdgpu_device
> +*adev) {
> + uint32_t sq_hosttrap_status;
Initialize to 0. Some static code analyzers may raise warning because it is possible to return an uninitialized value.
Regards,
David
> + int i, j;
> +
> + mutex_lock(&adev->grbm_idx_mutex);
> + for (i = 0; i < adev->gfx.config.max_shader_engines; i++) {
> + for (j = 0; j < adev->gfx.config.max_sh_per_se; j++) {
> + amdgpu_gfx_select_se_sh(adev, i, j, 0xffffffff, 0);
> + sq_hosttrap_status = RREG32_SOC15(GC, 0,
> mmSQ_HOSTTRAP_STATUS);
> +
> + if (sq_hosttrap_status &
> SQ_HOSTTRAP_STATUS__HTPENDING_OVERRIDE_MASK) {
> + WREG32_SOC15(GC, 0,
> mmSQ_HOSTTRAP_STATUS,
> +
> SQ_HOSTTRAP_STATUS__HTPENDING_OVERRIDE_MASK);
> + sq_hosttrap_status = 0x0;
> + continue;
> + }
> + if (sq_hosttrap_status)
> + goto out;
> + }
> + }
> +
> +out:
> + amdgpu_gfx_select_se_sh(adev, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
> 0);
> + mutex_unlock(&adev->grbm_idx_mutex);
> +
> + return sq_hosttrap_status;
> +}
> +
> uint32_t kgd_gfx_v9_trigger_pc_sample_trap(struct amdgpu_device *adev,
> uint32_t vmid,
> uint32_t max_wave_slot,
> @@ -1156,6 +1185,12 @@ uint32_t
> kgd_gfx_v9_trigger_pc_sample_trap(struct amdgpu_device *adev, {
> if (method == KFD_IOCTL_PCS_METHOD_HOSTTRAP) {
> uint32_t value = 0;
> + uint32_t sq_hosttrap_status;
> +
> + sq_hosttrap_status = kgd_aldebaran_get_hosttrap_status(adev);
> + /* skip when last host trap request is still pending to complete
> */
> + if (sq_hosttrap_status)
> + return 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); diff --git
> a/drivers/gpu/drm/amd/include/asic_reg/gc/gc_9_0_offset.h
> b/drivers/gpu/drm/amd/include/asic_reg/gc/gc_9_0_offset.h
> index 12d451e5475b..5b17d9066452 100644
> --- a/drivers/gpu/drm/amd/include/asic_reg/gc/gc_9_0_offset.h
> +++ b/drivers/gpu/drm/amd/include/asic_reg/gc/gc_9_0_offset.h
> @@ -462,6 +462,8 @@
> #define mmSQ_IND_DATA_BASE_IDX
> 0
> #define mmSQ_CMD 0x037b
> #define mmSQ_CMD_BASE_IDX 0
> +#define mmSQ_HOSTTRAP_STATUS
> 0x0376
> +#define mmSQ_HOSTTRAP_STATUS_BASE_IDX
> 0
> #define mmSQ_TIME_HI 0x037c
> #define mmSQ_TIME_HI_BASE_IDX 0
> #define mmSQ_TIME_LO
> 0x037d
> diff --git a/drivers/gpu/drm/amd/include/asic_reg/gc/gc_9_0_sh_mask.h
> b/drivers/gpu/drm/amd/include/asic_reg/gc/gc_9_0_sh_mask.h
> index efc16ddf274a..3dfe4ab31421 100644
> --- a/drivers/gpu/drm/amd/include/asic_reg/gc/gc_9_0_sh_mask.h
> +++ b/drivers/gpu/drm/amd/include/asic_reg/gc/gc_9_0_sh_mask.h
> @@ -2616,6 +2616,11 @@
> //SQ_CMD_TIMESTAMP
> #define SQ_CMD_TIMESTAMP__TIMESTAMP__SHIFT
> 0x0
> #define SQ_CMD_TIMESTAMP__TIMESTAMP_MASK
> 0x000000FFL
> +//SQ_HOSTTRAP_STATUS
> +#define SQ_HOSTTRAP_STATUS__HTPENDINGCOUNT__SHIFT
> 0x0
> +#define SQ_HOSTTRAP_STATUS__HTPENDING_OVERRIDE__SHIFT
> 0x8
> +#define SQ_HOSTTRAP_STATUS__HTPENDINGCOUNT_MASK
> 0x000000FFL
> +#define SQ_HOSTTRAP_STATUS__HTPENDING_OVERRIDE_MASK
> 0x00000100L
> //SQ_IND_INDEX
> #define SQ_IND_INDEX__WAVE_ID__SHIFT
> 0x0
> #define SQ_IND_INDEX__SIMD_ID__SHIFT
> 0x4
> --
> 2.25.1
More information about the amd-gfx
mailing list