From: Charlene Liu <charlene....@amd.com> [why] Need consider SSC enabled case
This reverts commit b0552a6de4727ffe9604b662d90bcdbc866af16f. Reviewed-by: Ovidiu (Ovi) Bunea <ovidiu.bu...@amd.com> Reviewed-by: Chris Park <chris.p...@amd.com> Signed-off-by: Charlene Liu <charlene....@amd.com> Signed-off-by: Ivan Lipski <ivan.lip...@amd.com> --- .../display/dc/clk_mgr/dcn35/dcn35_clk_mgr.c | 30 ++++++------------- 1 file changed, 9 insertions(+), 21 deletions(-) diff --git a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn35/dcn35_clk_mgr.c b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn35/dcn35_clk_mgr.c index 6fc8a7491684..86edf11b8c5a 100644 --- a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn35/dcn35_clk_mgr.c +++ b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn35/dcn35_clk_mgr.c @@ -387,7 +387,6 @@ void dcn35_update_clocks(struct clk_mgr *clk_mgr_base, bool update_dispclk = false; bool dpp_clock_lowered = false; int all_active_disps = 0; - int actual_dppclk = 0; if (dc->work_arounds.skip_clock_update) return; @@ -473,13 +472,14 @@ void dcn35_update_clocks(struct clk_mgr *clk_mgr_base, if (should_set_clock(safe_to_lower, new_clocks->dppclk_khz, clk_mgr->base.clks.dppclk_khz)) { if (clk_mgr->base.clks.dppclk_khz > new_clocks->dppclk_khz) dpp_clock_lowered = true; + clk_mgr_base->clks.dppclk_khz = new_clocks->dppclk_khz; update_dppclk = true; } if (should_set_clock(safe_to_lower, new_clocks->dispclk_khz, clk_mgr_base->clks.dispclk_khz) && (new_clocks->dispclk_khz > 0 || (safe_to_lower && display_count == 0))) { int requested_dispclk_khz = new_clocks->dispclk_khz; - int actual_dispclk; + dcn35_disable_otg_wa(clk_mgr_base, context, safe_to_lower, true); /* Clamp the requested clock to PMFW based on their limit. */ @@ -487,11 +487,7 @@ void dcn35_update_clocks(struct clk_mgr *clk_mgr_base, requested_dispclk_khz = dc->debug.min_disp_clk_khz; dcn35_smu_set_dispclk(clk_mgr, requested_dispclk_khz); - actual_dispclk = REG_READ(CLK1_CLK0_CURRENT_CNT); - - /*pmfw might set bypass clock which is higher than hardmin*/ - if (actual_dispclk >= new_clocks->dispclk_khz) - clk_mgr_base->clks.dispclk_khz = new_clocks->dispclk_khz; + clk_mgr_base->clks.dispclk_khz = new_clocks->dispclk_khz; dcn35_disable_otg_wa(clk_mgr_base, context, safe_to_lower, false); @@ -509,20 +505,13 @@ void dcn35_update_clocks(struct clk_mgr *clk_mgr_base, if (dpp_clock_lowered) { // increase per DPP DTO before lowering global dppclk dcn35_update_clocks_update_dpp_dto(clk_mgr, context, safe_to_lower); - dcn35_smu_set_dppclk(clk_mgr, new_clocks->dppclk_khz); + dcn35_smu_set_dppclk(clk_mgr, clk_mgr_base->clks.dppclk_khz); } else { // increase global DPPCLK before lowering per DPP DTO if (update_dppclk || update_dispclk) - dcn35_smu_set_dppclk(clk_mgr, new_clocks->dppclk_khz); + dcn35_smu_set_dppclk(clk_mgr, clk_mgr_base->clks.dppclk_khz); dcn35_update_clocks_update_dpp_dto(clk_mgr, context, safe_to_lower); } - if (update_dppclk) { - actual_dppclk = REG_READ(CLK1_CLK1_CURRENT_CNT); - - /*pmfw might set bypass clock which is higher than hardmin*/ - if (actual_dppclk >= new_clocks->dppclk_khz) - clk_mgr_base->clks.dppclk_khz = new_clocks->dppclk_khz; - } // notify PMFW of bandwidth per DPIA tunnel if (dc->debug.notify_dpia_hr_bw) @@ -562,7 +551,7 @@ static int get_vco_frequency_from_reg(struct clk_mgr_internal *clk_mgr) * since fractional part is only 16 bit in register definition but is 32 bit * in our fix point definiton, need to shift left by 16 to obtain correct value */ - pll_req.value |= (long long) fbmult_frac_val << 16; + pll_req.value |= fbmult_frac_val << 16; /* multiply by REFCLK period */ pll_req = dc_fixpt_mul_int(pll_req, clk_mgr->dfs_ref_freq_khz); @@ -789,8 +778,7 @@ static void dcn35_build_watermark_ranges(struct clk_bw_params *bw_params, struct table->WatermarkRow[WM_DCFCLK][num_valid_sets].MaxClock = 0xFFFF; /* Modify previous watermark range to cover up to max */ - if (num_valid_sets > 0) - table->WatermarkRow[WM_DCFCLK][num_valid_sets - 1].MaxClock = 0xFFFF; + table->WatermarkRow[WM_DCFCLK][num_valid_sets - 1].MaxClock = 0xFFFF; } num_valid_sets++; } @@ -951,8 +939,8 @@ static void dcn35_clk_mgr_helper_populate_bw_params(struct clk_mgr_internal *clk is_valid_clock_value(min_dram_speed_mts)); /* dispclk and dppclk can be max at any voltage, same number of levels for both */ - if (clock_table->NumDispClkLevelsEnabled <= NUM_DISPCLK_DPM_LEVELS) { - /*numDispclk is the same as numDPPclk*/ + if (clock_table->NumDispClkLevelsEnabled <= NUM_DISPCLK_DPM_LEVELS && + clock_table->NumDispClkLevelsEnabled <= NUM_DPPCLK_DPM_LEVELS) { max_dispclk = find_max_clk_value(clock_table->DispClocks, clock_table->NumDispClkLevelsEnabled); max_dppclk = find_max_clk_value(clock_table->DppClocks, -- 2.43.0