[PATCH V2] drm/amdgpu/gfx11: update gpu_clock_counter logic
Alex Deucher
alexdeucher at gmail.com
Thu Apr 20 18:12:57 UTC 2023
Ping?
On Tue, Apr 11, 2023 at 5:14 PM Alex Deucher <alexander.deucher at amd.com> wrote:
>
> This code was written prior to previous updates to this
> logic for other chips. The RSC registers are part of
> SMUIO which is an always on block so there is no need
> to disable gfxoff. Additionally add the carryover and
> preemption checks.
>
> v2: rebase
>
> Signed-off-by: Alex Deucher <alexander.deucher at amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c | 11 +++++++----
> 1 file changed, 7 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c
> index 107c487c0c37..00a06d353abd 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c
> @@ -4673,24 +4673,27 @@ static uint64_t gfx_v11_0_get_gpu_clock_counter(struct amdgpu_device *adev)
> uint64_t clock;
> uint64_t clock_counter_lo, clock_counter_hi_pre, clock_counter_hi_after;
>
> - amdgpu_gfx_off_ctrl(adev, false);
> - mutex_lock(&adev->gfx.gpu_clock_mutex);
> if (amdgpu_sriov_vf(adev)) {
> + amdgpu_gfx_off_ctrl(adev, false);
> + mutex_lock(&adev->gfx.gpu_clock_mutex);
> clock_counter_hi_pre = (uint64_t)RREG32_SOC15(GC, 0, regCP_MES_MTIME_HI);
> clock_counter_lo = (uint64_t)RREG32_SOC15(GC, 0, regCP_MES_MTIME_LO);
> clock_counter_hi_after = (uint64_t)RREG32_SOC15(GC, 0, regCP_MES_MTIME_HI);
> if (clock_counter_hi_pre != clock_counter_hi_after)
> clock_counter_lo = (uint64_t)RREG32_SOC15(GC, 0, regCP_MES_MTIME_LO);
> + mutex_unlock(&adev->gfx.gpu_clock_mutex);
> + amdgpu_gfx_off_ctrl(adev, true);
> } else {
> + preempt_disable();
> clock_counter_hi_pre = (uint64_t)RREG32_SOC15(SMUIO, 0, regGOLDEN_TSC_COUNT_UPPER);
> clock_counter_lo = (uint64_t)RREG32_SOC15(SMUIO, 0, regGOLDEN_TSC_COUNT_LOWER);
> clock_counter_hi_after = (uint64_t)RREG32_SOC15(SMUIO, 0, regGOLDEN_TSC_COUNT_UPPER);
> if (clock_counter_hi_pre != clock_counter_hi_after)
> clock_counter_lo = (uint64_t)RREG32_SOC15(SMUIO, 0, regGOLDEN_TSC_COUNT_LOWER);
> + preempt_enable();
> }
> clock = clock_counter_lo | (clock_counter_hi_after << 32ULL);
> - mutex_unlock(&adev->gfx.gpu_clock_mutex);
> - amdgpu_gfx_off_ctrl(adev, true);
> +
> return clock;
> }
>
> --
> 2.39.2
>
More information about the amd-gfx
mailing list