@@ -575,6 +575,14 @@ static int smu_v13_0_7_set_default_dpm_table(struct smu_context *smu)
575
575
dpm_table );
576
576
if (ret )
577
577
return ret ;
578
+
579
+ if (skutable -> DriverReportedClocks .GameClockAc &&
580
+ (dpm_table -> dpm_levels [dpm_table -> count - 1 ].value >
581
+ skutable -> DriverReportedClocks .GameClockAc )) {
582
+ dpm_table -> dpm_levels [dpm_table -> count - 1 ].value =
583
+ skutable -> DriverReportedClocks .GameClockAc ;
584
+ dpm_table -> max = skutable -> DriverReportedClocks .GameClockAc ;
585
+ }
578
586
} else {
579
587
dpm_table -> count = 1 ;
580
588
dpm_table -> dpm_levels [0 ].value = smu -> smu_table .boot_values .gfxclk / 100 ;
@@ -828,6 +836,57 @@ static int smu_v13_0_7_get_smu_metrics_data(struct smu_context *smu,
828
836
return ret ;
829
837
}
830
838
839
+ static int smu_v13_0_7_get_dpm_ultimate_freq (struct smu_context * smu ,
840
+ enum smu_clk_type clk_type ,
841
+ uint32_t * min ,
842
+ uint32_t * max )
843
+ {
844
+ struct smu_13_0_dpm_context * dpm_context =
845
+ smu -> smu_dpm .dpm_context ;
846
+ struct smu_13_0_dpm_table * dpm_table ;
847
+
848
+ switch (clk_type ) {
849
+ case SMU_MCLK :
850
+ case SMU_UCLK :
851
+ /* uclk dpm table */
852
+ dpm_table = & dpm_context -> dpm_tables .uclk_table ;
853
+ break ;
854
+ case SMU_GFXCLK :
855
+ case SMU_SCLK :
856
+ /* gfxclk dpm table */
857
+ dpm_table = & dpm_context -> dpm_tables .gfx_table ;
858
+ break ;
859
+ case SMU_SOCCLK :
860
+ /* socclk dpm table */
861
+ dpm_table = & dpm_context -> dpm_tables .soc_table ;
862
+ break ;
863
+ case SMU_FCLK :
864
+ /* fclk dpm table */
865
+ dpm_table = & dpm_context -> dpm_tables .fclk_table ;
866
+ break ;
867
+ case SMU_VCLK :
868
+ case SMU_VCLK1 :
869
+ /* vclk dpm table */
870
+ dpm_table = & dpm_context -> dpm_tables .vclk_table ;
871
+ break ;
872
+ case SMU_DCLK :
873
+ case SMU_DCLK1 :
874
+ /* dclk dpm table */
875
+ dpm_table = & dpm_context -> dpm_tables .dclk_table ;
876
+ break ;
877
+ default :
878
+ dev_err (smu -> adev -> dev , "Unsupported clock type!\n" );
879
+ return - EINVAL ;
880
+ }
881
+
882
+ if (min )
883
+ * min = dpm_table -> min ;
884
+ if (max )
885
+ * max = dpm_table -> max ;
886
+
887
+ return 0 ;
888
+ }
889
+
831
890
static int smu_v13_0_7_read_sensor (struct smu_context * smu ,
832
891
enum amd_pp_sensors sensor ,
833
892
void * data ,
@@ -1684,7 +1743,7 @@ static const struct pptable_funcs smu_v13_0_7_ppt_funcs = {
1684
1743
.dpm_set_jpeg_enable = smu_v13_0_set_jpeg_enable ,
1685
1744
.init_pptable_microcode = smu_v13_0_init_pptable_microcode ,
1686
1745
.populate_umd_state_clk = smu_v13_0_7_populate_umd_state_clk ,
1687
- .get_dpm_ultimate_freq = smu_v13_0_get_dpm_ultimate_freq ,
1746
+ .get_dpm_ultimate_freq = smu_v13_0_7_get_dpm_ultimate_freq ,
1688
1747
.get_vbios_bootup_values = smu_v13_0_get_vbios_bootup_values ,
1689
1748
.read_sensor = smu_v13_0_7_read_sensor ,
1690
1749
.feature_is_enabled = smu_cmn_feature_is_enabled ,
0 commit comments