Skip to content

Commit d5aa417

Browse files
committed
drm/amdgpu/gfx11: update gpu_clock_counter logic
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 Reviewed-by: Hawking Zhang <[email protected]> Signed-off-by: Alex Deucher <[email protected]> Cc: [email protected] # 6.1.y: 5591a05: drm/amdgpu: refine get gpu clock counter method Cc: [email protected] # 6.2.y: 5591a05: drm/amdgpu: refine get gpu clock counter method Cc: [email protected] # 6.3.y: 5591a05: drm/amdgpu: refine get gpu clock counter method
1 parent f1fcbaa commit d5aa417

File tree

1 file changed

+7
-4
lines changed

1 file changed

+7
-4
lines changed

drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4667,24 +4667,27 @@ static uint64_t gfx_v11_0_get_gpu_clock_counter(struct amdgpu_device *adev)
46674667
uint64_t clock;
46684668
uint64_t clock_counter_lo, clock_counter_hi_pre, clock_counter_hi_after;
46694669

4670-
amdgpu_gfx_off_ctrl(adev, false);
4671-
mutex_lock(&adev->gfx.gpu_clock_mutex);
46724670
if (amdgpu_sriov_vf(adev)) {
4671+
amdgpu_gfx_off_ctrl(adev, false);
4672+
mutex_lock(&adev->gfx.gpu_clock_mutex);
46734673
clock_counter_hi_pre = (uint64_t)RREG32_SOC15(GC, 0, regCP_MES_MTIME_HI);
46744674
clock_counter_lo = (uint64_t)RREG32_SOC15(GC, 0, regCP_MES_MTIME_LO);
46754675
clock_counter_hi_after = (uint64_t)RREG32_SOC15(GC, 0, regCP_MES_MTIME_HI);
46764676
if (clock_counter_hi_pre != clock_counter_hi_after)
46774677
clock_counter_lo = (uint64_t)RREG32_SOC15(GC, 0, regCP_MES_MTIME_LO);
4678+
mutex_unlock(&adev->gfx.gpu_clock_mutex);
4679+
amdgpu_gfx_off_ctrl(adev, true);
46784680
} else {
4681+
preempt_disable();
46794682
clock_counter_hi_pre = (uint64_t)RREG32_SOC15(SMUIO, 0, regGOLDEN_TSC_COUNT_UPPER);
46804683
clock_counter_lo = (uint64_t)RREG32_SOC15(SMUIO, 0, regGOLDEN_TSC_COUNT_LOWER);
46814684
clock_counter_hi_after = (uint64_t)RREG32_SOC15(SMUIO, 0, regGOLDEN_TSC_COUNT_UPPER);
46824685
if (clock_counter_hi_pre != clock_counter_hi_after)
46834686
clock_counter_lo = (uint64_t)RREG32_SOC15(SMUIO, 0, regGOLDEN_TSC_COUNT_LOWER);
4687+
preempt_enable();
46844688
}
46854689
clock = clock_counter_lo | (clock_counter_hi_after << 32ULL);
4686-
mutex_unlock(&adev->gfx.gpu_clock_mutex);
4687-
amdgpu_gfx_off_ctrl(adev, true);
4690+
46884691
return clock;
46894692
}
46904693

0 commit comments

Comments
 (0)