@@ -655,10 +655,13 @@ static void dcn35_clk_mgr_helper_populate_bw_params(struct clk_mgr_internal *clk
655
655
struct clk_limit_table_entry def_max = bw_params -> clk_table .entries [bw_params -> clk_table .num_entries - 1 ];
656
656
uint32_t max_fclk = 0 , min_pstate = 0 , max_dispclk = 0 , max_dppclk = 0 ;
657
657
uint32_t max_pstate = 0 , max_dram_speed_mts = 0 , min_dram_speed_mts = 0 ;
658
+ uint32_t num_memps , num_fclk , num_dcfclk ;
658
659
int i ;
659
660
660
661
/* Determine min/max p-state values. */
661
- for (i = 0 ; i < clock_table -> NumMemPstatesEnabled ; i ++ ) {
662
+ num_memps = (clock_table -> NumMemPstatesEnabled > NUM_MEM_PSTATE_LEVELS ) ? NUM_MEM_PSTATE_LEVELS :
663
+ clock_table -> NumMemPstatesEnabled ;
664
+ for (i = 0 ; i < num_memps ; i ++ ) {
662
665
uint32_t dram_speed_mts = calc_dram_speed_mts (& clock_table -> MemPstateTable [i ]);
663
666
664
667
if (is_valid_clock_value (dram_speed_mts ) && dram_speed_mts > max_dram_speed_mts ) {
@@ -670,7 +673,7 @@ static void dcn35_clk_mgr_helper_populate_bw_params(struct clk_mgr_internal *clk
670
673
min_dram_speed_mts = max_dram_speed_mts ;
671
674
min_pstate = max_pstate ;
672
675
673
- for (i = 0 ; i < clock_table -> NumMemPstatesEnabled ; i ++ ) {
676
+ for (i = 0 ; i < num_memps ; i ++ ) {
674
677
uint32_t dram_speed_mts = calc_dram_speed_mts (& clock_table -> MemPstateTable [i ]);
675
678
676
679
if (is_valid_clock_value (dram_speed_mts ) && dram_speed_mts < min_dram_speed_mts ) {
@@ -699,9 +702,13 @@ static void dcn35_clk_mgr_helper_populate_bw_params(struct clk_mgr_internal *clk
699
702
/* Base the clock table on dcfclk, need at least one entry regardless of pmfw table */
700
703
ASSERT (clock_table -> NumDcfClkLevelsEnabled > 0 );
701
704
702
- max_fclk = find_max_clk_value (clock_table -> FclkClocks_Freq , clock_table -> NumFclkLevelsEnabled );
705
+ num_fclk = (clock_table -> NumFclkLevelsEnabled > NUM_FCLK_DPM_LEVELS ) ? NUM_FCLK_DPM_LEVELS :
706
+ clock_table -> NumFclkLevelsEnabled ;
707
+ max_fclk = find_max_clk_value (clock_table -> FclkClocks_Freq , num_fclk );
703
708
704
- for (i = 0 ; i < clock_table -> NumDcfClkLevelsEnabled ; i ++ ) {
709
+ num_dcfclk = (clock_table -> NumFclkLevelsEnabled > NUM_DCFCLK_DPM_LEVELS ) ? NUM_DCFCLK_DPM_LEVELS :
710
+ clock_table -> NumDcfClkLevelsEnabled ;
711
+ for (i = 0 ; i < num_dcfclk ; i ++ ) {
705
712
int j ;
706
713
707
714
/* First search defaults for the clocks we don't read using closest lower or equal default dcfclk */
0 commit comments