On 31-03-2026 19:16, Alex Deucher wrote:
> On Tue, Mar 31, 2026 at 9:41 AM Ramalingeswara Reddy, Kanala
> <[email protected]> wrote:
>> Define and use regGOLDEN_TSC_COUNT_UPPER_smu_15_0_0 and
>> regGOLDEN_TSC_COUNT_LOWER_smu_15_0_0 for TSC upper and lower count.
>>
>> Signed-off-by: Ramalingeswara Reddy, Kanala
>> <[email protected]>
> Acked-by: Alex Deucher <[email protected]>
Reviewed-by: Pratik Vishwakarma <[email protected]>
>
>> ---
>> drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c | 31 +++++++++++++++++++++-----
>> 1 file changed, 26 insertions(+), 5 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c
>> b/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c
>> index ae39b9e1f7d6..a40479fb00f9 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c
>> @@ -64,6 +64,11 @@
>> #define regPC_CONFIG_CNTL_1 0x194d
>> #define regPC_CONFIG_CNTL_1_BASE_IDX 1
>>
>> +#define regGOLDEN_TSC_COUNT_UPPER_smu_15_0_0 0x0030
>> +#define regGOLDEN_TSC_COUNT_UPPER_smu_15_0_0_BASE_IDX 1
>> +#define regGOLDEN_TSC_COUNT_LOWER_smu_15_0_0 0x0031
>> +#define regGOLDEN_TSC_COUNT_LOWER_smu_15_0_0_BASE_IDX 1
>> +
>> #define regCP_GFX_MQD_CONTROL_DEFAULT
>> 0x00000100
>> #define regCP_GFX_HQD_VMID_DEFAULT
>> 0x00000000
>> #define regCP_GFX_HQD_QUEUE_PRIORITY_DEFAULT
>> 0x00000000
>> @@ -5234,11 +5239,27 @@ static uint64_t
>> gfx_v11_0_get_gpu_clock_counter(struct amdgpu_device *adev)
>> 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);
>> + if (amdgpu_ip_version(adev, SMUIO_HWIP, 0) < IP_VERSION(15,
>> 0, 0)) {
>> + 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);
>> + } else {
>> + clock_counter_hi_pre = (uint64_t)RREG32_SOC15(SMUIO,
>> 0,
>> +
>> regGOLDEN_TSC_COUNT_UPPER_smu_15_0_0);
>> + clock_counter_lo = (uint64_t)RREG32_SOC15(SMUIO, 0,
>> +
>> regGOLDEN_TSC_COUNT_LOWER_smu_15_0_0);
>> + clock_counter_hi_after =
>> (uint64_t)RREG32_SOC15(SMUIO, 0,
>> +
>> regGOLDEN_TSC_COUNT_UPPER_smu_15_0_0);
>> + if (clock_counter_hi_pre != clock_counter_hi_after)
>> + clock_counter_lo =
>> (uint64_t)RREG32_SOC15(SMUIO, 0,
>> +
>> regGOLDEN_TSC_COUNT_LOWER_smu_15_0_0);
>> + }
>> preempt_enable();
>> }
>> clock = clock_counter_lo | (clock_counter_hi_after << 32ULL);
>> --
>> 2.53.0
>>