Skip to content

Commit 2d0ee64

Browse files
timhuang-amdalexdeucher
authored andcommitted
drm/amd/pm: enable vclk and dclk Pstates for SMU v13.0.4
Add the ability to control the vclk and dclk frequency by power_dpm_force_performance_level interface. Signed-off-by: Tim Huang <Tim.Huang@amd.com> Acked-by: Alex Deucher <alexander.deucher@amd.com> Reviewed-by: Yifan Zhang <yifan1.zhang@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
1 parent 27d196c commit 2d0ee64

1 file changed

Lines changed: 29 additions & 0 deletions

File tree

drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_4_ppt.c

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -915,29 +915,41 @@ static int smu_v13_0_4_set_performance_level(struct smu_context *smu,
915915
uint32_t sclk_min = 0, sclk_max = 0;
916916
uint32_t fclk_min = 0, fclk_max = 0;
917917
uint32_t socclk_min = 0, socclk_max = 0;
918+
uint32_t vclk_min = 0, vclk_max = 0;
919+
uint32_t dclk_min = 0, dclk_max = 0;
918920
int ret = 0;
919921

920922
switch (level) {
921923
case AMD_DPM_FORCED_LEVEL_HIGH:
922924
smu_v13_0_4_get_dpm_ultimate_freq(smu, SMU_SCLK, NULL, &sclk_max);
923925
smu_v13_0_4_get_dpm_ultimate_freq(smu, SMU_FCLK, NULL, &fclk_max);
924926
smu_v13_0_4_get_dpm_ultimate_freq(smu, SMU_SOCCLK, NULL, &socclk_max);
927+
smu_v13_0_4_get_dpm_ultimate_freq(smu, SMU_VCLK, NULL, &vclk_max);
928+
smu_v13_0_4_get_dpm_ultimate_freq(smu, SMU_DCLK, NULL, &dclk_max);
925929
sclk_min = sclk_max;
926930
fclk_min = fclk_max;
927931
socclk_min = socclk_max;
932+
vclk_min = vclk_max;
933+
dclk_min = dclk_max;
928934
break;
929935
case AMD_DPM_FORCED_LEVEL_LOW:
930936
smu_v13_0_4_get_dpm_ultimate_freq(smu, SMU_SCLK, &sclk_min, NULL);
931937
smu_v13_0_4_get_dpm_ultimate_freq(smu, SMU_FCLK, &fclk_min, NULL);
932938
smu_v13_0_4_get_dpm_ultimate_freq(smu, SMU_SOCCLK, &socclk_min, NULL);
939+
smu_v13_0_4_get_dpm_ultimate_freq(smu, SMU_VCLK, &vclk_min, NULL);
940+
smu_v13_0_4_get_dpm_ultimate_freq(smu, SMU_DCLK, &dclk_min, NULL);
933941
sclk_max = sclk_min;
934942
fclk_max = fclk_min;
935943
socclk_max = socclk_min;
944+
vclk_max = vclk_min;
945+
dclk_max = dclk_min;
936946
break;
937947
case AMD_DPM_FORCED_LEVEL_AUTO:
938948
smu_v13_0_4_get_dpm_ultimate_freq(smu, SMU_SCLK, &sclk_min, &sclk_max);
939949
smu_v13_0_4_get_dpm_ultimate_freq(smu, SMU_FCLK, &fclk_min, &fclk_max);
940950
smu_v13_0_4_get_dpm_ultimate_freq(smu, SMU_SOCCLK, &socclk_min, &socclk_max);
951+
smu_v13_0_4_get_dpm_ultimate_freq(smu, SMU_VCLK, &vclk_min, &vclk_max);
952+
smu_v13_0_4_get_dpm_ultimate_freq(smu, SMU_DCLK, &dclk_min, &dclk_max);
941953
break;
942954
case AMD_DPM_FORCED_LEVEL_PROFILE_STANDARD:
943955
case AMD_DPM_FORCED_LEVEL_PROFILE_MIN_SCLK:
@@ -983,6 +995,23 @@ static int smu_v13_0_4_set_performance_level(struct smu_context *smu,
983995
return ret;
984996
}
985997

998+
if (vclk_min && vclk_max) {
999+
ret = smu_v13_0_4_set_soft_freq_limited_range(smu,
1000+
SMU_VCLK,
1001+
vclk_min,
1002+
vclk_max);
1003+
if (ret)
1004+
return ret;
1005+
}
1006+
1007+
if (dclk_min && dclk_max) {
1008+
ret = smu_v13_0_4_set_soft_freq_limited_range(smu,
1009+
SMU_DCLK,
1010+
dclk_min,
1011+
dclk_max);
1012+
if (ret)
1013+
return ret;
1014+
}
9861015
return ret;
9871016
}
9881017

0 commit comments

Comments
 (0)