Skip to content

Commit f03eb1d

Browse files
Jie1zhangalexdeucher
authored andcommitted
drm/amdgpu: switch to golden tsc registers for raven/raven2
Due to raven/raven2 maybe enable  sclk slow down, they cannot get clock count by the RLC at the auto level of dpm performance. So switch to golden tsc register. Suggested-by: shanshengwang <shansheng.wang@amd.com> Reviewed-by: Evan Quan <evan.quan@amd.com> Signed-off-by: Jesse Zhang <jesse.zhang@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
1 parent 6fe2ecd commit f03eb1d

1 file changed

Lines changed: 40 additions & 0 deletions

File tree

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

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,16 @@ MODULE_FIRMWARE("amdgpu/aldebaran_sjt_mec2.bin");
149149
#define mmGOLDEN_TSC_COUNT_LOWER_Renoir 0x0026
150150
#define mmGOLDEN_TSC_COUNT_LOWER_Renoir_BASE_IDX 1
151151

152+
#define mmGOLDEN_TSC_COUNT_UPPER_Raven 0x007a
153+
#define mmGOLDEN_TSC_COUNT_UPPER_Raven_BASE_IDX 0
154+
#define mmGOLDEN_TSC_COUNT_LOWER_Raven 0x007b
155+
#define mmGOLDEN_TSC_COUNT_LOWER_Raven_BASE_IDX 0
156+
157+
#define mmGOLDEN_TSC_COUNT_UPPER_Raven2 0x0068
158+
#define mmGOLDEN_TSC_COUNT_UPPER_Raven2_BASE_IDX 0
159+
#define mmGOLDEN_TSC_COUNT_LOWER_Raven2 0x0069
160+
#define mmGOLDEN_TSC_COUNT_LOWER_Raven2_BASE_IDX 0
161+
152162
enum ta_ras_gfx_subblock {
153163
/*CPC*/
154164
TA_RAS_BLOCK__GFX_CPC_INDEX_START = 0,
@@ -3988,6 +3998,36 @@ static uint64_t gfx_v9_0_get_gpu_clock_counter(struct amdgpu_device *adev)
39883998
preempt_enable();
39893999
clock = clock_lo | (clock_hi << 32ULL);
39904000
break;
4001+
case IP_VERSION(9, 1, 0):
4002+
preempt_disable();
4003+
clock_hi = RREG32_SOC15_NO_KIQ(PWR, 0, mmGOLDEN_TSC_COUNT_UPPER_Raven);
4004+
clock_lo = RREG32_SOC15_NO_KIQ(PWR, 0, mmGOLDEN_TSC_COUNT_LOWER_Raven);
4005+
hi_check = RREG32_SOC15_NO_KIQ(PWR, 0, mmGOLDEN_TSC_COUNT_UPPER_Raven);
4006+
/* The PWR TSC clock frequency is 100MHz, which sets 32-bit carry over
4007+
* roughly every 42 seconds.
4008+
*/
4009+
if (hi_check != clock_hi) {
4010+
clock_lo = RREG32_SOC15_NO_KIQ(PWR, 0, mmGOLDEN_TSC_COUNT_LOWER_Raven);
4011+
clock_hi = hi_check;
4012+
}
4013+
preempt_enable();
4014+
clock = clock_lo | (clock_hi << 32ULL);
4015+
break;
4016+
case IP_VERSION(9, 2, 2):
4017+
preempt_disable();
4018+
clock_hi = RREG32_SOC15_NO_KIQ(PWR, 0, mmGOLDEN_TSC_COUNT_UPPER_Raven2);
4019+
clock_lo = RREG32_SOC15_NO_KIQ(PWR, 0, mmGOLDEN_TSC_COUNT_LOWER_Raven2);
4020+
hi_check = RREG32_SOC15_NO_KIQ(PWR, 0, mmGOLDEN_TSC_COUNT_UPPER_Raven2);
4021+
/* The PWR TSC clock frequency is 100MHz, which sets 32-bit carry over
4022+
* roughly every 42 seconds.
4023+
*/
4024+
if (hi_check != clock_hi) {
4025+
clock_lo = RREG32_SOC15_NO_KIQ(PWR, 0, mmGOLDEN_TSC_COUNT_LOWER_Raven2);
4026+
clock_hi = hi_check;
4027+
}
4028+
preempt_enable();
4029+
clock = clock_lo | (clock_hi << 32ULL);
4030+
break;
39914031
default:
39924032
amdgpu_gfx_off_ctrl(adev, false);
39934033
mutex_lock(&adev->gfx.gpu_clock_mutex);

0 commit comments

Comments
 (0)