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.deuc...@amd.com>

Reviewed-by: Huang Rui <ray.hu...@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@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to