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