Commit ce21211b authored by José Roberto de Souza's avatar José Roberto de Souza
Browse files

drm/i915/display: Fix warnings about PSR lock not held



Commit 3b6f4095 ("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 <jouni.hogander@intel.com>
Reported-by: default avatarImre Deak <imre.deak@intel.com>
Fixes: 3b6f4095 ("drm/i915/display/psr: Lock and unlock PSR around pipe updates")
Signed-off-by: default avatarJosé Roberto de Souza <jose.souza@intel.com>
Reviewed-by: default avatarJouni Högander <jouni.hogander@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20220406210540.493610-1-jose.souza@intel.com
parent 4b276ed3
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -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;