Unverified Commit 7c373b3b authored by Ville Syrjälä's avatar Ville Syrjälä Committed by Rodrigo Vivi
Browse files

drm/i915/psr: Reject async flips when selective fetch is enabled



The selective fetch code doesn't handle asycn flips correctly.
There is a nonsense check for async flips in
intel_psr2_sel_fetch_config_valid() but that only gets called
for modesets/fastsets and thus does nothing for async flips.

Currently intel_async_flip_check_hw() is very unhappy as the
selective fetch code pulls in planes that are not even async
flips capable.

Reject async flips when selective fetch is enabled, until
someone fixes this properly (ie. disable selective fetch while
async flips are being issued).

Cc: stable@vger.kernel.org
Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patch.msgid.link/20251105171015.22234-1-ville.syrjala@linux.intel.com


Reviewed-by: default avatarJouni Högander <jouni.hogander@intel.com>
(cherry picked from commit a5f0cc8e)
Signed-off-by: default avatarRodrigo Vivi <rodrigo.vivi@intel.com>
parent ac3fd01e
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -5964,6 +5964,14 @@ static int intel_async_flip_check_uapi(struct intel_atomic_state *state,
		return -EINVAL;
	}

	/* FIXME: selective fetch should be disabled for async flips */
	if (new_crtc_state->enable_psr2_sel_fetch) {
		drm_dbg_kms(display->drm,
			    "[CRTC:%d:%s] async flip disallowed with PSR2 selective fetch\n",
			    crtc->base.base.id, crtc->base.name);
		return -EINVAL;
	}

	for_each_oldnew_intel_plane_in_state(state, plane, old_plane_state,
					     new_plane_state, i) {
		if (plane->pipe != crtc->pipe)
+0 −6
Original line number Diff line number Diff line
@@ -1256,12 +1256,6 @@ static bool intel_psr2_sel_fetch_config_valid(struct intel_dp *intel_dp,
		return false;
	}

	if (crtc_state->uapi.async_flip) {
		drm_dbg_kms(display->drm,
			    "PSR2 sel fetch not enabled, async flip enabled\n");
		return false;
	}

	return crtc_state->enable_psr2_sel_fetch = true;
}