]> Git Repo - linux.git/commitdiff
drm/i915/display: Fix warnings about PSR lock not held
authorJosé Roberto de Souza <[email protected]>
Wed, 6 Apr 2022 21:05:40 +0000 (14:05 -0700)
committerJosé Roberto de Souza <[email protected]>
Fri, 8 Apr 2022 17:20:31 +0000 (10:20 -0700)
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().

Cc: Jouni Högander <[email protected]>
Reported-by: Imre Deak <[email protected]>
Fixes: 3b6f409547fb ("drm/i915/display/psr: Lock and unlock PSR around pipe updates")
Signed-off-by: José Roberto de Souza <[email protected]>
Reviewed-by: Jouni Högander <[email protected]>
Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
drivers/gpu/drm/i915/display/intel_crtc.c

index a5439182d5ae44216ad0ea37c2e126c39490745e..4442aa355f86842948b46c0343f6977695251851 100644 (file)
@@ -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_TIME_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;
 
This page took 0.063012 seconds and 4 git commands to generate.