[PATCH] drm/amd/display: Only get the connector state for VRR when toggled

Li, Sun peng (Leo) Sunpeng.Li at amd.com
Fri Jan 11 14:49:24 UTC 2019



On 2019-01-10 3:12 p.m., Nicholas Kazlauskas wrote:
> [Why]
> This fixes a stuttering issue that occurs when moving a hardware cursor
> when VRR is enabled.
> 
> Previously when VRR is enabled atomic check will grab the connector
> state for every atomic update. This has to lock the connector in order
> to do so. The locking is bad enough by itself for performance, but
> it gets worse with what we do just below that - add all the planes
> for the CRTC to the commit.
> 
> This prevents the cursor fast path from working - there's more than one
> plane now. With state->allow_modeset = true on top of this, it also
> adds and removes all the planes from the DC context triggering a full
> (very slow) update in DC.
> 
> [How]
> We need the connector state to get the VRR min/max capbilities, but we
> only need them when there's a CRTC mode change or when VRR is toggled.
> 
> The condition has been updated accordingly.
> 
> Fixes: 3cc22f281318 ("drm/amdgpu: Set FreeSync state using drm VRR properties")
> 
> Cc: Harry Wentland <harry.wentland at amd.com>
> Cc: Leo Li <sunpeng.li at amd.com>
> Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas at amd.com>

Reviewed-by: Leo Li <sunpeng.li at amd.com>

> ---
>   drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> index 48777739d2dc..b7867ec166f3 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> @@ -6083,7 +6083,7 @@ static int amdgpu_dm_atomic_check(struct drm_device *dev,
>   	for_each_oldnew_crtc_in_state(state, crtc, old_crtc_state, new_crtc_state, i) {
>   		if (!drm_atomic_crtc_needs_modeset(new_crtc_state) &&
>   		    !new_crtc_state->color_mgmt_changed &&
> -		    !new_crtc_state->vrr_enabled)
> +		    old_crtc_state->vrr_enabled == new_crtc_state->vrr_enabled)
>   			continue;
>   
>   		if (!new_crtc_state->enable)
> 


More information about the amd-gfx mailing list