diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/1323-drm-amd-powerplay-force-FCLK-to-highest-also-for-5K-.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.19.8/1323-drm-amd-powerplay-force-FCLK-to-highest-also-for-5K-.patch | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/1323-drm-amd-powerplay-force-FCLK-to-highest-also-for-5K-.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/1323-drm-amd-powerplay-force-FCLK-to-highest-also-for-5K-.patch new file mode 100644 index 00000000..84bf963c --- /dev/null +++ b/common/recipes-kernel/linux/linux-yocto-4.19.8/1323-drm-amd-powerplay-force-FCLK-to-highest-also-for-5K-.patch @@ -0,0 +1,82 @@ +From 544475866debb7714fa210889426e258ca78e4ba Mon Sep 17 00:00:00 2001 +From: Evan Quan <evan.quan@amd.com> +Date: Wed, 20 Feb 2019 16:08:41 +0800 +Subject: [PATCH 1323/2940] drm/amd/powerplay: force FCLK to highest also for + 5K or higher displays + +This can fix possible screen freeze on high resolution displays. + +Change-Id: Ia1f1708638a85d57789a61ba0937c5221bd28c31 +Signed-off-by: Evan Quan <evan.quan@amd.com> +Acked-by: Alex Deucher <alexander.deucher@amd.com> +--- + .../drm/amd/powerplay/hwmgr/vega20_hwmgr.c | 38 ++++++++++++++++++- + 1 file changed, 37 insertions(+), 1 deletion(-) + +diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c +index 8ca49c3cf6db..17ea5c699240 100644 +--- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c ++++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c +@@ -3332,6 +3332,31 @@ static int vega20_set_uclk_to_highest_dpm_level(struct pp_hwmgr *hwmgr, + return ret; + } + ++static int vega20_set_fclk_to_highest_dpm_level(struct pp_hwmgr *hwmgr) ++{ ++ struct vega20_hwmgr *data = (struct vega20_hwmgr *)(hwmgr->backend); ++ struct vega20_single_dpm_table *dpm_table = &(data->dpm_table.fclk_table); ++ int ret = 0; ++ ++ if (data->smu_features[GNLD_DPM_FCLK].enabled) { ++ PP_ASSERT_WITH_CODE(dpm_table->count > 0, ++ "[SetFclkToHightestDpmLevel] Dpm table has no entry!", ++ return -EINVAL); ++ PP_ASSERT_WITH_CODE(dpm_table->count <= NUM_FCLK_DPM_LEVELS, ++ "[SetFclkToHightestDpmLevel] Dpm table has too many entries!", ++ return -EINVAL); ++ ++ dpm_table->dpm_state.soft_min_level = dpm_table->dpm_levels[dpm_table->count - 1].value; ++ PP_ASSERT_WITH_CODE(!(ret = smum_send_msg_to_smc_with_parameter(hwmgr, ++ PPSMC_MSG_SetSoftMinByFreq, ++ (PPCLK_FCLK << 16 ) | dpm_table->dpm_state.soft_min_level)), ++ "[SetFclkToHightestDpmLevel] Set soft min fclk failed!", ++ return ret); ++ } ++ ++ return ret; ++} ++ + static int vega20_pre_display_configuration_changed_task(struct pp_hwmgr *hwmgr) + { + struct vega20_hwmgr *data = (struct vega20_hwmgr *)(hwmgr->backend); +@@ -3342,8 +3367,10 @@ static int vega20_pre_display_configuration_changed_task(struct pp_hwmgr *hwmgr) + + ret = vega20_set_uclk_to_highest_dpm_level(hwmgr, + &data->dpm_table.mem_table); ++ if (ret) ++ return ret; + +- return ret; ++ return vega20_set_fclk_to_highest_dpm_level(hwmgr); + } + + static int vega20_display_configuration_changed_task(struct pp_hwmgr *hwmgr) +@@ -3502,6 +3529,15 @@ static int vega20_apply_clocks_adjust_rules(struct pp_hwmgr *hwmgr) + if (hwmgr->display_config->nb_pstate_switch_disable) + dpm_table->dpm_state.hard_min_level = dpm_table->dpm_levels[dpm_table->count - 1].value; + ++ /* fclk */ ++ dpm_table = &(data->dpm_table.fclk_table); ++ dpm_table->dpm_state.soft_min_level = dpm_table->dpm_levels[0].value; ++ dpm_table->dpm_state.soft_max_level = dpm_table->dpm_levels[dpm_table->count - 1].value; ++ dpm_table->dpm_state.hard_min_level = dpm_table->dpm_levels[0].value; ++ dpm_table->dpm_state.hard_max_level = dpm_table->dpm_levels[dpm_table->count - 1].value; ++ if (hwmgr->display_config->nb_pstate_switch_disable) ++ dpm_table->dpm_state.soft_min_level = dpm_table->dpm_levels[dpm_table->count - 1].value; ++ + /* vclk */ + dpm_table = &(data->dpm_table.vclk_table); + dpm_table->dpm_state.soft_min_level = dpm_table->dpm_levels[0].value; +-- +2.17.1 + |