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.hogan...@intel.com>
> 


> Cc: Jouni Högander <jouni.hogan...@intel.com>
> Reported-by: Imre Deak <imre.d...@intel.com>
> Fixes: 3b6f409547fb ("drm/i915/display/psr: Lock and unlock PSR
> around pipe updates")
> Signed-off-by: José Roberto de Souza <jose.so...@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;
>  

Reply via email to