[Intel-gfx] [PATCH] drm/i915/display: Fix warnings about PSR lock not held

Hogander, Jouni jouni.hogander at intel.com
Thu Apr 7 13:40:10 UTC 2022


On Wed, 2022-04-06 at 14:05 -0700, José Roberto de Souza wrote:
> Commit 3b6f409547fb ("drm/i915/display/psr: Lock and unlock PSR
> around
> pipe updates") did not took into account async flips with PSR1 and
> PSR2 HW tracking, causing PSR lock not be held and causing warnings
> when intel_psr2_program_trans_man_trk_ctl() is executed.
> 
> So here taking the PSR lock before the earlier return in
> intel_pipe_update_start/end().

Reviewed-by: Jouni Högander <jouni.hogander at intel.com>
> 


> Cc: Jouni Högander <jouni.hogander at intel.com>
> Reported-by: Imre Deak <imre.deak at intel.com>
> Fixes: 3b6f409547fb ("drm/i915/display/psr: Lock and unlock PSR
> around pipe updates")
> Signed-off-by: José Roberto de Souza <jose.souza at intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_crtc.c | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_crtc.c
> b/drivers/gpu/drm/i915/display/intel_crtc.c
> index a5439182d5ae4..4442aa355f868 100644
> --- a/drivers/gpu/drm/i915/display/intel_crtc.c
> +++ b/drivers/gpu/drm/i915/display/intel_crtc.c
> @@ -487,6 +487,8 @@ void intel_pipe_update_start(struct
> intel_crtc_state *new_crtc_state)
>  		intel_crtc_has_type(new_crtc_state, INTEL_OUTPUT_DSI);
>  	DEFINE_WAIT(wait);
>  
> +	intel_psr_lock(new_crtc_state);
> +
>  	if (new_crtc_state->do_async_flip)
>  		return;
>  
> @@ -507,8 +509,6 @@ void intel_pipe_update_start(struct
> intel_crtc_state *new_crtc_state)
>  						      VBLANK_EVASION_TI
> ME_US);
>  	max = vblank_start - 1;
>  
> -	intel_psr_lock(new_crtc_state);
> -
>  	if (min <= 0 || max <= 0)
>  		goto irq_disable;
>  
> @@ -634,6 +634,8 @@ void intel_pipe_update_end(struct
> intel_crtc_state *new_crtc_state)
>  	ktime_t end_vbl_time = ktime_get();
>  	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
>  
> +	intel_psr_unlock(new_crtc_state);
> +
>  	if (new_crtc_state->do_async_flip)
>  		return;
>  
> @@ -685,8 +687,6 @@ void intel_pipe_update_end(struct
> intel_crtc_state *new_crtc_state)
>  
>  	local_irq_enable();
>  
> -	intel_psr_unlock(new_crtc_state);
> -
>  	if (intel_vgpu_active(dev_priv))
>  		return;
>  



More information about the Intel-gfx mailing list