Skip to content

Commit db64a2f

Browse files
Evan Quanalexdeucher
authored andcommitted
drm/amd/powerplay: fix possible hang with 3+ 4K monitors
If DAL requires to force MCLK high, the FCLK will be forced to high also. Signed-off-by: Evan Quan <evan.quan@amd.com> Acked-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
1 parent aaaba51 commit db64a2f

File tree

1 file changed

+9
-1
lines changed

1 file changed

+9
-1
lines changed

drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3470,6 +3470,7 @@ static int vega20_apply_clocks_adjust_rules(struct pp_hwmgr *hwmgr)
34703470
struct vega20_single_dpm_table *dpm_table;
34713471
bool vblank_too_short = false;
34723472
bool disable_mclk_switching;
3473+
bool disable_fclk_switching;
34733474
uint32_t i, latency;
34743475

34753476
disable_mclk_switching = ((1 < hwmgr->display_config->num_display) &&
@@ -3545,13 +3546,20 @@ static int vega20_apply_clocks_adjust_rules(struct pp_hwmgr *hwmgr)
35453546
if (hwmgr->display_config->nb_pstate_switch_disable)
35463547
dpm_table->dpm_state.hard_min_level = dpm_table->dpm_levels[dpm_table->count - 1].value;
35473548

3549+
if ((disable_mclk_switching &&
3550+
(dpm_table->dpm_state.hard_min_level == dpm_table->dpm_levels[dpm_table->count - 1].value)) ||
3551+
hwmgr->display_config->min_mem_set_clock / 100 >= dpm_table->dpm_levels[dpm_table->count - 1].value)
3552+
disable_fclk_switching = true;
3553+
else
3554+
disable_fclk_switching = false;
3555+
35483556
/* fclk */
35493557
dpm_table = &(data->dpm_table.fclk_table);
35503558
dpm_table->dpm_state.soft_min_level = dpm_table->dpm_levels[0].value;
35513559
dpm_table->dpm_state.soft_max_level = VG20_CLOCK_MAX_DEFAULT;
35523560
dpm_table->dpm_state.hard_min_level = dpm_table->dpm_levels[0].value;
35533561
dpm_table->dpm_state.hard_max_level = VG20_CLOCK_MAX_DEFAULT;
3554-
if (hwmgr->display_config->nb_pstate_switch_disable)
3562+
if (hwmgr->display_config->nb_pstate_switch_disable || disable_fclk_switching)
35553563
dpm_table->dpm_state.soft_min_level = dpm_table->dpm_levels[dpm_table->count - 1].value;
35563564

35573565
/* vclk */

0 commit comments

Comments
 (0)