[PATCH] drm/amdgpu/powerplay: check vrefresh when when changing displays
Huang Rui
ray.huang at amd.com
Fri Aug 10 07:24:21 UTC 2018
On Thu, Aug 09, 2018 at 03:16:23PM -0500, Alex Deucher wrote:
> Compare the current vrefresh in addition to the number of displays
> when determining whether or not the smu needs updates when changing
> modes. The SMU needs to be updated if the vbi timeout changes due
> to a different refresh rate. Fixes flickering around mode changes
> in some cases on polaris parts.
>
> Signed-off-by: Alex Deucher <alexander.deucher at amd.com>
Reviewed-by: Huang Rui <ray.huang at amd.com>
> ---
> drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c | 3 +++
> drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.h | 1 +
> drivers/gpu/drm/amd/powerplay/smumgr/ci_smumgr.c | 1 +
> drivers/gpu/drm/amd/powerplay/smumgr/fiji_smumgr.c | 3 ++-
> drivers/gpu/drm/amd/powerplay/smumgr/iceland_smumgr.c | 1 +
> drivers/gpu/drm/amd/powerplay/smumgr/polaris10_smumgr.c | 1 +
> drivers/gpu/drm/amd/powerplay/smumgr/tonga_smumgr.c | 1 +
> drivers/gpu/drm/amd/powerplay/smumgr/vegam_smumgr.c | 1 +
> 8 files changed, 11 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c
> index 380f282a64ba..ab759e38e4ea 100644
> --- a/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c
> +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c
> @@ -4132,6 +4132,9 @@ smu7_check_smc_update_required_for_display_configuration(struct pp_hwmgr *hwmgr)
> if (data->display_timing.num_existing_displays != hwmgr->display_config->num_display)
> is_update_required = true;
>
> + if (data->display_timing.vrefresh != hwmgr->display_config->vrefresh)
> + is_update_required = true;
> +
> if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps, PHM_PlatformCaps_SclkDeepSleep)) {
> if (data->display_timing.min_clock_in_sr != hwmgr->display_config->min_core_set_clock_in_sr &&
> (data->display_timing.min_clock_in_sr >= SMU7_MINIMUM_ENGINE_CLOCK ||
> diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.h b/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.h
> index 3784ce6e50ab..69d361f8dfca 100644
> --- a/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.h
> +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.h
> @@ -156,6 +156,7 @@ struct smu7_vbios_boot_state {
> struct smu7_display_timing {
> uint32_t min_clock_in_sr;
> uint32_t num_existing_displays;
> + uint32_t vrefresh;
> };
>
> struct smu7_dpmlevel_enable_mask {
> diff --git a/drivers/gpu/drm/amd/powerplay/smumgr/ci_smumgr.c b/drivers/gpu/drm/amd/powerplay/smumgr/ci_smumgr.c
> index fbe3ef4ee45c..18643e06bc6f 100644
> --- a/drivers/gpu/drm/amd/powerplay/smumgr/ci_smumgr.c
> +++ b/drivers/gpu/drm/amd/powerplay/smumgr/ci_smumgr.c
> @@ -1231,6 +1231,7 @@ static int ci_populate_single_memory_level(
> memory_level->DisplayWatermark = PPSMC_DISPLAY_WATERMARK_LOW;
>
> data->display_timing.num_existing_displays = hwmgr->display_config->num_display;
> + data->display_timing.vrefresh = hwmgr->display_config->vrefresh;
>
> /* stutter mode not support on ci */
>
> diff --git a/drivers/gpu/drm/amd/powerplay/smumgr/fiji_smumgr.c b/drivers/gpu/drm/amd/powerplay/smumgr/fiji_smumgr.c
> index 18048f8e2f13..ec14798e87b6 100644
> --- a/drivers/gpu/drm/amd/powerplay/smumgr/fiji_smumgr.c
> +++ b/drivers/gpu/drm/amd/powerplay/smumgr/fiji_smumgr.c
> @@ -1210,7 +1210,8 @@ static int fiji_populate_single_memory_level(struct pp_hwmgr *hwmgr,
> * PECI_GetNumberOfActiveDisplays(hwmgr->pPECI,
> * &(data->DisplayTiming.numExistingDisplays));
> */
> - data->display_timing.num_existing_displays = 1;
> + data->display_timing.num_existing_displays = hwmgr->display_config->num_display;
> + data->display_timing.vrefresh = hwmgr->display_config->vrefresh;
>
> if (mclk_stutter_mode_threshold &&
> (clock <= mclk_stutter_mode_threshold) &&
> diff --git a/drivers/gpu/drm/amd/powerplay/smumgr/iceland_smumgr.c b/drivers/gpu/drm/amd/powerplay/smumgr/iceland_smumgr.c
> index 9299b93aa09a..73aa368a454e 100644
> --- a/drivers/gpu/drm/amd/powerplay/smumgr/iceland_smumgr.c
> +++ b/drivers/gpu/drm/amd/powerplay/smumgr/iceland_smumgr.c
> @@ -1280,6 +1280,7 @@ static int iceland_populate_single_memory_level(
> memory_level->DisplayWatermark = PPSMC_DISPLAY_WATERMARK_LOW;
>
> data->display_timing.num_existing_displays = hwmgr->display_config->num_display;
> + data->display_timing.vrefresh = hwmgr->display_config->vrefresh;
>
> /* stutter mode not support on iceland */
>
> diff --git a/drivers/gpu/drm/amd/powerplay/smumgr/polaris10_smumgr.c b/drivers/gpu/drm/amd/powerplay/smumgr/polaris10_smumgr.c
> index 1276f168ff68..872d3824337b 100644
> --- a/drivers/gpu/drm/amd/powerplay/smumgr/polaris10_smumgr.c
> +++ b/drivers/gpu/drm/amd/powerplay/smumgr/polaris10_smumgr.c
> @@ -1103,6 +1103,7 @@ static int polaris10_populate_single_memory_level(struct pp_hwmgr *hwmgr,
> mem_level->DisplayWatermark = PPSMC_DISPLAY_WATERMARK_LOW;
>
> data->display_timing.num_existing_displays = hwmgr->display_config->num_display;
> + data->display_timing.vrefresh = hwmgr->display_config->vrefresh;
>
> if (mclk_stutter_mode_threshold &&
> (clock <= mclk_stutter_mode_threshold) &&
> diff --git a/drivers/gpu/drm/amd/powerplay/smumgr/tonga_smumgr.c b/drivers/gpu/drm/amd/powerplay/smumgr/tonga_smumgr.c
> index 7dabc6c456e1..ae8378ed32ee 100644
> --- a/drivers/gpu/drm/amd/powerplay/smumgr/tonga_smumgr.c
> +++ b/drivers/gpu/drm/amd/powerplay/smumgr/tonga_smumgr.c
> @@ -1004,6 +1004,7 @@ static int tonga_populate_single_memory_level(
> memory_level->DisplayWatermark = PPSMC_DISPLAY_WATERMARK_LOW;
>
> data->display_timing.num_existing_displays = hwmgr->display_config->num_display;
> + data->display_timing.vrefresh = hwmgr->display_config->vrefresh;
>
> if ((mclk_stutter_mode_threshold != 0) &&
> (memory_clock <= mclk_stutter_mode_threshold) &&
> diff --git a/drivers/gpu/drm/amd/powerplay/smumgr/vegam_smumgr.c b/drivers/gpu/drm/amd/powerplay/smumgr/vegam_smumgr.c
> index 57420d7caa4e..3d415fabbd93 100644
> --- a/drivers/gpu/drm/amd/powerplay/smumgr/vegam_smumgr.c
> +++ b/drivers/gpu/drm/amd/powerplay/smumgr/vegam_smumgr.c
> @@ -1009,6 +1009,7 @@ static int vegam_populate_single_memory_level(struct pp_hwmgr *hwmgr,
> mem_level->DisplayWatermark = PPSMC_DISPLAY_WATERMARK_LOW;
>
> data->display_timing.num_existing_displays = hwmgr->display_config->num_display;
> + data->display_timing.vrefresh = hwmgr->display_config->vrefresh;
>
> if (mclk_stutter_mode_threshold &&
> (clock <= mclk_stutter_mode_threshold) &&
> --
> 2.13.6
>
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
More information about the amd-gfx
mailing list