@@ -543,6 +543,23 @@ static int smu_v13_0_0_set_default_dpm_table(struct smu_context *smu)
543
543
dpm_table );
544
544
if (ret )
545
545
return ret ;
546
+
547
+ /*
548
+ * Update the reported maximum shader clock to the value
549
+ * which can be guarded to be achieved on all cards. This
550
+ * is aligned with Window setting. And considering that value
551
+ * might be not the peak frequency the card can achieve, it
552
+ * is normal some real-time clock frequency can overtake this
553
+ * labelled maximum clock frequency(for example in pp_dpm_sclk
554
+ * sysfs output).
555
+ */
556
+ if (skutable -> DriverReportedClocks .GameClockAc &&
557
+ (dpm_table -> dpm_levels [dpm_table -> count - 1 ].value >
558
+ skutable -> DriverReportedClocks .GameClockAc )) {
559
+ dpm_table -> dpm_levels [dpm_table -> count - 1 ].value =
560
+ skutable -> DriverReportedClocks .GameClockAc ;
561
+ dpm_table -> max = skutable -> DriverReportedClocks .GameClockAc ;
562
+ }
546
563
} else {
547
564
dpm_table -> count = 1 ;
548
565
dpm_table -> dpm_levels [0 ].value = smu -> smu_table .boot_values .gfxclk / 100 ;
@@ -805,6 +822,57 @@ static int smu_v13_0_0_get_smu_metrics_data(struct smu_context *smu,
805
822
return ret ;
806
823
}
807
824
825
+ static int smu_v13_0_0_get_dpm_ultimate_freq (struct smu_context * smu ,
826
+ enum smu_clk_type clk_type ,
827
+ uint32_t * min ,
828
+ uint32_t * max )
829
+ {
830
+ struct smu_13_0_dpm_context * dpm_context =
831
+ smu -> smu_dpm .dpm_context ;
832
+ struct smu_13_0_dpm_table * dpm_table ;
833
+
834
+ switch (clk_type ) {
835
+ case SMU_MCLK :
836
+ case SMU_UCLK :
837
+ /* uclk dpm table */
838
+ dpm_table = & dpm_context -> dpm_tables .uclk_table ;
839
+ break ;
840
+ case SMU_GFXCLK :
841
+ case SMU_SCLK :
842
+ /* gfxclk dpm table */
843
+ dpm_table = & dpm_context -> dpm_tables .gfx_table ;
844
+ break ;
845
+ case SMU_SOCCLK :
846
+ /* socclk dpm table */
847
+ dpm_table = & dpm_context -> dpm_tables .soc_table ;
848
+ break ;
849
+ case SMU_FCLK :
850
+ /* fclk dpm table */
851
+ dpm_table = & dpm_context -> dpm_tables .fclk_table ;
852
+ break ;
853
+ case SMU_VCLK :
854
+ case SMU_VCLK1 :
855
+ /* vclk dpm table */
856
+ dpm_table = & dpm_context -> dpm_tables .vclk_table ;
857
+ break ;
858
+ case SMU_DCLK :
859
+ case SMU_DCLK1 :
860
+ /* dclk dpm table */
861
+ dpm_table = & dpm_context -> dpm_tables .dclk_table ;
862
+ break ;
863
+ default :
864
+ dev_err (smu -> adev -> dev , "Unsupported clock type!\n" );
865
+ return - EINVAL ;
866
+ }
867
+
868
+ if (min )
869
+ * min = dpm_table -> min ;
870
+ if (max )
871
+ * max = dpm_table -> max ;
872
+
873
+ return 0 ;
874
+ }
875
+
808
876
static int smu_v13_0_0_read_sensor (struct smu_context * smu ,
809
877
enum amd_pp_sensors sensor ,
810
878
void * data ,
@@ -1910,7 +1978,7 @@ static const struct pptable_funcs smu_v13_0_0_ppt_funcs = {
1910
1978
.get_enabled_mask = smu_cmn_get_enabled_mask ,
1911
1979
.dpm_set_vcn_enable = smu_v13_0_set_vcn_enable ,
1912
1980
.dpm_set_jpeg_enable = smu_v13_0_set_jpeg_enable ,
1913
- .get_dpm_ultimate_freq = smu_v13_0_get_dpm_ultimate_freq ,
1981
+ .get_dpm_ultimate_freq = smu_v13_0_0_get_dpm_ultimate_freq ,
1914
1982
.get_vbios_bootup_values = smu_v13_0_get_vbios_bootup_values ,
1915
1983
.read_sensor = smu_v13_0_0_read_sensor ,
1916
1984
.feature_is_enabled = smu_cmn_feature_is_enabled ,
0 commit comments