@@ -835,66 +835,47 @@ static struct wm_table lpddr4_wm_table_rn = {
835
835
}
836
836
};
837
837
838
- static unsigned int find_max_fclk_for_voltage (struct dpm_clocks * clock_table ,
839
- unsigned int voltage )
838
+ static unsigned int find_socclk_for_voltage (struct dpm_clocks * clock_table , unsigned int voltage )
840
839
{
841
840
int i ;
842
- uint32_t max_clk = 0 ;
843
841
844
- for (i = 0 ; i < PP_SMU_NUM_FCLK_DPM_LEVELS ; i ++ ) {
845
- if (clock_table -> FClocks [i ].Vol <= voltage ) {
846
- max_clk = clock_table -> FClocks [i ].Freq > max_clk ?
847
- clock_table -> FClocks [i ].Freq : max_clk ;
848
- }
849
- }
850
-
851
- return max_clk ;
852
- }
853
-
854
- static unsigned int find_max_memclk_for_voltage (struct dpm_clocks * clock_table ,
855
- unsigned int voltage )
856
- {
857
- int i ;
858
- uint32_t max_clk = 0 ;
859
-
860
- for (i = 0 ; i < PP_SMU_NUM_MEMCLK_DPM_LEVELS ; i ++ ) {
861
- if (clock_table -> MemClocks [i ].Vol <= voltage ) {
862
- max_clk = clock_table -> MemClocks [i ].Freq > max_clk ?
863
- clock_table -> MemClocks [i ].Freq : max_clk ;
864
- }
842
+ for (i = 0 ; i < PP_SMU_NUM_SOCCLK_DPM_LEVELS ; i ++ ) {
843
+ if (clock_table -> SocClocks [i ].Vol == voltage )
844
+ return clock_table -> SocClocks [i ].Freq ;
865
845
}
866
846
867
- return max_clk ;
847
+ ASSERT (0 );
848
+ return 0 ;
868
849
}
869
850
870
- static unsigned int find_max_socclk_for_voltage (struct dpm_clocks * clock_table ,
871
- unsigned int voltage )
851
+ static unsigned int find_dcfclk_for_voltage (struct dpm_clocks * clock_table , unsigned int voltage )
872
852
{
873
853
int i ;
874
- uint32_t max_clk = 0 ;
875
854
876
- for (i = 0 ; i < PP_SMU_NUM_SOCCLK_DPM_LEVELS ; i ++ ) {
877
- if (clock_table -> SocClocks [i ].Vol <= voltage ) {
878
- max_clk = clock_table -> SocClocks [i ].Freq > max_clk ?
879
- clock_table -> SocClocks [i ].Freq : max_clk ;
880
- }
855
+ for (i = 0 ; i < PP_SMU_NUM_DCFCLK_DPM_LEVELS ; i ++ ) {
856
+ if (clock_table -> DcfClocks [i ].Vol == voltage )
857
+ return clock_table -> DcfClocks [i ].Freq ;
881
858
}
882
859
883
- return max_clk ;
860
+ ASSERT (0 );
861
+ return 0 ;
884
862
}
885
863
886
864
static void rn_clk_mgr_helper_populate_bw_params (struct clk_bw_params * bw_params , struct dpm_clocks * clock_table , struct integrated_info * bios_info )
887
865
{
888
866
int i , j = 0 ;
889
- unsigned int volt ;
890
867
891
868
j = -1 ;
892
869
893
- /* Find max DPM */
894
- for (i = 0 ; i < PP_SMU_NUM_DCFCLK_DPM_LEVELS ; ++ i ) {
895
- if (clock_table -> DcfClocks [i ].Freq != 0 &&
896
- clock_table -> DcfClocks [i ].Vol != 0 )
870
+ ASSERT (PP_SMU_NUM_FCLK_DPM_LEVELS <= MAX_NUM_DPM_LVL );
871
+
872
+ /* Find lowest DPM, FCLK is filled in reverse order*/
873
+
874
+ for (i = PP_SMU_NUM_FCLK_DPM_LEVELS - 1 ; i >= 0 ; i -- ) {
875
+ if (clock_table -> FClocks [i ].Freq != 0 && clock_table -> FClocks [i ].Vol != 0 ) {
897
876
j = i ;
877
+ break ;
878
+ }
898
879
}
899
880
900
881
if (j == -1 ) {
@@ -905,18 +886,13 @@ static void rn_clk_mgr_helper_populate_bw_params(struct clk_bw_params *bw_params
905
886
906
887
bw_params -> clk_table .num_entries = j + 1 ;
907
888
908
- for (i = 0 ; i < bw_params -> clk_table .num_entries ; i ++ ) {
909
- volt = clock_table -> DcfClocks [i ].Vol ;
910
-
911
- bw_params -> clk_table .entries [i ].voltage = volt ;
912
- bw_params -> clk_table .entries [i ].dcfclk_mhz =
913
- clock_table -> DcfClocks [i ].Freq ;
914
- bw_params -> clk_table .entries [i ].fclk_mhz =
915
- find_max_fclk_for_voltage (clock_table , volt );
916
- bw_params -> clk_table .entries [i ].memclk_mhz =
917
- find_max_memclk_for_voltage (clock_table , volt );
918
- bw_params -> clk_table .entries [i ].socclk_mhz =
919
- find_max_socclk_for_voltage (clock_table , volt );
889
+ for (i = 0 ; i < bw_params -> clk_table .num_entries ; i ++ , j -- ) {
890
+ bw_params -> clk_table .entries [i ].fclk_mhz = clock_table -> FClocks [j ].Freq ;
891
+ bw_params -> clk_table .entries [i ].memclk_mhz = clock_table -> MemClocks [j ].Freq ;
892
+ bw_params -> clk_table .entries [i ].voltage = clock_table -> FClocks [j ].Vol ;
893
+ bw_params -> clk_table .entries [i ].dcfclk_mhz = find_dcfclk_for_voltage (clock_table , clock_table -> FClocks [j ].Vol );
894
+ bw_params -> clk_table .entries [i ].socclk_mhz = find_socclk_for_voltage (clock_table ,
895
+ bw_params -> clk_table .entries [i ].voltage );
920
896
}
921
897
922
898
bw_params -> vram_type = bios_info -> memory_type ;
0 commit comments