[PATCH] drm/amdgpu/powerplay: check vrefresh when when changing displays

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux