Skip to content

Commit ce649bd

Browse files
Leo Maalexdeucher
authored andcommitted
drm/amd/display: Fix DC mode screen flickering on DCN321
[Why && How] Screen flickering saw on 4K@60 eDP with high refresh rate external monitor when booting up in DC mode. DC Mode Capping is disabled which caused wrong UCLK being used. Reviewed-by: Alvin Lee <[email protected]> Acked-by: Wayne Lin <[email protected]> Signed-off-by: Leo Ma <[email protected]> Tested-by: Daniel Wheeler <[email protected]> Signed-off-by: Alex Deucher <[email protected]>
1 parent 0e62103 commit ce649bd

File tree

1 file changed

+12
-3
lines changed

1 file changed

+12
-3
lines changed

drivers/gpu/drm/amd/display/dc/clk_mgr/dcn32/dcn32_clk_mgr.c

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -712,8 +712,12 @@ static void dcn32_update_clocks(struct clk_mgr *clk_mgr_base,
712712
* since we calculate mode support based on softmax being the max UCLK
713713
* frequency.
714714
*/
715-
dcn32_smu_set_hard_min_by_freq(clk_mgr, PPCLK_UCLK,
716-
dc->clk_mgr->bw_params->dc_mode_softmax_memclk);
715+
if (dc->debug.disable_dc_mode_overwrite) {
716+
dcn30_smu_set_hard_max_by_freq(clk_mgr, PPCLK_UCLK, dc->clk_mgr->bw_params->max_memclk_mhz);
717+
dcn32_smu_set_hard_min_by_freq(clk_mgr, PPCLK_UCLK, dc->clk_mgr->bw_params->max_memclk_mhz);
718+
} else
719+
dcn32_smu_set_hard_min_by_freq(clk_mgr, PPCLK_UCLK,
720+
dc->clk_mgr->bw_params->dc_mode_softmax_memclk);
717721
} else {
718722
dcn32_smu_set_hard_min_by_freq(clk_mgr, PPCLK_UCLK, dc->clk_mgr->bw_params->max_memclk_mhz);
719723
}
@@ -746,8 +750,13 @@ static void dcn32_update_clocks(struct clk_mgr *clk_mgr_base,
746750
/* set UCLK to requested value if P-State switching is supported, or to re-enable P-State switching */
747751
if (clk_mgr_base->clks.p_state_change_support &&
748752
(update_uclk || !clk_mgr_base->clks.prev_p_state_change_support) &&
749-
!dc->work_arounds.clock_update_disable_mask.uclk)
753+
!dc->work_arounds.clock_update_disable_mask.uclk) {
754+
if (dc->clk_mgr->dc_mode_softmax_enabled && dc->debug.disable_dc_mode_overwrite)
755+
dcn30_smu_set_hard_max_by_freq(clk_mgr, PPCLK_UCLK,
756+
max((int)dc->clk_mgr->bw_params->dc_mode_softmax_memclk, khz_to_mhz_ceil(clk_mgr_base->clks.dramclk_khz)));
757+
750758
dcn32_smu_set_hard_min_by_freq(clk_mgr, PPCLK_UCLK, khz_to_mhz_ceil(clk_mgr_base->clks.dramclk_khz));
759+
}
751760

752761
if (clk_mgr_base->clks.num_ways != new_clocks->num_ways &&
753762
clk_mgr_base->clks.num_ways > new_clocks->num_ways) {

0 commit comments

Comments
 (0)