Intel-GFX Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 3/6] drm/i915/cursor: Handle secondary cursor state
  2026-04-22  7:37 [PATCH 0/6] Enable joiner cursor fast updates Nemesa Garg
@ 2026-04-22  7:37 ` Nemesa Garg
  0 siblings, 0 replies; 17+ messages in thread
From: Nemesa Garg @ 2026-04-22  7:37 UTC (permalink / raw)
  To: intel-gfx, intel-xe; +Cc: Nemesa Garg

In joiner mode the fast path cursor update must
handle secondary pipes. Duplicate secondary cursor
plane state and pin fb so secondary cursor updates
are prepared along with primary cursor.

Assisted-by: Claude:claude-sonnet-4.6
Signed-off-by: Nemesa Garg <nemesa.garg@intel.com>
---
 drivers/gpu/drm/i915/display/intel_cursor.c | 80 ++++++++++++++++++++-
 1 file changed, 78 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_cursor.c b/drivers/gpu/drm/i915/display/intel_cursor.c
index 5752ac637a8e..e16353b4d7f9 100644
--- a/drivers/gpu/drm/i915/display/intel_cursor.c
+++ b/drivers/gpu/drm/i915/display/intel_cursor.c
@@ -867,6 +867,12 @@ intel_legacy_cursor_update(struct drm_plane *_plane,
 		to_intel_crtc_state(crtc->base.state);
 	struct intel_crtc_state *new_crtc_state;
 	struct intel_vblank_evade_ctx evade;
+	struct intel_plane_state *old_sec_states[3] = {};
+	struct intel_plane_state *new_sec_states[3] = {};
+	struct intel_crtc *sec_crtc;
+	u8 joiner_secondary_pipes;
+	bool new_plane_pinned = false;
+	int num_sec = 0;
 	int ret;
 
 	/*
@@ -934,6 +940,51 @@ intel_legacy_cursor_update(struct drm_plane *_plane,
 	if (ret)
 		goto out_free;
 
+	new_plane_pinned = true;
+
+	joiner_secondary_pipes = intel_crtc_joiner_secondary_pipes(crtc_state);
+	if (joiner_secondary_pipes) {
+		for_each_intel_crtc_in_pipe_mask(display->drm, sec_crtc,
+						 joiner_secondary_pipes) {
+			struct intel_plane *sec_plane =
+					intel_crtc_get_plane(sec_crtc, PLANE_CURSOR);
+			struct intel_crtc_state *sec_crtc_state =
+					to_intel_crtc_state(sec_crtc->base.state);
+			struct intel_plane_state *old_sec_plane_state =
+					to_intel_plane_state(sec_plane->base.state);
+			struct intel_plane_state *new_sec_plane_state;
+
+			new_sec_plane_state =
+			to_intel_plane_state(intel_plane_duplicate_state(&sec_plane->base));
+
+			if (!new_sec_plane_state) {
+				ret = -ENOMEM;
+				goto out_free;
+			}
+
+			intel_cursor_fastpath_update_plane_state(new_sec_plane_state, fb,
+								 new_plane_state->uapi.crtc,
+								 sec_crtc,
+								 crtc_x, crtc_y,
+								 crtc_w, crtc_h,
+								 src_x, src_y,
+								 src_w, src_h);
+
+			ret = sec_plane->check_plane(sec_crtc_state, new_sec_plane_state);
+
+			if (ret)
+				goto out_free;
+
+			ret = intel_plane_pin_fb(new_sec_plane_state, old_sec_plane_state);
+			if (ret)
+				goto out_free;
+
+			old_sec_states[num_sec] = old_sec_plane_state;
+			new_sec_states[num_sec] = new_sec_plane_state;
+			num_sec++;
+		}
+	}
+
 	intel_frontbuffer_flush(to_intel_frontbuffer(new_plane_state->hw.fb),
 				ORIGIN_CURSOR_UPDATE);
 	intel_frontbuffer_track(to_intel_frontbuffer(old_plane_state->hw.fb),
@@ -999,13 +1050,38 @@ intel_legacy_cursor_update(struct drm_plane *_plane,
 		intel_plane_unpin_fb(old_plane_state);
 	}
 
+	for (int i = 0; i < num_sec; i++) {
+		struct intel_plane_state *old_sec = old_sec_states[i];
+
+		if (old_sec->ggtt_vma != new_sec_states[i]->ggtt_vma) {
+			drm_vblank_work_init(&old_sec->unpin_work,
+					     &crtc->base,
+					     intel_cursor_unpin_work);
+			drm_vblank_work_schedule(&old_sec->unpin_work,
+						 drm_crtc_accurate_vblank_count(&crtc->base) + 1,
+						 false);
+		} else {
+			intel_plane_unpin_fb(old_sec);
+		}
+	}
+
 out_free:
 	if (new_crtc_state)
 		intel_crtc_destroy_state(&crtc->base, &new_crtc_state->uapi);
-	if (ret)
+	if (ret) {
+		if (new_plane_pinned)
+			intel_plane_unpin_fb(new_plane_state);
+
 		intel_plane_destroy_state(&plane->base, &new_plane_state->uapi);
-	else if (old_plane_state)
+
+		for (int i = 0; i < num_sec; i++) {
+			intel_plane_unpin_fb(new_sec_states[i]);
+			intel_plane_destroy_state(new_sec_states[i]->uapi.plane,
+						  &new_sec_states[i]->uapi);
+		}
+	} else if (old_plane_state) {
 		intel_plane_destroy_state(&plane->base, &old_plane_state->uapi);
+	}
 	return ret;
 
 slow:
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH 3/6] drm/i915/cursor: Handle secondary cursor state
  2026-04-28 14:16 [PATCH 0/6] Enable joiner cursor fast updates Nemesa Garg
@ 2026-04-28 14:16 ` Nemesa Garg
  0 siblings, 0 replies; 17+ messages in thread
From: Nemesa Garg @ 2026-04-28 14:16 UTC (permalink / raw)
  To: intel-gfx, intel-xe; +Cc: Nemesa Garg

In joiner mode the fast path cursor update must
handle secondary pipes. Add intel_cursor_lock_joined_pipes()
to acquire modeset locks for secondary pipes, then iterate
over all joined pipes uniformly to duplicate state, update
and pin fb for each secondary cursor plane.
Add per-primary-pipe mutex locking to serialize multi-pipe
cursor fastpath updates and avoid races while accessing
secondary cursor plane state.

v2: Use intel_crtc_joined_pipe_mask(). [Ville] 
    Add locking mechanism. [Ville]   
 
Assisted-by: Claude:claude-sonnet-4.6
Signed-off-by: Nemesa Garg <nemesa.garg@intel.com>
---
 drivers/gpu/drm/i915/display/intel_cursor.c | 155 +++++++++++++++++---
 1 file changed, 135 insertions(+), 20 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_cursor.c b/drivers/gpu/drm/i915/display/intel_cursor.c
index 5871881d93b4..b4d17aabe203 100644
--- a/drivers/gpu/drm/i915/display/intel_cursor.c
+++ b/drivers/gpu/drm/i915/display/intel_cursor.c
@@ -30,6 +30,9 @@
 #include "intel_vblank.h"
 #include "skl_watermark.h"
 
+static struct mutex cursor_fastpath_locks[I915_MAX_PIPES];
+static bool cursor_locks_initialized;
+
 /* Cursor formats */
 static const u32 intel_cursor_formats[] = {
 	DRM_FORMAT_ARGB8888,
@@ -844,6 +847,15 @@ intel_cursor_fastpath_update_plane_state(struct intel_plane_state *plane_state,
 	intel_plane_copy_uapi_to_hw_state(plane_state, plane_state, hw_crtc);
 }
 
+static void intel_cursor_init_locks(void)
+{
+	if (!cursor_locks_initialized) {
+		for (int i = 0; i < I915_MAX_PIPES; i++)
+			mutex_init(&cursor_fastpath_locks[i]);
+		cursor_locks_initialized = true;
+	}
+}
+
 static int
 intel_legacy_cursor_update(struct drm_plane *_plane,
 			   struct drm_crtc *_crtc,
@@ -864,6 +876,12 @@ intel_legacy_cursor_update(struct drm_plane *_plane,
 		to_intel_crtc_state(crtc->base.state);
 	struct intel_crtc_state *new_crtc_state;
 	struct intel_vblank_evade_ctx evade;
+	struct intel_plane_state *old_pipe_states[4] = {};
+	struct intel_plane_state *new_pipe_states[4] = {};
+	struct intel_plane *pipe_planes[4] = {};
+	struct intel_crtc *pipe_crtcs[4] = {};
+	struct intel_crtc *pipe_crtc;
+	int num_pipes = 0;
 	int ret;
 
 	/*
@@ -907,9 +925,18 @@ intel_legacy_cursor_update(struct drm_plane *_plane,
 	    !old_plane_state->uapi.fb != !fb)
 		goto slow;
 
+	/* Ensure cursor fastpath locks are initialized */
+	intel_cursor_init_locks();
+
+	/* Lock primary CRTC to protect multi-pipe cursor fastpath update */
+	if (intel_crtc_joiner_secondary_pipes(crtc_state))
+		mutex_lock(&cursor_fastpath_locks[crtc->pipe]);
+
 	new_plane_state = to_intel_plane_state(intel_plane_duplicate_state(&plane->base));
-	if (!new_plane_state)
-		return -ENOMEM;
+	if (!new_plane_state) {
+		ret = -ENOMEM;
+		goto out_unlock;
+	}
 
 	new_crtc_state = to_intel_crtc_state(intel_crtc_duplicate_state(&crtc->base));
 	if (!new_crtc_state) {
@@ -931,11 +958,73 @@ intel_legacy_cursor_update(struct drm_plane *_plane,
 	if (ret)
 		goto out_free;
 
+	/*
+	 * Iterate over all joined pipes (primary and secondary) uniformly.
+	 * The joined pipe mask includes both the primary pipe and all
+	 * secondary joiner pipes, allowing us to handle them all the same way.
+	 */
+	for_each_intel_crtc_in_pipe_mask(display->drm, pipe_crtc,
+					 intel_crtc_joined_pipe_mask(crtc_state)) {
+		struct intel_plane *pipe_plane;
+		struct intel_crtc_state *pipe_crtc_state;
+		struct intel_plane_state *old_pipe_plane_state;
+		struct intel_plane_state *new_pipe_plane_state;
+
+		if (pipe_crtc == crtc) {
+			pipe_plane = plane;
+			pipe_crtc_state = new_crtc_state;
+			old_pipe_plane_state = old_plane_state;
+			new_pipe_plane_state = new_plane_state;
+		} else {
+			pipe_plane = intel_crtc_get_plane(pipe_crtc, PLANE_CURSOR);
+			pipe_crtc_state = to_intel_crtc_state(pipe_crtc->base.state);
+			old_pipe_plane_state = to_intel_plane_state(pipe_plane->base.state);
+
+			new_pipe_plane_state =
+				to_intel_plane_state(intel_plane_duplicate_state(&pipe_plane->base));
+
+			if (!new_pipe_plane_state) {
+				ret = -ENOMEM;
+				goto out_free;
+			}
+
+			intel_cursor_fastpath_update_plane_state(new_pipe_plane_state, fb,
+								 &pipe_crtc->base,
+								 pipe_crtc,
+								 crtc_x, crtc_y,
+								 crtc_w, crtc_h,
+								 src_x, src_y,
+								 src_w, src_h);
+
+			ret = pipe_plane->check_plane(pipe_crtc_state, new_pipe_plane_state);
+			if (ret) {
+				intel_plane_destroy_state(&pipe_plane->base,
+							  &new_pipe_plane_state->uapi);
+				goto out_free;
+			}
+
+			ret = intel_plane_pin_fb(new_pipe_plane_state, old_pipe_plane_state);
+			if (ret) {
+				intel_plane_destroy_state(&pipe_plane->base,
+							  &new_pipe_plane_state->uapi);
+				goto out_free;
+			}
+		}
+
+		pipe_planes[num_pipes] = pipe_plane;
+		pipe_crtcs[num_pipes] = pipe_crtc;
+		old_pipe_states[num_pipes] = old_pipe_plane_state;
+		new_pipe_states[num_pipes] = new_pipe_plane_state;
+		num_pipes++;
+	}
+
 	intel_frontbuffer_flush(to_intel_frontbuffer(new_plane_state->hw.fb),
 				ORIGIN_CURSOR_UPDATE);
-	intel_frontbuffer_track(to_intel_frontbuffer(old_plane_state->hw.fb),
-				to_intel_frontbuffer(new_plane_state->hw.fb),
-				plane->frontbuffer_bit);
+
+	for (int i = 0; i < num_pipes; i++)
+		intel_frontbuffer_track(to_intel_frontbuffer(old_pipe_states[i]->hw.fb),
+					to_intel_frontbuffer(new_pipe_states[i]->hw.fb),
+					pipe_planes[i]->frontbuffer_bit);
 
 	/* Swap plane state */
 	plane->base.state = &new_plane_state->uapi;
@@ -983,26 +1072,52 @@ intel_legacy_cursor_update(struct drm_plane *_plane,
 
 	intel_psr_unlock(crtc_state);
 
-	if (old_plane_state->ggtt_vma != new_plane_state->ggtt_vma) {
-		drm_vblank_work_init(&old_plane_state->unpin_work, &crtc->base,
-				     intel_cursor_unpin_work);
-
-		drm_vblank_work_schedule(&old_plane_state->unpin_work,
-					 drm_crtc_accurate_vblank_count(&crtc->base) + 1,
-					 false);
-
-		old_plane_state = NULL;
-	} else {
-		intel_plane_unpin_fb(old_plane_state);
+	/*
+	 * Schedule or immediately unpin old framebuffers.
+	 * Protect against concurrent access.
+	 */
+	for (int i = 0; i < num_pipes; i++) {
+		struct intel_plane_state *old_pipe = old_pipe_states[i];
+		struct intel_crtc *owner_crtc = pipe_crtcs[i];
+
+		if (old_pipe->ggtt_vma != new_pipe_states[i]->ggtt_vma) {
+			drm_vblank_work_init(&old_pipe->unpin_work,
+					     &owner_crtc->base,
+					     intel_cursor_unpin_work);
+			drm_vblank_work_schedule(&old_pipe->unpin_work,
+						 drm_crtc_accurate_vblank_count(&owner_crtc->base) + 1,
+						 false);
+			old_pipe_states[i] = NULL;
+		} else {
+			intel_plane_unpin_fb(old_pipe);
+		}
 	}
 
 out_free:
 	if (new_crtc_state)
 		intel_crtc_destroy_state(&crtc->base, &new_crtc_state->uapi);
-	if (ret)
-		intel_plane_destroy_state(&plane->base, &new_plane_state->uapi);
-	else if (old_plane_state)
-		intel_plane_destroy_state(&plane->base, &old_plane_state->uapi);
+	if (ret) {
+		for (int i = 0; i < num_pipes; i++) {
+			intel_plane_unpin_fb(new_pipe_states[i]);
+			intel_plane_destroy_state(new_pipe_states[i]->uapi.plane,
+						  &new_pipe_states[i]->uapi);
+		}
+
+		if (!num_pipes)
+			intel_plane_destroy_state(&plane->base, &new_plane_state->uapi);
+	} else {
+		for (int i = 0; i < num_pipes; i++) {
+			if (old_pipe_states[i])
+				intel_plane_destroy_state(old_pipe_states[i]->uapi.plane,
+							  &old_pipe_states[i]->uapi);
+		}
+	}
+
+out_unlock:
+	/* Unlock primary CRTC cursor fastpath lock */
+	if (intel_crtc_joiner_secondary_pipes(crtc_state))
+		mutex_unlock(&cursor_fastpath_locks[crtc->pipe]);
+
 	return ret;
 
 slow:
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH 3/6] drm/i915/cursor: Handle secondary cursor state
  2026-06-08  6:26 [PATCH 0/6] Enable joiner cursor fast updates Nemesa Garg
@ 2026-06-08  6:26 ` Nemesa Garg
  2026-07-01 16:30   ` Borah, Chaitanya Kumar
  0 siblings, 1 reply; 17+ messages in thread
From: Nemesa Garg @ 2026-06-08  6:26 UTC (permalink / raw)
  To: intel-gfx, intel-xe; +Cc: Nemesa Garg

In joiner mode the fast path cursor update must handle
secondary pipes. Iterate over all joined pipes uniformly
to duplicate plane state, run check_plane(), pin the
framebuffer and on success swap in the new plane state
or each secondary cursor.

Track every successfully prepared pipe in per-pipe arrays
so that later frontbuffer, unpin and error-cleanup paths
treat primary and secondaries uniformly, and ensures the primary's
pinned framebuffer is released if a secondary fails partway through.

v2: Use intel_crtc_joined_pipe_mask(). [Ville]
    Add locking mechanism. [Ville]
v3: Drop the per-pipe fastpath mutex array. [sashiko]

Assisted-by: Claude:claude-sonnet-4.6
Signed-off-by: Nemesa Garg <nemesa.garg@intel.com>
---
 drivers/gpu/drm/i915/display/intel_cursor.c | 141 +++++++++++++++++---
 1 file changed, 119 insertions(+), 22 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_cursor.c b/drivers/gpu/drm/i915/display/intel_cursor.c
index 38234c6292ec..3da2c2308081 100644
--- a/drivers/gpu/drm/i915/display/intel_cursor.c
+++ b/drivers/gpu/drm/i915/display/intel_cursor.c
@@ -889,11 +889,17 @@ intel_legacy_cursor_update(struct drm_plane *_plane,
 	struct intel_display *display = to_intel_display(plane);
 	struct intel_plane_state *old_plane_state =
 		to_intel_plane_state(plane->base.state);
-	struct intel_plane_state *new_plane_state;
+	struct intel_plane_state *new_plane_state = NULL;
 	struct intel_crtc_state *crtc_state =
 		to_intel_crtc_state(crtc->base.state);
-	struct intel_crtc_state *new_crtc_state;
+	struct intel_crtc_state *new_crtc_state = NULL;
 	struct intel_vblank_evade_ctx evade;
+	struct intel_plane_state *old_pipe_states[4] = {};
+	struct intel_plane_state *new_pipe_states[4] = {};
+	struct intel_plane *pipe_planes[4] = {};
+	struct intel_crtc *pipe_crtcs[4] = {};
+	struct intel_crtc *pipe_crtc;
+	int num_pipes = 0;
 	int ret;
 
 	/*
@@ -944,8 +950,10 @@ intel_legacy_cursor_update(struct drm_plane *_plane,
 		goto slow;
 
 	new_plane_state = to_intel_plane_state(intel_plane_duplicate_state(&plane->base));
-	if (!new_plane_state)
-		return -ENOMEM;
+	if (!new_plane_state) {
+		ret = -ENOMEM;
+		goto out_free;
+	}
 
 	new_crtc_state = to_intel_crtc_state(intel_crtc_duplicate_state(&crtc->base));
 	if (!new_crtc_state) {
@@ -967,11 +975,75 @@ intel_legacy_cursor_update(struct drm_plane *_plane,
 	if (ret)
 		goto out_free;
 
+	pipe_planes[num_pipes] = plane;
+	pipe_crtcs[num_pipes] = crtc;
+	old_pipe_states[num_pipes] = old_plane_state;
+	new_pipe_states[num_pipes] = new_plane_state;
+	num_pipes++;
+
+	/*
+	 * Iterate over all joined pipes (primary and secondary) uniformly.
+	 * The joined pipe mask includes both the primary pipe and all
+	 * secondary joiner pipes, allowing us to handle them all the same way.
+	 */
+	for_each_intel_crtc_in_pipe_mask(display, pipe_crtc,
+					 intel_crtc_joined_pipe_mask(crtc_state)) {
+		struct intel_plane *pipe_plane;
+		struct intel_crtc_state *pipe_crtc_state;
+		struct intel_plane_state *old_pipe_plane_state;
+		struct intel_plane_state *new_pipe_plane_state;
+
+		if (pipe_crtc == crtc)
+			continue;
+
+		pipe_plane = intel_crtc_get_plane(pipe_crtc, PLANE_CURSOR);
+		pipe_crtc_state = to_intel_crtc_state(pipe_crtc->base.state);
+		old_pipe_plane_state = to_intel_plane_state(pipe_plane->base.state);
+
+		new_pipe_plane_state =
+			to_intel_plane_state(intel_plane_duplicate_state(&pipe_plane->base));
+
+		if (!new_pipe_plane_state) {
+			ret = -ENOMEM;
+			goto out_free;
+		}
+
+		intel_cursor_fastpath_update_plane_state(new_pipe_plane_state, fb,
+							 &pipe_crtc->base,
+							 pipe_crtc,
+							 crtc_x, crtc_y,
+							 crtc_w, crtc_h,
+							 src_x, src_y,
+							 src_w, src_h);
+
+		ret = pipe_plane->check_plane(pipe_crtc_state, new_pipe_plane_state);
+		if (ret) {
+			intel_plane_destroy_state(&pipe_plane->base,
+						  &new_pipe_plane_state->uapi);
+			goto out_free;
+		}
+
+		ret = intel_plane_pin_fb(new_pipe_plane_state, old_pipe_plane_state);
+		if (ret) {
+			intel_plane_destroy_state(&pipe_plane->base,
+						  &new_pipe_plane_state->uapi);
+			goto out_free;
+		}
+
+		pipe_planes[num_pipes] = pipe_plane;
+		pipe_crtcs[num_pipes] = pipe_crtc;
+		old_pipe_states[num_pipes] = old_pipe_plane_state;
+		new_pipe_states[num_pipes] = new_pipe_plane_state;
+		num_pipes++;
+	}
+
 	intel_frontbuffer_flush(to_intel_frontbuffer(new_plane_state->hw.fb),
 				ORIGIN_CURSOR_UPDATE);
-	intel_frontbuffer_track(to_intel_frontbuffer(old_plane_state->hw.fb),
-				to_intel_frontbuffer(new_plane_state->hw.fb),
-				plane->frontbuffer_bit);
+
+	for (int i = 0; i < num_pipes; i++)
+		intel_frontbuffer_track(to_intel_frontbuffer(old_pipe_states[i]->hw.fb),
+					to_intel_frontbuffer(new_pipe_states[i]->hw.fb),
+					pipe_planes[i]->frontbuffer_bit);
 
 	/* Swap plane state */
 	plane->base.state = &new_plane_state->uapi;
@@ -1019,26 +1091,51 @@ intel_legacy_cursor_update(struct drm_plane *_plane,
 
 	intel_psr_unlock(crtc_state);
 
-	if (old_plane_state->ggtt_vma != new_plane_state->ggtt_vma) {
-		drm_vblank_work_init(&old_plane_state->unpin_work, &crtc->base,
-				     intel_cursor_unpin_work);
-
-		drm_vblank_work_schedule(&old_plane_state->unpin_work,
-					 drm_crtc_accurate_vblank_count(&crtc->base) + 1,
-					 false);
-
-		old_plane_state = NULL;
-	} else {
-		intel_plane_unpin_fb(old_plane_state);
+	/*
+	 * Schedule or immediately unpin old framebuffers.
+	 * Protect against concurrent access.
+	 */
+	for (int i = 0; i < num_pipes; i++) {
+		struct intel_plane_state *old_pipe = old_pipe_states[i];
+		struct intel_crtc *owner_crtc = pipe_crtcs[i];
+
+		if (old_pipe->ggtt_vma != new_pipe_states[i]->ggtt_vma) {
+			drm_vblank_work_init(&old_pipe->unpin_work,
+					     &owner_crtc->base,
+					     intel_cursor_unpin_work);
+			drm_vblank_work_schedule(&old_pipe->unpin_work,
+						 drm_crtc_accurate_vblank_count(&owner_crtc->base) + 1,
+						 false);
+			old_pipe_states[i] = NULL;
+		} else {
+			intel_plane_unpin_fb(old_pipe);
+		}
 	}
 
 out_free:
 	if (new_crtc_state)
 		intel_crtc_destroy_state(&crtc->base, &new_crtc_state->uapi);
-	if (ret)
-		intel_plane_destroy_state(&plane->base, &new_plane_state->uapi);
-	else if (old_plane_state)
-		intel_plane_destroy_state(&plane->base, &old_plane_state->uapi);
+	if (ret) {
+		for (int i = 0; i < num_pipes; i++) {
+			intel_plane_unpin_fb(new_pipe_states[i]);
+			intel_plane_destroy_state(new_pipe_states[i]->uapi.plane,
+						  &new_pipe_states[i]->uapi);
+		}
+
+		/*
+		 * Primary failed before being pushed (atomic_check_with_state
+		 * or pin_fb): fb was never pinned, only destroy the state.
+		 */
+		if (!num_pipes && new_plane_state)
+			intel_plane_destroy_state(&plane->base, &new_plane_state->uapi);
+	} else {
+		for (int i = 0; i < num_pipes; i++) {
+			if (old_pipe_states[i])
+				intel_plane_destroy_state(old_pipe_states[i]->uapi.plane,
+							  &old_pipe_states[i]->uapi);
+		}
+	}
+
 	return ret;
 
 slow:
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* Re: [PATCH 3/6] drm/i915/cursor: Handle secondary cursor state
  2026-06-08  6:26 ` [PATCH 3/6] drm/i915/cursor: Handle secondary cursor state Nemesa Garg
@ 2026-07-01 16:30   ` Borah, Chaitanya Kumar
  2026-07-06  8:40     ` Garg, Nemesa
  0 siblings, 1 reply; 17+ messages in thread
From: Borah, Chaitanya Kumar @ 2026-07-01 16:30 UTC (permalink / raw)
  To: Nemesa Garg, intel-gfx, intel-xe



On 6/8/2026 11:56 AM, Nemesa Garg wrote:
> In joiner mode the fast path cursor update must handle
> secondary pipes. Iterate over all joined pipes uniformly
> to duplicate plane state, run check_plane(), pin the
> framebuffer and on success swap in the new plane state
> or each secondary cursor.
> 
> Track every successfully prepared pipe in per-pipe arrays
> so that later frontbuffer, unpin and error-cleanup paths
> treat primary and secondaries uniformly, and ensures the primary's
> pinned framebuffer is released if a secondary fails partway through.
> 

This whole loop remains dormant until patch 6. Worth a line in the 
commit message

> v2: Use intel_crtc_joined_pipe_mask(). [Ville]
>      Add locking mechanism. [Ville]
> v3: Drop the per-pipe fastpath mutex array. [sashiko]
> 
> Assisted-by: Claude:claude-sonnet-4.6
> Signed-off-by: Nemesa Garg <nemesa.garg@intel.com>
> ---
>   drivers/gpu/drm/i915/display/intel_cursor.c | 141 +++++++++++++++++---
>   1 file changed, 119 insertions(+), 22 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_cursor.c b/drivers/gpu/drm/i915/display/intel_cursor.c
> index 38234c6292ec..3da2c2308081 100644
> --- a/drivers/gpu/drm/i915/display/intel_cursor.c
> +++ b/drivers/gpu/drm/i915/display/intel_cursor.c
> @@ -889,11 +889,17 @@ intel_legacy_cursor_update(struct drm_plane *_plane,
>   	struct intel_display *display = to_intel_display(plane);
>   	struct intel_plane_state *old_plane_state =
>   		to_intel_plane_state(plane->base.state);
> -	struct intel_plane_state *new_plane_state;
> +	struct intel_plane_state *new_plane_state = NULL;
>   	struct intel_crtc_state *crtc_state =
>   		to_intel_crtc_state(crtc->base.state);
> -	struct intel_crtc_state *new_crtc_state;
> +	struct intel_crtc_state *new_crtc_state = NULL;
>   	struct intel_vblank_evade_ctx evade;
> +	struct intel_plane_state *old_pipe_states[4] = {};
> +	struct intel_plane_state *new_pipe_states[4] = {};
> +	struct intel_plane *pipe_planes[4] = {};
> +	struct intel_crtc *pipe_crtcs[4] = {};

Use I915_MAX_PIPES instead of magic 4.

> +	struct intel_crtc *pipe_crtc;
> +	int num_pipes = 0;
>   	int ret;
>   
>   	/*
> @@ -944,8 +950,10 @@ intel_legacy_cursor_update(struct drm_plane *_plane,
>   		goto slow;
>   
>   	new_plane_state = to_intel_plane_state(intel_plane_duplicate_state(&plane->base));
> -	if (!new_plane_state)
> -		return -ENOMEM;
> +	if (!new_plane_state) {
> +		ret = -ENOMEM;
> +		goto out_free;
> +	}
>   
>   	new_crtc_state = to_intel_crtc_state(intel_crtc_duplicate_state(&crtc->base));
>   	if (!new_crtc_state) {
> @@ -967,11 +975,75 @@ intel_legacy_cursor_update(struct drm_plane *_plane,
>   	if (ret)
>   		goto out_free;
>   
> +	pipe_planes[num_pipes] = plane;
> +	pipe_crtcs[num_pipes] = crtc;
> +	old_pipe_states[num_pipes] = old_plane_state;
> +	new_pipe_states[num_pipes] = new_plane_state;
> +	num_pipes++;
> +
> +	/*
> +	 * Iterate over all joined pipes (primary and secondary) uniformly.
> +	 * The joined pipe mask includes both the primary pipe and all
> +	 * secondary joiner pipes, allowing us to handle them all the same way.
> +	 */
> +	for_each_intel_crtc_in_pipe_mask(display, pipe_crtc,
> +					 intel_crtc_joined_pipe_mask(crtc_state)) {
> +		struct intel_plane *pipe_plane;
> +		struct intel_crtc_state *pipe_crtc_state;
> +		struct intel_plane_state *old_pipe_plane_state;
> +		struct intel_plane_state *new_pipe_plane_state;
> +
> +		if (pipe_crtc == crtc)
> +			continue;
> +

Third way of "skip the primary" in this series.

> +		pipe_plane = intel_crtc_get_plane(pipe_crtc, PLANE_CURSOR);
> +		pipe_crtc_state = to_intel_crtc_state(pipe_crtc->base.state);
> +		old_pipe_plane_state = to_intel_plane_state(pipe_plane->base.state);
> +
> +		new_pipe_plane_state =
> +			to_intel_plane_state(intel_plane_duplicate_state(&pipe_plane->base));
> +
> +		if (!new_pipe_plane_state) {
> +			ret = -ENOMEM;
> +			goto out_free;
> +		}
> +
> +		intel_cursor_fastpath_update_plane_state(new_pipe_plane_state, fb,
> +							 &pipe_crtc->base,
> +							 pipe_crtc,
> +							 crtc_x, crtc_y,
> +							 crtc_w, crtc_h,
> +							 src_x, src_y,
> +							 src_w, src_h);
> +
> +		ret = pipe_plane->check_plane(pipe_crtc_state, new_pipe_plane_state);

This seems to be departure from the single pipe flow of calling 
intel_plane_atomic_check_with_state(). Any reason we don't call this 
wrapper for the secondary pipes? And if unneeded can we skip this for 
the primary pipe as well. More on it in Patch 4.

> +		if (ret) {
> +			intel_plane_destroy_state(&pipe_plane->base,
> +						  &new_pipe_plane_state->uapi);
> +			goto out_free;
> +		}
> +
> +		ret = intel_plane_pin_fb(new_pipe_plane_state, old_pipe_plane_state);
> +		if (ret) {
> +			intel_plane_destroy_state(&pipe_plane->base,
> +						  &new_pipe_plane_state->uapi);
> +			goto out_free;
> +		}
> +
> +		pipe_planes[num_pipes] = pipe_plane;
> +		pipe_crtcs[num_pipes] = pipe_crtc;
> +		old_pipe_states[num_pipes] = old_pipe_plane_state;
> +		new_pipe_states[num_pipes] = new_pipe_plane_state;
> +		num_pipes++;
> +	}
> +
>   	intel_frontbuffer_flush(to_intel_frontbuffer(new_plane_state->hw.fb),
>   				ORIGIN_CURSOR_UPDATE);
> -	intel_frontbuffer_track(to_intel_frontbuffer(old_plane_state->hw.fb),
> -				to_intel_frontbuffer(new_plane_state->hw.fb),
> -				plane->frontbuffer_bit);
> +
> +	for (int i = 0; i < num_pipes; i++)
> +		intel_frontbuffer_track(to_intel_frontbuffer(old_pipe_states[i]->hw.fb),
> +					to_intel_frontbuffer(new_pipe_states[i]->hw.fb),
> +					pipe_planes[i]->frontbuffer_bit);
>   
>   	/* Swap plane state */
>   	plane->base.state = &new_plane_state->uapi;
> @@ -1019,26 +1091,51 @@ intel_legacy_cursor_update(struct drm_plane *_plane,
>   
>   	intel_psr_unlock(crtc_state);
>   
> -	if (old_plane_state->ggtt_vma != new_plane_state->ggtt_vma) {
> -		drm_vblank_work_init(&old_plane_state->unpin_work, &crtc->base,
> -				     intel_cursor_unpin_work);
> -
> -		drm_vblank_work_schedule(&old_plane_state->unpin_work,
> -					 drm_crtc_accurate_vblank_count(&crtc->base) + 1,
> -					 false);
> -
> -		old_plane_state = NULL;
> -	} else {
> -		intel_plane_unpin_fb(old_plane_state);
> +	/*
> +	 * Schedule or immediately unpin old framebuffers.
> +	 * Protect against concurrent access.
> +	 */
> +	for (int i = 0; i < num_pipes; i++) {
> +		struct intel_plane_state *old_pipe = old_pipe_states[i];
> +		struct intel_crtc *owner_crtc = pipe_crtcs[i];
> +
> +		if (old_pipe->ggtt_vma != new_pipe_states[i]->ggtt_vma) {
> +			drm_vblank_work_init(&old_pipe->unpin_work,
> +					     &owner_crtc->base,
> +					     intel_cursor_unpin_work);
> +			drm_vblank_work_schedule(&old_pipe->unpin_work,
> +						 drm_crtc_accurate_vblank_count(&owner_crtc->base) + 1,
> +						 false);
> +			old_pipe_states[i] = NULL;
> +		} else {
> +			intel_plane_unpin_fb(old_pipe);
> +		}

This schedules each pipe's unpin on its own crtc's vblank. Patch 6 then
changes this to the primary (&crtc->base). Any reason why? Either way 
the correct approach should be added in this patch instead of 
retro-fitting it in a future patch.

Functionally this looks more or less correct, but the code structure is 
quite fragmented and fragile - multiple parallel arrays indexed by 
num_pipes, ~6 separate passes over them, a
primary special-case, and error cleanup split across three sites.

I would also suggest to fold the four index-aligned arrays into one 
struct so they can't drift out of sync.
Try to unify the the primary and secondary pipes' code as much as possible.

I would also suggest splitting the patch into two:

- Reshape the existing primary-only fast path into num_pipes/array +
   loop form (num_pipes==1), including the goto out_free conversion and
   the per-pipe frontbuffer/unpin/cleanup loops. No functional change.
- Add the secondary-pipe loop  (or even better a unified loop for both 
primary and joined pipes).

In addition to this, most of the variable names needs a re-look in this 
patch. Some that really sticks out - new_pipe_plane_state for secondary 
pipe's plane_state, *_old_pipe_states for struct intel_plane_state.

Perhaps follow the convention of unprefixed for primary pipe and 
secondary_*/joined* for the joined pipes.

==
Chaitanya

>   	}
>   
>   out_free:
>   	if (new_crtc_state)
>   		intel_crtc_destroy_state(&crtc->base, &new_crtc_state->uapi);
> -	if (ret)
> -		intel_plane_destroy_state(&plane->base, &new_plane_state->uapi);
> -	else if (old_plane_state)
> -		intel_plane_destroy_state(&plane->base, &old_plane_state->uapi);
> +	if (ret) {
> +		for (int i = 0; i < num_pipes; i++) {
> +			intel_plane_unpin_fb(new_pipe_states[i]);
> +			intel_plane_destroy_state(new_pipe_states[i]->uapi.plane,
> +						  &new_pipe_states[i]->uapi);
> +		}
> +
> +		/*
> +		 * Primary failed before being pushed (atomic_check_with_state
> +		 * or pin_fb): fb was never pinned, only destroy the state.
> +		 */
> +		if (!num_pipes && new_plane_state)
> +			intel_plane_destroy_state(&plane->base, &new_plane_state->uapi);
> +	} else {
> +		for (int i = 0; i < num_pipes; i++) {
> +			if (old_pipe_states[i])
> +				intel_plane_destroy_state(old_pipe_states[i]->uapi.plane,
> +							  &old_pipe_states[i]->uapi);
> +		}
> +	}
> +
>   	return ret;
>   
>   slow:


^ permalink raw reply	[flat|nested] 17+ messages in thread

* RE: [PATCH 3/6] drm/i915/cursor: Handle secondary cursor state
  2026-07-01 16:30   ` Borah, Chaitanya Kumar
@ 2026-07-06  8:40     ` Garg, Nemesa
  0 siblings, 0 replies; 17+ messages in thread
From: Garg, Nemesa @ 2026-07-06  8:40 UTC (permalink / raw)
  To: Borah, Chaitanya Kumar, intel-gfx@lists.freedesktop.org,
	intel-xe@lists.freedesktop.org



> -----Original Message-----
> From: Borah, Chaitanya Kumar <chaitanya.kumar.borah@intel.com>
> Sent: Wednesday, July 1, 2026 10:00 PM
> To: Garg, Nemesa <nemesa.garg@intel.com>; intel-gfx@lists.freedesktop.org;
> intel-xe@lists.freedesktop.org
> Subject: Re: [PATCH 3/6] drm/i915/cursor: Handle secondary cursor state
> 
> 
> 
> On 6/8/2026 11:56 AM, Nemesa Garg wrote:
> > In joiner mode the fast path cursor update must handle secondary
> > pipes. Iterate over all joined pipes uniformly to duplicate plane
> > state, run check_plane(), pin the framebuffer and on success swap in
> > the new plane state or each secondary cursor.
> >
> > Track every successfully prepared pipe in per-pipe arrays so that
> > later frontbuffer, unpin and error-cleanup paths treat primary and
> > secondaries uniformly, and ensures the primary's pinned framebuffer is
> > released if a secondary fails partway through.
> >
> 
> This whole loop remains dormant until patch 6. Worth a line in the commit
> message
> 
> > v2: Use intel_crtc_joined_pipe_mask(). [Ville]
> >      Add locking mechanism. [Ville]
> > v3: Drop the per-pipe fastpath mutex array. [sashiko]
> >
> > Assisted-by: Claude:claude-sonnet-4.6
> > Signed-off-by: Nemesa Garg <nemesa.garg@intel.com>
> > ---
> >   drivers/gpu/drm/i915/display/intel_cursor.c | 141 +++++++++++++++++---
> >   1 file changed, 119 insertions(+), 22 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_cursor.c
> > b/drivers/gpu/drm/i915/display/intel_cursor.c
> > index 38234c6292ec..3da2c2308081 100644
> > --- a/drivers/gpu/drm/i915/display/intel_cursor.c
> > +++ b/drivers/gpu/drm/i915/display/intel_cursor.c
> > @@ -889,11 +889,17 @@ intel_legacy_cursor_update(struct drm_plane
> *_plane,
> >   	struct intel_display *display = to_intel_display(plane);
> >   	struct intel_plane_state *old_plane_state =
> >   		to_intel_plane_state(plane->base.state);
> > -	struct intel_plane_state *new_plane_state;
> > +	struct intel_plane_state *new_plane_state = NULL;
> >   	struct intel_crtc_state *crtc_state =
> >   		to_intel_crtc_state(crtc->base.state);
> > -	struct intel_crtc_state *new_crtc_state;
> > +	struct intel_crtc_state *new_crtc_state = NULL;
> >   	struct intel_vblank_evade_ctx evade;
> > +	struct intel_plane_state *old_pipe_states[4] = {};
> > +	struct intel_plane_state *new_pipe_states[4] = {};
> > +	struct intel_plane *pipe_planes[4] = {};
> > +	struct intel_crtc *pipe_crtcs[4] = {};
> 
> Use I915_MAX_PIPES instead of magic 4.
> 
> > +	struct intel_crtc *pipe_crtc;
> > +	int num_pipes = 0;
> >   	int ret;
> >
> >   	/*
> > @@ -944,8 +950,10 @@ intel_legacy_cursor_update(struct drm_plane
> *_plane,
> >   		goto slow;
> >
> >   	new_plane_state =
> to_intel_plane_state(intel_plane_duplicate_state(&plane->base));
> > -	if (!new_plane_state)
> > -		return -ENOMEM;
> > +	if (!new_plane_state) {
> > +		ret = -ENOMEM;
> > +		goto out_free;
> > +	}
> >
> >   	new_crtc_state = to_intel_crtc_state(intel_crtc_duplicate_state(&crtc-
> >base));
> >   	if (!new_crtc_state) {
> > @@ -967,11 +975,75 @@ intel_legacy_cursor_update(struct drm_plane
> *_plane,
> >   	if (ret)
> >   		goto out_free;
> >
> > +	pipe_planes[num_pipes] = plane;
> > +	pipe_crtcs[num_pipes] = crtc;
> > +	old_pipe_states[num_pipes] = old_plane_state;
> > +	new_pipe_states[num_pipes] = new_plane_state;
> > +	num_pipes++;
> > +
> > +	/*
> > +	 * Iterate over all joined pipes (primary and secondary) uniformly.
> > +	 * The joined pipe mask includes both the primary pipe and all
> > +	 * secondary joiner pipes, allowing us to handle them all the same
> way.
> > +	 */
> > +	for_each_intel_crtc_in_pipe_mask(display, pipe_crtc,
> > +
> intel_crtc_joined_pipe_mask(crtc_state)) {
> > +		struct intel_plane *pipe_plane;
> > +		struct intel_crtc_state *pipe_crtc_state;
> > +		struct intel_plane_state *old_pipe_plane_state;
> > +		struct intel_plane_state *new_pipe_plane_state;
> > +
> > +		if (pipe_crtc == crtc)
> > +			continue;
> > +
> 
> Third way of "skip the primary" in this series.
> 
> > +		pipe_plane = intel_crtc_get_plane(pipe_crtc,
> PLANE_CURSOR);
> > +		pipe_crtc_state = to_intel_crtc_state(pipe_crtc->base.state);
> > +		old_pipe_plane_state =
> > +to_intel_plane_state(pipe_plane->base.state);
> > +
> > +		new_pipe_plane_state =
> > +
> > +to_intel_plane_state(intel_plane_duplicate_state(&pipe_plane->base));
> > +
> > +		if (!new_pipe_plane_state) {
> > +			ret = -ENOMEM;
> > +			goto out_free;
> > +		}
> > +
> > +
> 	intel_cursor_fastpath_update_plane_state(new_pipe_plane_state, fb,
> > +							 &pipe_crtc->base,
> > +							 pipe_crtc,
> > +							 crtc_x, crtc_y,
> > +							 crtc_w, crtc_h,
> > +							 src_x, src_y,
> > +							 src_w, src_h);
> > +
> > +		ret = pipe_plane->check_plane(pipe_crtc_state,
> > +new_pipe_plane_state);
> 
> This seems to be departure from the single pipe flow of calling
> intel_plane_atomic_check_with_state(). Any reason we don't call this
> wrapper for the secondary pipes? And if unneeded can we skip this for the
> primary pipe as well. More on it in Patch 4.
> 
> > +		if (ret) {
> > +			intel_plane_destroy_state(&pipe_plane->base,
> > +						  &new_pipe_plane_state-
> >uapi);
> > +			goto out_free;
> > +		}
> > +
> > +		ret = intel_plane_pin_fb(new_pipe_plane_state,
> old_pipe_plane_state);
> > +		if (ret) {
> > +			intel_plane_destroy_state(&pipe_plane->base,
> > +						  &new_pipe_plane_state-
> >uapi);
> > +			goto out_free;
> > +		}
> > +
> > +		pipe_planes[num_pipes] = pipe_plane;
> > +		pipe_crtcs[num_pipes] = pipe_crtc;
> > +		old_pipe_states[num_pipes] = old_pipe_plane_state;
> > +		new_pipe_states[num_pipes] = new_pipe_plane_state;
> > +		num_pipes++;
> > +	}
> > +
> >   	intel_frontbuffer_flush(to_intel_frontbuffer(new_plane_state->hw.fb),
> >   				ORIGIN_CURSOR_UPDATE);
> > -	intel_frontbuffer_track(to_intel_frontbuffer(old_plane_state->hw.fb),
> > -				to_intel_frontbuffer(new_plane_state-
> >hw.fb),
> > -				plane->frontbuffer_bit);
> > +
> > +	for (int i = 0; i < num_pipes; i++)
> > +
> 	intel_frontbuffer_track(to_intel_frontbuffer(old_pipe_states[i]-
> >hw.fb),
> > +
> 	to_intel_frontbuffer(new_pipe_states[i]->hw.fb),
> > +					pipe_planes[i]->frontbuffer_bit);
> >
> >   	/* Swap plane state */
> >   	plane->base.state = &new_plane_state->uapi; @@ -1019,26 +1091,51
> @@
> > intel_legacy_cursor_update(struct drm_plane *_plane,
> >
> >   	intel_psr_unlock(crtc_state);
> >
> > -	if (old_plane_state->ggtt_vma != new_plane_state->ggtt_vma) {
> > -		drm_vblank_work_init(&old_plane_state->unpin_work,
> &crtc->base,
> > -				     intel_cursor_unpin_work);
> > -
> > -		drm_vblank_work_schedule(&old_plane_state->unpin_work,
> > -
> drm_crtc_accurate_vblank_count(&crtc->base) + 1,
> > -					 false);
> > -
> > -		old_plane_state = NULL;
> > -	} else {
> > -		intel_plane_unpin_fb(old_plane_state);
> > +	/*
> > +	 * Schedule or immediately unpin old framebuffers.
> > +	 * Protect against concurrent access.
> > +	 */
> > +	for (int i = 0; i < num_pipes; i++) {
> > +		struct intel_plane_state *old_pipe = old_pipe_states[i];
> > +		struct intel_crtc *owner_crtc = pipe_crtcs[i];
> > +
> > +		if (old_pipe->ggtt_vma != new_pipe_states[i]->ggtt_vma) {
> > +			drm_vblank_work_init(&old_pipe->unpin_work,
> > +					     &owner_crtc->base,
> > +					     intel_cursor_unpin_work);
> > +			drm_vblank_work_schedule(&old_pipe-
> >unpin_work,
> > +
> drm_crtc_accurate_vblank_count(&owner_crtc->base) + 1,
> > +						 false);
> > +			old_pipe_states[i] = NULL;
> > +		} else {
> > +			intel_plane_unpin_fb(old_pipe);
> > +		}
> 
> This schedules each pipe's unpin on its own crtc's vblank. Patch 6 then
> changes this to the primary (&crtc->base). Any reason why? Either way the
> correct approach should be added in this patch instead of retro-fitting it in a
> future patch.
> Will drop from patch 6.

> Functionally this looks more or less correct, but the code structure is quite
> fragmented and fragile - multiple parallel arrays indexed by num_pipes, ~6
> separate passes over them, a primary special-case, and error cleanup split
> across three sites.
> 
> I would also suggest to fold the four index-aligned arrays into one struct so
> they can't drift out of sync.
> Try to unify the the primary and secondary pipes' code as much as possible.
> Ack.

> I would also suggest splitting the patch into two:
> 
> - Reshape the existing primary-only fast path into num_pipes/array +
>    loop form (num_pipes==1), including the goto out_free conversion and
>    the per-pipe frontbuffer/unpin/cleanup loops. No functional change.
> - Add the secondary-pipe loop  (or even better a unified loop for both
> primary and joined pipes).
> 
> In addition to this, most of the variable names needs a re-look in this patch.
> Some that really sticks out - new_pipe_plane_state for secondary pipe's
> plane_state, *_old_pipe_states for struct intel_plane_state.
> 
> Perhaps follow the convention of unprefixed for primary pipe and
> secondary_*/joined* for the joined pipes.
> 
> ==
> Chaitanya
> 
Will do something like this:  Convert the primary-only fast path into a unified loop
over intel_crtc_joined_pipe_mask() using struct intel_cursor_pipe
and a joined[] array, then just widens the mask to include secondaries.
> >   	}
> >
> >   out_free:
> >   	if (new_crtc_state)
> >   		intel_crtc_destroy_state(&crtc->base, &new_crtc_state-
> >uapi);
> > -	if (ret)
> > -		intel_plane_destroy_state(&plane->base, &new_plane_state-
> >uapi);
> > -	else if (old_plane_state)
> > -		intel_plane_destroy_state(&plane->base, &old_plane_state-
> >uapi);
> > +	if (ret) {
> > +		for (int i = 0; i < num_pipes; i++) {
> > +			intel_plane_unpin_fb(new_pipe_states[i]);
> > +			intel_plane_destroy_state(new_pipe_states[i]-
> >uapi.plane,
> > +						  &new_pipe_states[i]->uapi);
> > +		}
> > +
> > +		/*
> > +		 * Primary failed before being pushed
> (atomic_check_with_state
> > +		 * or pin_fb): fb was never pinned, only destroy the state.
> > +		 */
> > +		if (!num_pipes && new_plane_state)
> > +			intel_plane_destroy_state(&plane->base,
> &new_plane_state->uapi);
> > +	} else {
> > +		for (int i = 0; i < num_pipes; i++) {
> > +			if (old_pipe_states[i])
> > +				intel_plane_destroy_state(old_pipe_states[i]-
> >uapi.plane,
> > +							  &old_pipe_states[i]-
> >uapi);
> > +		}
> > +	}
> > +
> >   	return ret;
> >
> >   slow:


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [PATCH 0/6] Enable joiner cursor fast updates
@ 2026-07-06 11:56 Nemesa Garg
  2026-07-06 11:56 ` [PATCH 1/6] drm/i915/cursor: Check joiner cursor commit status Nemesa Garg
                   ` (7 more replies)
  0 siblings, 8 replies; 17+ messages in thread
From: Nemesa Garg @ 2026-07-06 11:56 UTC (permalink / raw)
  To: intel-gfx, intel-xe; +Cc: Nemesa Garg

    This series enables the cursor fast path for joiner mode
and adds the missing secondary-plane handling to keep updates
correct and synchronized.

Nemesa Garg (6):
  drm/i915/cursor: Check joiner cursor commit status
  drm/i915/cursor: Add helper to update cursor plane
  drm/i915/cursor: Handle secondary cursor state
  drm/i915/cursor: Program secondary cursor planes
  drm/i915/cursor: Schedule cursor unpin per joined pipe
  drm/i915/cursor: Allow joiner cursor fast path update

 drivers/gpu/drm/i915/display/intel_cursor.c | 274 +++++++++++++++-----
 1 file changed, 204 insertions(+), 70 deletions(-)

-- 
2.25.1


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [PATCH 1/6] drm/i915/cursor: Check joiner cursor commit status
  2026-07-06 11:56 [PATCH 0/6] Enable joiner cursor fast updates Nemesa Garg
@ 2026-07-06 11:56 ` Nemesa Garg
  2026-07-29 15:28   ` Borah, Chaitanya Kumar
  2026-07-06 11:56 ` [PATCH 2/6] drm/i915/cursor: Add helper to update cursor plane Nemesa Garg
                   ` (6 subsequent siblings)
  7 siblings, 1 reply; 17+ messages in thread
From: Nemesa Garg @ 2026-07-06 11:56 UTC (permalink / raw)
  To: intel-gfx, intel-xe; +Cc: Nemesa Garg

In joiner mode, secondary cursor commits may still be running
even when the primary cursor commit is done. Walking the secondary
pipes also requires holding the secondary planes modeset locks.
Add intel_cursor_lock_joined_planes() to acquire modeset locks
for all secondary cursor planes. Check all joined cursor commit
status before taking the fast path. If any commit is still pending,
fallback to slow path.

v2: Use intel_crtc_joined_pipe_mask(). [Ville]
v3: Lock secondary cursor CRTCs and planes. [sashiko]
v4: Iterate the full joined mask uniformly in both helpers, no
    primary special-case.
    Move the parameter-change check above the lock acquisition so
    we don't grab secondary locks just to fall to slow path. [Chaitanya]

Assisted-by: Claude:claude-sonnet-4.6
Signed-off-by: Nemesa Garg <nemesa.garg@intel.com>
---
 drivers/gpu/drm/i915/display/intel_cursor.c | 69 ++++++++++++++++++---
 1 file changed, 60 insertions(+), 9 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_cursor.c b/drivers/gpu/drm/i915/display/intel_cursor.c
index 88384dea868b..af7fc1f888c4 100644
--- a/drivers/gpu/drm/i915/display/intel_cursor.c
+++ b/drivers/gpu/drm/i915/display/intel_cursor.c
@@ -13,6 +13,7 @@
 #include <drm/drm_vblank.h>
 
 #include "intel_atomic.h"
+#include "intel_crtc.h"
 #include "intel_cursor.h"
 #include "intel_cursor_regs.h"
 #include "intel_de.h"
@@ -796,6 +797,50 @@ void intel_cursor_unpin_work(struct kthread_work *base)
 	intel_plane_destroy_state(&plane->base, &plane_state->uapi);
 }
 
+static int intel_cursor_lock_joined_planes(struct intel_display *display,
+					   const struct intel_crtc_state *crtc_state,
+					   struct drm_modeset_acquire_ctx *ctx)
+{
+	struct intel_crtc *pipe_crtc;
+	int ret;
+
+	for_each_intel_crtc_in_pipe_mask(display, pipe_crtc,
+					 intel_crtc_joined_pipe_mask(crtc_state)) {
+		struct intel_plane *pipe_plane =
+			intel_crtc_get_plane(pipe_crtc, PLANE_CURSOR);
+
+		ret = drm_modeset_lock(&pipe_crtc->base.mutex, ctx);
+		if (ret)
+			return ret;
+
+		ret = drm_modeset_lock(&pipe_plane->base.mutex, ctx);
+		if (ret)
+			return ret;
+	}
+	return 0;
+}
+
+static bool
+intel_cursor_joiner_commits_idle(struct intel_display *display,
+				 const struct intel_crtc_state *crtc_state)
+{
+	struct intel_crtc *pipe_crtc;
+
+	for_each_intel_crtc_in_pipe_mask(display, pipe_crtc,
+					 intel_crtc_joined_pipe_mask(crtc_state)) {
+		struct intel_plane *pipe_plane =
+			intel_crtc_get_plane(pipe_crtc, PLANE_CURSOR);
+		struct intel_plane_state *pipe_plane_state =
+			to_intel_plane_state(pipe_plane->base.state);
+
+		if (pipe_plane_state->uapi.commit &&
+		    !try_wait_for_completion(&pipe_plane_state->uapi.commit->hw_done))
+			return false;
+	}
+
+	return true;
+}
+
 static int
 intel_legacy_cursor_update(struct drm_plane *_plane,
 			   struct drm_crtc *_crtc,
@@ -833,15 +878,6 @@ intel_legacy_cursor_update(struct drm_plane *_plane,
 	    crtc_state->joiner_pipes)
 		goto slow;
 
-	/*
-	 * Don't do an async update if there is an outstanding commit modifying
-	 * the plane.  This prevents our async update's changes from getting
-	 * overridden by a previous synchronous update's state.
-	 */
-	if (old_plane_state->uapi.commit &&
-	    !try_wait_for_completion(&old_plane_state->uapi.commit->hw_done))
-		goto slow;
-
 	/*
 	 * If any parameters change that may affect watermarks,
 	 * take the slowpath. Only changing fb or position should be
@@ -855,6 +891,21 @@ intel_legacy_cursor_update(struct drm_plane *_plane,
 	    !old_plane_state->uapi.fb != !fb)
 		goto slow;
 
+	ret = intel_cursor_lock_joined_planes(display, crtc_state, ctx);
+	if (ret == -EDEADLK)
+		return ret;
+	if (ret)
+		goto slow;
+
+	/*
+	 * Don't do an async update if there is an outstanding commit modifying
+	 * any of the joined cursor planes. This prevents our async update's
+	 * changes from getting overridden by a previous synchronous update's
+	 * state.
+	 */
+	if (!intel_cursor_joiner_commits_idle(display, crtc_state))
+		goto slow;
+
 	new_plane_state = to_intel_plane_state(intel_plane_duplicate_state(&plane->base));
 	if (!new_plane_state)
 		return -ENOMEM;
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH 2/6] drm/i915/cursor: Add helper to update cursor plane
  2026-07-06 11:56 [PATCH 0/6] Enable joiner cursor fast updates Nemesa Garg
  2026-07-06 11:56 ` [PATCH 1/6] drm/i915/cursor: Check joiner cursor commit status Nemesa Garg
@ 2026-07-06 11:56 ` Nemesa Garg
  2026-07-06 11:56 ` [PATCH 3/6] drm/i915/cursor: Handle secondary cursor state Nemesa Garg
                   ` (5 subsequent siblings)
  7 siblings, 0 replies; 17+ messages in thread
From: Nemesa Garg @ 2026-07-06 11:56 UTC (permalink / raw)
  To: intel-gfx, intel-xe; +Cc: Nemesa Garg

Move cursor fast path plane state update into helper
function. The target hw.crtc is passed as a parameter
so a later patch can reuse the helper for joiner
secondary pipes, where hw.crtc points at the secondary
being programmed while uapi.crtc stays on the primary.

v4: Drop uapi.crtc assignment from the helper. [Chaitanya]

Assisted-by: Claude:claude-sonnet-4.6
Signed-off-by: Nemesa Garg <nemesa.garg@intel.com>
---
 drivers/gpu/drm/i915/display/intel_cursor.c | 39 ++++++++++++++-------
 1 file changed, 27 insertions(+), 12 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_cursor.c b/drivers/gpu/drm/i915/display/intel_cursor.c
index af7fc1f888c4..632f7a0a5a63 100644
--- a/drivers/gpu/drm/i915/display/intel_cursor.c
+++ b/drivers/gpu/drm/i915/display/intel_cursor.c
@@ -841,6 +841,29 @@ intel_cursor_joiner_commits_idle(struct intel_display *display,
 	return true;
 }
 
+static void
+intel_cursor_fastpath_update_plane_state(struct intel_plane_state *plane_state,
+					 struct drm_framebuffer *fb,
+					 struct intel_crtc *hw_crtc,
+					 int crtc_x, int crtc_y,
+					 unsigned int crtc_w, unsigned int crtc_h,
+					 u32 src_x, u32 src_y,
+					 u32 src_w, u32 src_h)
+{
+	drm_atomic_set_fb_for_plane(&plane_state->uapi, fb);
+
+	plane_state->uapi.src_x = src_x;
+	plane_state->uapi.src_y = src_y;
+	plane_state->uapi.src_w = src_w;
+	plane_state->uapi.src_h = src_h;
+	plane_state->uapi.crtc_x = crtc_x;
+	plane_state->uapi.crtc_y = crtc_y;
+	plane_state->uapi.crtc_w = crtc_w;
+	plane_state->uapi.crtc_h = crtc_h;
+
+	intel_plane_copy_uapi_to_hw_state(NULL, plane_state, plane_state, hw_crtc);
+}
+
 static int
 intel_legacy_cursor_update(struct drm_plane *_plane,
 			   struct drm_crtc *_crtc,
@@ -916,18 +939,10 @@ intel_legacy_cursor_update(struct drm_plane *_plane,
 		goto out_free;
 	}
 
-	drm_atomic_set_fb_for_plane(&new_plane_state->uapi, fb);
-
-	new_plane_state->uapi.src_x = src_x;
-	new_plane_state->uapi.src_y = src_y;
-	new_plane_state->uapi.src_w = src_w;
-	new_plane_state->uapi.src_h = src_h;
-	new_plane_state->uapi.crtc_x = crtc_x;
-	new_plane_state->uapi.crtc_y = crtc_y;
-	new_plane_state->uapi.crtc_w = crtc_w;
-	new_plane_state->uapi.crtc_h = crtc_h;
-
-	intel_plane_copy_uapi_to_hw_state(NULL, new_plane_state, new_plane_state, crtc);
+	intel_cursor_fastpath_update_plane_state(new_plane_state, fb,
+						 crtc,
+						 crtc_x, crtc_y, crtc_w, crtc_h,
+						 src_x, src_y, src_w, src_h);
 
 	ret = intel_plane_atomic_check_with_state(crtc_state, new_crtc_state,
 						  old_plane_state, new_plane_state);
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH 3/6] drm/i915/cursor: Handle secondary cursor state
  2026-07-06 11:56 [PATCH 0/6] Enable joiner cursor fast updates Nemesa Garg
  2026-07-06 11:56 ` [PATCH 1/6] drm/i915/cursor: Check joiner cursor commit status Nemesa Garg
  2026-07-06 11:56 ` [PATCH 2/6] drm/i915/cursor: Add helper to update cursor plane Nemesa Garg
@ 2026-07-06 11:56 ` Nemesa Garg
  2026-07-29 15:29   ` Borah, Chaitanya Kumar
  2026-07-06 11:56 ` [PATCH 4/6] drm/i915/cursor: Program secondary cursor planes Nemesa Garg
                   ` (4 subsequent siblings)
  7 siblings, 1 reply; 17+ messages in thread
From: Nemesa Garg @ 2026-07-06 11:56 UTC (permalink / raw)
  To: intel-gfx, intel-xe; +Cc: Nemesa Garg

In joiner mode the fast path cursor update must handle
secondary pipes. Iterate over all joined pipes uniformly
to duplicate plane state, run check_plane(), pin the
framebuffer and on success swap in the new plane state
for each secondary cursor.

Track every successfully prepared pipe in a joined[] array
of struct intel_cursor_pipe so that later frontbuffer, unpin
and error-cleanup paths treat primary and secondaries uniformly,
and ensures the primary's pinned framebuffer is released if a
secondary fails partway through.

v2: Use intel_crtc_joined_pipe_mask(). [Ville]
    Add locking mechanism. [Ville]
v3: Drop the per-pipe fastpath mutex array. [sashiko]
v4: Fold parallel arrays into struct intel_cursor_pipe joined[],
    unify primary/secondary in a single loop, and use bare
    check_plane(). [Chaitanya]

Assisted-by: Claude:claude-sonnet-4.6
Signed-off-by: Nemesa Garg <nemesa.garg@intel.com>
---
 drivers/gpu/drm/i915/display/intel_cursor.c | 125 ++++++++++++++------
 1 file changed, 90 insertions(+), 35 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_cursor.c b/drivers/gpu/drm/i915/display/intel_cursor.c
index 632f7a0a5a63..fad5d5302b36 100644
--- a/drivers/gpu/drm/i915/display/intel_cursor.c
+++ b/drivers/gpu/drm/i915/display/intel_cursor.c
@@ -864,6 +864,14 @@ intel_cursor_fastpath_update_plane_state(struct intel_plane_state *plane_state,
 	intel_plane_copy_uapi_to_hw_state(NULL, plane_state, plane_state, hw_crtc);
 }
 
+struct intel_cursor_pipe {
+	struct intel_plane *plane;
+	struct intel_crtc *crtc;
+	struct intel_crtc_state *crtc_state;
+	struct intel_plane_state *old_plane_state;
+	struct intel_plane_state *new_plane_state;
+};
+
 static int
 intel_legacy_cursor_update(struct drm_plane *_plane,
 			   struct drm_crtc *_crtc,
@@ -879,11 +887,13 @@ intel_legacy_cursor_update(struct drm_plane *_plane,
 	struct intel_display *display = to_intel_display(plane);
 	struct intel_plane_state *old_plane_state =
 		to_intel_plane_state(plane->base.state);
-	struct intel_plane_state *new_plane_state;
+	struct intel_plane_state *new_plane_state = NULL;
 	struct intel_crtc_state *crtc_state =
 		to_intel_crtc_state(crtc->base.state);
-	struct intel_crtc_state *new_crtc_state;
 	struct intel_vblank_evade_ctx evade;
+	struct intel_cursor_pipe joined[I915_MAX_PIPES] = {};
+	struct intel_crtc *pipe_crtc;
+	int num_pipes = 0;
 	int ret;
 
 	/*
@@ -929,38 +939,74 @@ intel_legacy_cursor_update(struct drm_plane *_plane,
 	if (!intel_cursor_joiner_commits_idle(display, crtc_state))
 		goto slow;
 
-	new_plane_state = to_intel_plane_state(intel_plane_duplicate_state(&plane->base));
-	if (!new_plane_state)
-		return -ENOMEM;
+	/*
+	 * Iterate over all joined pipes (primary and secondary) uniformly.
+	 * The joined pipe mask includes both the primary pipe and all
+	 * secondary joiner pipes, allowing us to handle them all the same way.
+	 */
+	for_each_intel_crtc_in_pipe_mask(display, pipe_crtc,
+					 intel_crtc_joined_pipe_mask(crtc_state)) {
+		struct intel_cursor_pipe *j = &joined[num_pipes];
+
+		j->plane = intel_crtc_get_plane(pipe_crtc, PLANE_CURSOR);
+		j->crtc = pipe_crtc;
+		j->crtc_state = to_intel_crtc_state(pipe_crtc->base.state);
+		j->old_plane_state = to_intel_plane_state(j->plane->base.state);
+		j->new_plane_state =
+			to_intel_plane_state(intel_plane_duplicate_state(&j->plane->base));
+
+		if (!j->new_plane_state) {
+			ret = -ENOMEM;
+			goto out_free;
+		}
+
+		/* Joiner secondary: uapi.crtc points at the primary uapi crtc. */
+		j->new_plane_state->uapi.crtc = &crtc->base;
+
+		intel_cursor_fastpath_update_plane_state(j->new_plane_state, fb,
+							 pipe_crtc,
+							 crtc_x, crtc_y,
+							 crtc_w, crtc_h,
+							 src_x, src_y,
+							 src_w, src_h);
+
+		ret = j->plane->check_plane(j->crtc_state, j->new_plane_state);
+		if (ret) {
+			intel_plane_destroy_state(&j->plane->base,
+						  &j->new_plane_state->uapi);
+			goto out_free;
+		}
+
+		ret = intel_plane_pin_fb(j->new_plane_state, j->old_plane_state);
+		if (ret) {
+			intel_plane_destroy_state(&j->plane->base,
+						  &j->new_plane_state->uapi);
+			goto out_free;
+		}
 
-	new_crtc_state = to_intel_crtc_state(intel_crtc_duplicate_state(&crtc->base));
-	if (!new_crtc_state) {
-		ret = -ENOMEM;
-		goto out_free;
+		num_pipes++;
 	}
 
-	intel_cursor_fastpath_update_plane_state(new_plane_state, fb,
-						 crtc,
-						 crtc_x, crtc_y, crtc_w, crtc_h,
-						 src_x, src_y, src_w, src_h);
+	new_plane_state = joined[0].new_plane_state;
+	intel_frontbuffer_flush(to_intel_frontbuffer(joined[0].new_plane_state->hw.fb),
+				ORIGIN_CURSOR_UPDATE);
 
-	ret = intel_plane_atomic_check_with_state(crtc_state, new_crtc_state,
-						  old_plane_state, new_plane_state);
-	if (ret)
-		goto out_free;
+	for (int i = 0; i < num_pipes; i++)
+		intel_frontbuffer_track(to_intel_frontbuffer(joined[i].old_plane_state->hw.fb),
+					to_intel_frontbuffer(joined[i].new_plane_state->hw.fb),
+					joined[i].plane->frontbuffer_bit);
 
-	ret = intel_plane_pin_fb(new_plane_state, old_plane_state);
-	if (ret)
-		goto out_free;
+	for (int i = 0; i < num_pipes; i++) {
+		struct intel_crtc_state *cs =
+			to_intel_crtc_state(joined[i].crtc->base.state);
 
-	intel_frontbuffer_flush(to_intel_frontbuffer(new_plane_state->hw.fb),
-				ORIGIN_CURSOR_UPDATE);
-	intel_frontbuffer_track(to_intel_frontbuffer(old_plane_state->hw.fb),
-				to_intel_frontbuffer(new_plane_state->hw.fb),
-				plane->frontbuffer_bit);
+		joined[i].plane->base.state = &joined[i].new_plane_state->uapi;
 
-	/* Swap plane state */
-	plane->base.state = &new_plane_state->uapi;
+		if (joined[i].new_plane_state->uapi.visible)
+			cs->active_planes |= BIT(PLANE_CURSOR);
+		else
+			cs->active_planes &= ~BIT(PLANE_CURSOR);
+	}
 
 	/*
 	 * We cannot swap crtc_state as it may be in use by an atomic commit or
@@ -972,7 +1018,6 @@ intel_legacy_cursor_update(struct drm_plane *_plane,
 	 * planes atomically. If the cursor was part of the atomic update then
 	 * we would have taken the slowpath.
 	 */
-	crtc_state->active_planes = new_crtc_state->active_planes;
 
 	intel_vblank_evade_init(crtc_state, crtc_state, &evade);
 
@@ -1005,6 +1050,10 @@ intel_legacy_cursor_update(struct drm_plane *_plane,
 
 	intel_psr_unlock(crtc_state);
 
+	/*
+	 * Schedule or immediately unpin old framebuffers.
+	 * Protect against concurrent access.
+	 */
 	if (old_plane_state->ggtt_vma != new_plane_state->ggtt_vma) {
 		drm_vblank_work_init(&old_plane_state->unpin_work, &crtc->base,
 				     intel_cursor_unpin_work);
@@ -1013,18 +1062,24 @@ intel_legacy_cursor_update(struct drm_plane *_plane,
 					 drm_crtc_accurate_vblank_count(&crtc->base) + 1,
 					 false);
 
-		old_plane_state = NULL;
+		joined[0].old_plane_state = NULL;
 	} else {
 		intel_plane_unpin_fb(old_plane_state);
 	}
 
 out_free:
-	if (new_crtc_state)
-		intel_crtc_destroy_state(&crtc->base, &new_crtc_state->uapi);
-	if (ret)
-		intel_plane_destroy_state(&plane->base, &new_plane_state->uapi);
-	else if (old_plane_state)
-		intel_plane_destroy_state(&plane->base, &old_plane_state->uapi);
+	if (ret) {
+		for (int i = 0; i < num_pipes; i++) {
+			intel_plane_unpin_fb(joined[i].new_plane_state);
+			intel_plane_destroy_state(&joined[i].plane->base,
+						  &joined[i].new_plane_state->uapi);
+		}
+	} else {
+		for (int i = 0; i < num_pipes; i++)
+			if (joined[i].old_plane_state)
+				intel_plane_destroy_state(&joined[i].plane->base,
+							  &joined[i].old_plane_state->uapi);
+	}
 	return ret;
 
 slow:
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH 4/6] drm/i915/cursor: Program secondary cursor planes
  2026-07-06 11:56 [PATCH 0/6] Enable joiner cursor fast updates Nemesa Garg
                   ` (2 preceding siblings ...)
  2026-07-06 11:56 ` [PATCH 3/6] drm/i915/cursor: Handle secondary cursor state Nemesa Garg
@ 2026-07-06 11:56 ` Nemesa Garg
  2026-07-29 15:30   ` Borah, Chaitanya Kumar
  2026-07-06 11:56 ` [PATCH 5/6] drm/i915/cursor: Schedule cursor unpin per joined pipe Nemesa Garg
                   ` (3 subsequent siblings)
  7 siblings, 1 reply; 17+ messages in thread
From: Nemesa Garg @ 2026-07-06 11:56 UTC (permalink / raw)
  To: intel-gfx, intel-xe; +Cc: Nemesa Garg

Iterate over all joined pipes when arming/disabling the cursor plane so
secondary pipes are updated together with the primary. The pin, check
and state duplication for secondary pipes was already prepared in the
previous commit; this converts the update_arm pass to a loop over the
joined[] array.

Because the whole loop runs inside a single primary vblank-evade,
sample intel_crtc_get_vblank_counter() per pipe around each arm and
emit a drm_err() if the counter ticks during that pipe's own
programming.

v2: Check primary and secondary pipe together. [Ville]
v3: Use struct intel_cursor_pipe. [Ville]
v4: Add per-pipe vblank straddle detection around the arm loop. [Chaitanya]

Assisted-by: Claude:claude-sonnet-4.6
Signed-off-by: Nemesa Garg <nemesa.garg@intel.com>
---
 drivers/gpu/drm/i915/display/intel_cursor.c | 26 +++++++++++++++++----
 1 file changed, 21 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_cursor.c b/drivers/gpu/drm/i915/display/intel_cursor.c
index fad5d5302b36..65e1fa60a606 100644
--- a/drivers/gpu/drm/i915/display/intel_cursor.c
+++ b/drivers/gpu/drm/i915/display/intel_cursor.c
@@ -1039,11 +1039,27 @@ intel_legacy_cursor_update(struct drm_plane *_plane,
 		local_irq_disable();
 	}
 
-	if (new_plane_state->uapi.visible) {
-		intel_plane_update_noarm(NULL, plane, crtc_state, new_plane_state);
-		intel_plane_update_arm(NULL, plane, crtc_state, new_plane_state);
-	} else {
-		intel_plane_disable_arm(NULL, plane, crtc_state);
+	for (int i = 0; i < num_pipes; i++) {
+		u32 start_vbl_count = intel_crtc_get_vblank_counter(joined[i].crtc);
+		u32 end_vbl_count;
+
+		if (joined[i].new_plane_state->uapi.visible) {
+			intel_plane_update_noarm(NULL, joined[i].plane,
+						 joined[i].crtc_state,
+						 joined[i].new_plane_state);
+			intel_plane_update_arm(NULL, joined[i].plane,
+					       joined[i].crtc_state,
+					       joined[i].new_plane_state);
+		} else {
+			intel_plane_disable_arm(NULL, joined[i].plane, joined[i].crtc_state);
+		}
+
+		end_vbl_count = intel_crtc_get_vblank_counter(joined[i].crtc);
+		if (start_vbl_count != end_vbl_count)
+			drm_err(display->drm,
+				"Atomic update failure on pipe %c (start=%u end=%u)\n",
+				pipe_name(joined[i].crtc->pipe),
+				start_vbl_count, end_vbl_count);
 	}
 
 	local_irq_enable();
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH 5/6] drm/i915/cursor: Schedule cursor unpin per joined pipe
  2026-07-06 11:56 [PATCH 0/6] Enable joiner cursor fast updates Nemesa Garg
                   ` (3 preceding siblings ...)
  2026-07-06 11:56 ` [PATCH 4/6] drm/i915/cursor: Program secondary cursor planes Nemesa Garg
@ 2026-07-06 11:56 ` Nemesa Garg
  2026-07-06 11:56 ` [PATCH 6/6] drm/i915/cursor: Allow joiner cursor fast path update Nemesa Garg
                   ` (2 subsequent siblings)
  7 siblings, 0 replies; 17+ messages in thread
From: Nemesa Garg @ 2026-07-06 11:56 UTC (permalink / raw)
  To: intel-gfx, intel-xe; +Cc: Nemesa Garg

Convert the primary-only vblank unpin block into a loop over the
joined[] array so each pipe's old cursor framebuffer is scheduled for
unpin (or unpinned inline when unchanged) independently. All unpin
work is armed on the primary crtc's vblank (&crtc->base), consistent
with the single primary vblank evasion used above.

v4: Split from the update_arm loop conversion. [Chaitanya]

Assisted-by: Claude:claude-sonnet-4.6
Signed-off-by: Nemesa Garg <nemesa.garg@intel.com>
---
 drivers/gpu/drm/i915/display/intel_cursor.c | 26 ++++++++++-----------
 1 file changed, 13 insertions(+), 13 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_cursor.c b/drivers/gpu/drm/i915/display/intel_cursor.c
index 65e1fa60a606..68e73afad330 100644
--- a/drivers/gpu/drm/i915/display/intel_cursor.c
+++ b/drivers/gpu/drm/i915/display/intel_cursor.c
@@ -887,7 +887,6 @@ intel_legacy_cursor_update(struct drm_plane *_plane,
 	struct intel_display *display = to_intel_display(plane);
 	struct intel_plane_state *old_plane_state =
 		to_intel_plane_state(plane->base.state);
-	struct intel_plane_state *new_plane_state = NULL;
 	struct intel_crtc_state *crtc_state =
 		to_intel_crtc_state(crtc->base.state);
 	struct intel_vblank_evade_ctx evade;
@@ -987,7 +986,6 @@ intel_legacy_cursor_update(struct drm_plane *_plane,
 		num_pipes++;
 	}
 
-	new_plane_state = joined[0].new_plane_state;
 	intel_frontbuffer_flush(to_intel_frontbuffer(joined[0].new_plane_state->hw.fb),
 				ORIGIN_CURSOR_UPDATE);
 
@@ -1070,17 +1068,19 @@ intel_legacy_cursor_update(struct drm_plane *_plane,
 	 * Schedule or immediately unpin old framebuffers.
 	 * Protect against concurrent access.
 	 */
-	if (old_plane_state->ggtt_vma != new_plane_state->ggtt_vma) {
-		drm_vblank_work_init(&old_plane_state->unpin_work, &crtc->base,
-				     intel_cursor_unpin_work);
-
-		drm_vblank_work_schedule(&old_plane_state->unpin_work,
-					 drm_crtc_accurate_vblank_count(&crtc->base) + 1,
-					 false);
-
-		joined[0].old_plane_state = NULL;
-	} else {
-		intel_plane_unpin_fb(old_plane_state);
+	for (int i = 0; i < num_pipes; i++) {
+		struct intel_plane_state *old = joined[i].old_plane_state;
+
+		if (old->ggtt_vma != joined[i].new_plane_state->ggtt_vma) {
+			drm_vblank_work_init(&old->unpin_work, &crtc->base,
+					     intel_cursor_unpin_work);
+			drm_vblank_work_schedule(&old->unpin_work,
+						 drm_crtc_accurate_vblank_count(&crtc->base) + 1,
+						 false);
+			joined[i].old_plane_state = NULL;
+		} else {
+			intel_plane_unpin_fb(old);
+		}
 	}
 
 out_free:
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH 6/6] drm/i915/cursor: Allow joiner cursor fast path update
  2026-07-06 11:56 [PATCH 0/6] Enable joiner cursor fast updates Nemesa Garg
                   ` (4 preceding siblings ...)
  2026-07-06 11:56 ` [PATCH 5/6] drm/i915/cursor: Schedule cursor unpin per joined pipe Nemesa Garg
@ 2026-07-06 11:56 ` Nemesa Garg
  2026-07-06 19:09 ` ✓ i915.CI.BAT: success for Enable joiner cursor fast updates (rev4) Patchwork
  2026-07-07  0:20 ` ✗ i915.CI.Full: failure " Patchwork
  7 siblings, 0 replies; 17+ messages in thread
From: Nemesa Garg @ 2026-07-06 11:56 UTC (permalink / raw)
  To: intel-gfx, intel-xe; +Cc: Nemesa Garg

The legacy cursor path forced all joiner updates to the
slow path by checking joiner_pipes.
Drop the condition so that joiner cursor updates can use
the fast path.

v4: Trimmed to only the joiner_pipes gate drop. [Chaitanya]

Assisted-by: Claude:claude-sonnet-4.6
Signed-off-by: Nemesa Garg <nemesa.garg@intel.com>
---
 drivers/gpu/drm/i915/display/intel_cursor.c | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_cursor.c b/drivers/gpu/drm/i915/display/intel_cursor.c
index 68e73afad330..f431c00c03ac 100644
--- a/drivers/gpu/drm/i915/display/intel_cursor.c
+++ b/drivers/gpu/drm/i915/display/intel_cursor.c
@@ -901,13 +901,10 @@ intel_legacy_cursor_update(struct drm_plane *_plane,
 	 * PSR2 selective fetch also requires the slow path as
 	 * PSR2 plane and transcoder registers can only be updated during
 	 * vblank.
-	 *
-	 * FIXME joiner fastpath would be good
 	 */
 	if (!crtc_state->hw.active ||
 	    intel_crtc_needs_modeset(crtc_state) ||
-	    intel_crtc_needs_fastset(crtc_state) ||
-	    crtc_state->joiner_pipes)
+	    intel_crtc_needs_fastset(crtc_state))
 		goto slow;
 
 	/*
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* ✓ i915.CI.BAT: success for Enable joiner cursor fast updates (rev4)
  2026-07-06 11:56 [PATCH 0/6] Enable joiner cursor fast updates Nemesa Garg
                   ` (5 preceding siblings ...)
  2026-07-06 11:56 ` [PATCH 6/6] drm/i915/cursor: Allow joiner cursor fast path update Nemesa Garg
@ 2026-07-06 19:09 ` Patchwork
  2026-07-07  0:20 ` ✗ i915.CI.Full: failure " Patchwork
  7 siblings, 0 replies; 17+ messages in thread
From: Patchwork @ 2026-07-06 19:09 UTC (permalink / raw)
  To: Nemesa Garg; +Cc: intel-gfx

[-- Attachment #1: Type: text/plain, Size: 1535 bytes --]

== Series Details ==

Series: Enable joiner cursor fast updates (rev4)
URL   : https://patchwork.freedesktop.org/series/165273/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_18769 -> Patchwork_165273v4
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/index.html

Participating hosts (42 -> 40)
------------------------------

  Missing    (2): bat-dg2-13 fi-snb-2520m 

Known issues
------------

  Here are the changes found in Patchwork_165273v4 that come from known issues:

### IGT changes ###

#### Possible fixes ####

  * igt@kms_hdmi_inject@inject-audio:
    - fi-tgl-1115g4:      [FAIL][1] ([i915#16425]) -> [PASS][2]
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/fi-tgl-1115g4/igt@kms_hdmi_inject@inject-audio.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/fi-tgl-1115g4/igt@kms_hdmi_inject@inject-audio.html

  
  [i915#16425]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16425


Build changes
-------------

  * Linux: CI_DRM_18769 -> Patchwork_165273v4

  CI-20190529: 20190529
  CI_DRM_18769: 730a99730dc571631e8b0ebcb8a989fb7f33804f @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_8990: 8990
  Patchwork_165273v4: 730a99730dc571631e8b0ebcb8a989fb7f33804f @ git://anongit.freedesktop.org/gfx-ci/linux

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/index.html

[-- Attachment #2: Type: text/html, Size: 2120 bytes --]

^ permalink raw reply	[flat|nested] 17+ messages in thread

* ✗ i915.CI.Full: failure for Enable joiner cursor fast updates (rev4)
  2026-07-06 11:56 [PATCH 0/6] Enable joiner cursor fast updates Nemesa Garg
                   ` (6 preceding siblings ...)
  2026-07-06 19:09 ` ✓ i915.CI.BAT: success for Enable joiner cursor fast updates (rev4) Patchwork
@ 2026-07-07  0:20 ` Patchwork
  7 siblings, 0 replies; 17+ messages in thread
From: Patchwork @ 2026-07-07  0:20 UTC (permalink / raw)
  To: Nemesa Garg; +Cc: intel-gfx

[-- Attachment #1: Type: text/plain, Size: 116195 bytes --]

== Series Details ==

Series: Enable joiner cursor fast updates (rev4)
URL   : https://patchwork.freedesktop.org/series/165273/
State : failure

== Summary ==

CI Bug Log - changes from CI_DRM_18769_full -> Patchwork_165273v4_full
====================================================

Summary
-------

  **FAILURE**

  Serious unknown changes coming with Patchwork_165273v4_full absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in Patchwork_165273v4_full, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them
  to document this new failure mode, which will reduce false positives in CI.

  

Participating hosts (10 -> 10)
------------------------------

  No changes in participating hosts

Possible new issues
-------------------

  Here are the unknown changes that may have been introduced in Patchwork_165273v4_full:

### IGT changes ###

#### Possible regressions ####

  * igt@i915_pm_rpm@system-suspend-execbuf:
    - shard-dg1:          [PASS][1] -> [SKIP][2]
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-dg1-15/igt@i915_pm_rpm@system-suspend-execbuf.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg1-14/igt@i915_pm_rpm@system-suspend-execbuf.html

  * igt@kms_async_flips@async-flip-with-page-flip-events-linear:
    - shard-dg1:          [PASS][3] -> [INCOMPLETE][4] +1 other test incomplete
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-dg1-16/igt@kms_async_flips@async-flip-with-page-flip-events-linear.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg1-16/igt@kms_async_flips@async-flip-with-page-flip-events-linear.html

  
New tests
---------

  New tests have been introduced between CI_DRM_18769_full and Patchwork_165273v4_full:

### New IGT tests (1) ###

  * igt@kms_pipe_crc_basic:
    - Statuses :
    - Exec time: [None] s

  

Known issues
------------

  Here are the changes found in Patchwork_165273v4_full that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@api_intel_bb@blit-reloc-purge-cache:
    - shard-rkl:          NOTRUN -> [SKIP][5] ([i915#8411])
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-7/igt@api_intel_bb@blit-reloc-purge-cache.html

  * igt@api_intel_bb@crc32:
    - shard-tglu:         NOTRUN -> [SKIP][6] ([i915#6230])
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-5/igt@api_intel_bb@crc32.html

  * igt@gem_bad_reloc@negative-reloc-lut:
    - shard-rkl:          NOTRUN -> [SKIP][7] ([i915#3281]) +11 other tests skip
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-8/igt@gem_bad_reloc@negative-reloc-lut.html

  * igt@gem_ccs@ctrl-surf-copy:
    - shard-rkl:          NOTRUN -> [SKIP][8] ([i915#3555] / [i915#9323])
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-7/igt@gem_ccs@ctrl-surf-copy.html
    - shard-tglu-1:       NOTRUN -> [SKIP][9] ([i915#3555] / [i915#9323])
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-1/igt@gem_ccs@ctrl-surf-copy.html

  * igt@gem_close_race@multigpu-basic-threads:
    - shard-rkl:          NOTRUN -> [SKIP][10] ([i915#7697]) +1 other test skip
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-8/igt@gem_close_race@multigpu-basic-threads.html
    - shard-tglu-1:       NOTRUN -> [SKIP][11] ([i915#7697]) +1 other test skip
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-1/igt@gem_close_race@multigpu-basic-threads.html

  * igt@gem_ctx_sseu@invalid-args:
    - shard-dg2:          NOTRUN -> [SKIP][12] ([i915#280])
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg2-1/igt@gem_ctx_sseu@invalid-args.html
    - shard-tglu-1:       NOTRUN -> [SKIP][13] ([i915#280])
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-1/igt@gem_ctx_sseu@invalid-args.html

  * igt@gem_ctx_sseu@invalid-sseu:
    - shard-rkl:          NOTRUN -> [SKIP][14] ([i915#280])
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-2/igt@gem_ctx_sseu@invalid-sseu.html
    - shard-tglu:         NOTRUN -> [SKIP][15] ([i915#280])
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-5/igt@gem_ctx_sseu@invalid-sseu.html

  * igt@gem_exec_balancer@parallel-contexts:
    - shard-rkl:          NOTRUN -> [SKIP][16] ([i915#4525])
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-3/igt@gem_exec_balancer@parallel-contexts.html

  * igt@gem_exec_big@single:
    - shard-tglu-1:       NOTRUN -> [FAIL][17] ([i915#15816])
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-1/igt@gem_exec_big@single.html

  * igt@gem_exec_capture@capture-invisible:
    - shard-glk11:        NOTRUN -> [SKIP][18] ([i915#6334]) +1 other test skip
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-glk11/igt@gem_exec_capture@capture-invisible.html

  * igt@gem_exec_capture@capture-invisible@smem0:
    - shard-rkl:          NOTRUN -> [SKIP][19] ([i915#6334]) +1 other test skip
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-3/igt@gem_exec_capture@capture-invisible@smem0.html

  * igt@gem_exec_capture@capture-recoverable:
    - shard-rkl:          NOTRUN -> [SKIP][20] ([i915#6344])
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-8/igt@gem_exec_capture@capture-recoverable.html
    - shard-tglu-1:       NOTRUN -> [SKIP][21] ([i915#6344])
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-1/igt@gem_exec_capture@capture-recoverable.html

  * igt@gem_exec_reloc@basic-write-wc-noreloc:
    - shard-dg2:          NOTRUN -> [SKIP][22] ([i915#3281]) +1 other test skip
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg2-1/igt@gem_exec_reloc@basic-write-wc-noreloc.html

  * igt@gem_lmem_swapping@heavy-verify-multi-ccs:
    - shard-glk:          NOTRUN -> [SKIP][23] ([i915#4613]) +1 other test skip
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-glk4/igt@gem_lmem_swapping@heavy-verify-multi-ccs.html

  * igt@gem_lmem_swapping@random-engines:
    - shard-rkl:          NOTRUN -> [SKIP][24] ([i915#4613]) +2 other tests skip
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-8/igt@gem_lmem_swapping@random-engines.html

  * igt@gem_lmem_swapping@verify-random-ccs:
    - shard-tglu-1:       NOTRUN -> [SKIP][25] ([i915#4613]) +2 other tests skip
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-1/igt@gem_lmem_swapping@verify-random-ccs.html

  * igt@gem_media_vme:
    - shard-rkl:          NOTRUN -> [SKIP][26] ([i915#284])
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-7/igt@gem_media_vme.html
    - shard-tglu-1:       NOTRUN -> [SKIP][27] ([i915#284])
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-1/igt@gem_media_vme.html

  * igt@gem_mmap_gtt@basic-small-copy:
    - shard-dg2:          NOTRUN -> [SKIP][28] ([i915#4077])
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg2-1/igt@gem_mmap_gtt@basic-small-copy.html

  * igt@gem_mmap_wc@set-cache-level:
    - shard-dg2:          NOTRUN -> [SKIP][29] ([i915#4083])
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg2-1/igt@gem_mmap_wc@set-cache-level.html

  * igt@gem_partial_pwrite_pread@writes-after-reads-display:
    - shard-rkl:          NOTRUN -> [SKIP][30] ([i915#3282]) +3 other tests skip
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-2/igt@gem_partial_pwrite_pread@writes-after-reads-display.html

  * igt@gem_partial_pwrite_pread@writes-after-reads-uncached:
    - shard-dg2:          NOTRUN -> [SKIP][31] ([i915#3282])
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg2-1/igt@gem_partial_pwrite_pread@writes-after-reads-uncached.html

  * igt@gem_tiled_pread_basic@basic:
    - shard-rkl:          NOTRUN -> [SKIP][32] ([i915#15656])
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-7/igt@gem_tiled_pread_basic@basic.html

  * igt@gem_unfence_active_buffers:
    - shard-dg2:          NOTRUN -> [SKIP][33] ([i915#4879])
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg2-1/igt@gem_unfence_active_buffers.html

  * igt@gem_userptr_blits@coherency-sync:
    - shard-tglu-1:       NOTRUN -> [SKIP][34] ([i915#3297])
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-1/igt@gem_userptr_blits@coherency-sync.html

  * igt@gem_userptr_blits@readonly-pwrite-unsync:
    - shard-tglu:         NOTRUN -> [SKIP][35] ([i915#3297])
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-5/igt@gem_userptr_blits@readonly-pwrite-unsync.html

  * igt@gen9_exec_parse@bb-large:
    - shard-tglu:         NOTRUN -> [SKIP][36] ([i915#2527] / [i915#2856])
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-5/igt@gen9_exec_parse@bb-large.html

  * igt@gen9_exec_parse@bb-oversize:
    - shard-rkl:          NOTRUN -> [SKIP][37] ([i915#2527]) +4 other tests skip
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-7/igt@gen9_exec_parse@bb-oversize.html

  * igt@gen9_exec_parse@bb-start-far:
    - shard-dg2:          NOTRUN -> [SKIP][38] ([i915#2856])
   [38]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg2-1/igt@gen9_exec_parse@bb-start-far.html

  * igt@gen9_exec_parse@shadow-peek:
    - shard-tglu-1:       NOTRUN -> [SKIP][39] ([i915#2527] / [i915#2856]) +1 other test skip
   [39]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-1/igt@gen9_exec_parse@shadow-peek.html

  * igt@i915_drm_fdinfo@virtual-busy-hang-all:
    - shard-dg2:          NOTRUN -> [SKIP][40] ([i915#14118])
   [40]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg2-1/igt@i915_drm_fdinfo@virtual-busy-hang-all.html

  * igt@i915_module_load@fault-injection:
    - shard-dg2:          NOTRUN -> [ABORT][41] ([i915#15342] / [i915#15481])
   [41]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg2-6/igt@i915_module_load@fault-injection.html

  * igt@i915_module_load@fault-injection@__uc_init:
    - shard-rkl:          NOTRUN -> [SKIP][42] ([i915#15479]) +4 other tests skip
   [42]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-8/igt@i915_module_load@fault-injection@__uc_init.html

  * igt@i915_module_load@fault-injection@intel_connector_register:
    - shard-rkl:          NOTRUN -> [ABORT][43] ([i915#15342]) +1 other test abort
   [43]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-8/igt@i915_module_load@fault-injection@intel_connector_register.html

  * igt@i915_module_load@resize-bar:
    - shard-rkl:          NOTRUN -> [SKIP][44] ([i915#6412])
   [44]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-2/igt@i915_module_load@resize-bar.html
    - shard-tglu:         NOTRUN -> [SKIP][45] ([i915#6412])
   [45]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-5/igt@i915_module_load@resize-bar.html

  * igt@i915_pm_freq_api@freq-reset:
    - shard-tglu-1:       NOTRUN -> [SKIP][46] ([i915#8399])
   [46]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-1/igt@i915_pm_freq_api@freq-reset.html

  * igt@i915_pm_freq_api@freq-suspend@gt0:
    - shard-dg2:          [PASS][47] -> [INCOMPLETE][48] ([i915#13356] / [i915#13820]) +1 other test incomplete
   [47]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-dg2-5/igt@i915_pm_freq_api@freq-suspend@gt0.html
   [48]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg2-3/igt@i915_pm_freq_api@freq-suspend@gt0.html

  * igt@i915_pm_freq_mult@media-freq@gt0:
    - shard-rkl:          NOTRUN -> [SKIP][49] ([i915#6590]) +1 other test skip
   [49]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-3/igt@i915_pm_freq_mult@media-freq@gt0.html
    - shard-tglu:         NOTRUN -> [SKIP][50] ([i915#6590]) +1 other test skip
   [50]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-5/igt@i915_pm_freq_mult@media-freq@gt0.html

  * igt@i915_power@sanity:
    - shard-mtlp:         [PASS][51] -> [SKIP][52] ([i915#7984])
   [51]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-mtlp-7/igt@i915_power@sanity.html
   [52]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-mtlp-7/igt@i915_power@sanity.html

  * igt@i915_query@hwconfig_table:
    - shard-tglu-1:       NOTRUN -> [SKIP][53] ([i915#6245])
   [53]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-1/igt@i915_query@hwconfig_table.html

  * igt@i915_query@query-topology-known-pci-ids:
    - shard-rkl:          NOTRUN -> [SKIP][54] ([i915#16109])
   [54]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-3/igt@i915_query@query-topology-known-pci-ids.html

  * igt@i915_selftest@live:
    - shard-dg1:          [PASS][55] -> [DMESG-FAIL][56] ([i915#15560])
   [55]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-dg1-15/igt@i915_selftest@live.html
   [56]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg1-14/igt@i915_selftest@live.html

  * igt@i915_selftest@live@gem_contexts:
    - shard-dg1:          [PASS][57] -> [DMESG-FAIL][58] ([i915#15433])
   [57]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-dg1-15/igt@i915_selftest@live@gem_contexts.html
   [58]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg1-14/igt@i915_selftest@live@gem_contexts.html

  * igt@i915_suspend@fence-restore-untiled:
    - shard-glk:          NOTRUN -> [INCOMPLETE][59] ([i915#16182] / [i915#4817])
   [59]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-glk8/igt@i915_suspend@fence-restore-untiled.html

  * igt@kms_async_flips@async-flip-suspend-resume:
    - shard-glk11:        NOTRUN -> [INCOMPLETE][60] ([i915#12761]) +1 other test incomplete
   [60]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-glk11/igt@kms_async_flips@async-flip-suspend-resume.html

  * igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels:
    - shard-glk:          NOTRUN -> [SKIP][61] ([i915#1769])
   [61]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-glk4/igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels.html

  * igt@kms_atomic_transition@plane-all-modeset-transition-internal-panels:
    - shard-glk11:        NOTRUN -> [SKIP][62] ([i915#1769])
   [62]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-glk11/igt@kms_atomic_transition@plane-all-modeset-transition-internal-panels.html

  * igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-0:
    - shard-tglu:         NOTRUN -> [SKIP][63] ([i915#5286]) +1 other test skip
   [63]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-5/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-0.html

  * igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-hflip:
    - shard-rkl:          NOTRUN -> [SKIP][64] ([i915#5286]) +5 other tests skip
   [64]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-7/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-hflip.html

  * igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0:
    - shard-tglu-1:       NOTRUN -> [SKIP][65] ([i915#5286]) +2 other tests skip
   [65]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-1/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0.html

  * igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0-hflip:
    - shard-mtlp:         [PASS][66] -> [FAIL][67] ([i915#15733] / [i915#5138])
   [66]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-mtlp-4/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0-hflip.html
   [67]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-mtlp-8/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0-hflip.html

  * igt@kms_big_fb@y-tiled-8bpp-rotate-270:
    - shard-rkl:          NOTRUN -> [SKIP][68] ([i915#3638]) +4 other tests skip
   [68]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-7/igt@kms_big_fb@y-tiled-8bpp-rotate-270.html

  * igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-0-hflip:
    - shard-dg2:          NOTRUN -> [SKIP][69] ([i915#4538] / [i915#5190])
   [69]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg2-1/igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-0-hflip.html

  * igt@kms_big_fb@yf-tiled-16bpp-rotate-270:
    - shard-rkl:          NOTRUN -> [SKIP][70] +131 other tests skip
   [70]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-2/igt@kms_big_fb@yf-tiled-16bpp-rotate-270.html

  * igt@kms_ccs@bad-pixel-format-4-tiled-mtl-rc-ccs-cc@pipe-b-hdmi-a-1:
    - shard-dg2:          NOTRUN -> [SKIP][71] ([i915#10307] / [i915#6095]) +51 other tests skip
   [71]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg2-4/igt@kms_ccs@bad-pixel-format-4-tiled-mtl-rc-ccs-cc@pipe-b-hdmi-a-1.html

  * igt@kms_ccs@bad-rotation-90-4-tiled-dg2-mc-ccs@pipe-c-hdmi-a-2:
    - shard-rkl:          NOTRUN -> [SKIP][72] ([i915#14098] / [i915#14544] / [i915#6095]) +2 other tests skip
   [72]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-6/igt@kms_ccs@bad-rotation-90-4-tiled-dg2-mc-ccs@pipe-c-hdmi-a-2.html

  * igt@kms_ccs@ccs-on-another-bo-y-tiled-gen12-rc-ccs-cc:
    - shard-dg1:          [PASS][73] -> [DMESG-WARN][74] ([i915#4423]) +2 other tests dmesg-warn
   [73]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-dg1-15/igt@kms_ccs@ccs-on-another-bo-y-tiled-gen12-rc-ccs-cc.html
   [74]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg1-14/igt@kms_ccs@ccs-on-another-bo-y-tiled-gen12-rc-ccs-cc.html

  * igt@kms_ccs@crc-primary-basic-4-tiled-bmg-ccs:
    - shard-rkl:          NOTRUN -> [SKIP][75] ([i915#12313]) +1 other test skip
   [75]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-2/igt@kms_ccs@crc-primary-basic-4-tiled-bmg-ccs.html
    - shard-tglu:         NOTRUN -> [SKIP][76] ([i915#12313]) +1 other test skip
   [76]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-5/igt@kms_ccs@crc-primary-basic-4-tiled-bmg-ccs.html

  * igt@kms_ccs@crc-primary-rotation-180-4-tiled-mtl-rc-ccs@pipe-b-hdmi-a-2:
    - shard-rkl:          NOTRUN -> [SKIP][77] ([i915#6095]) +77 other tests skip
   [77]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-4/igt@kms_ccs@crc-primary-rotation-180-4-tiled-mtl-rc-ccs@pipe-b-hdmi-a-2.html

  * igt@kms_ccs@crc-primary-rotation-180-y-tiled-ccs@pipe-b-hdmi-a-2:
    - shard-rkl:          NOTRUN -> [SKIP][78] ([i915#14544] / [i915#6095]) +5 other tests skip
   [78]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-6/igt@kms_ccs@crc-primary-rotation-180-y-tiled-ccs@pipe-b-hdmi-a-2.html

  * igt@kms_ccs@crc-primary-rotation-180-y-tiled-gen12-rc-ccs-cc:
    - shard-glk11:        NOTRUN -> [SKIP][79] +167 other tests skip
   [79]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-glk11/igt@kms_ccs@crc-primary-rotation-180-y-tiled-gen12-rc-ccs-cc.html

  * igt@kms_ccs@crc-primary-suspend-4-tiled-mtl-rc-ccs-cc@pipe-c-hdmi-a-1:
    - shard-tglu-1:       NOTRUN -> [SKIP][80] ([i915#6095]) +49 other tests skip
   [80]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-1/igt@kms_ccs@crc-primary-suspend-4-tiled-mtl-rc-ccs-cc@pipe-c-hdmi-a-1.html

  * igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-rc-ccs-cc@pipe-c-hdmi-a-3:
    - shard-dg2:          NOTRUN -> [SKIP][81] ([i915#6095]) +8 other tests skip
   [81]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg2-8/igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-rc-ccs-cc@pipe-c-hdmi-a-3.html

  * igt@kms_ccs@crc-primary-suspend-yf-tiled-ccs:
    - shard-glk:          NOTRUN -> [INCOMPLETE][82] ([i915#15582]) +1 other test incomplete
   [82]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-glk6/igt@kms_ccs@crc-primary-suspend-yf-tiled-ccs.html

  * igt@kms_ccs@crc-primary-suspend-yf-tiled-ccs@pipe-c-hdmi-a-2:
    - shard-rkl:          NOTRUN -> [SKIP][83] ([i915#14098] / [i915#6095]) +55 other tests skip
   [83]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-1/igt@kms_ccs@crc-primary-suspend-yf-tiled-ccs@pipe-c-hdmi-a-2.html

  * igt@kms_ccs@random-ccs-data-4-tiled-mtl-rc-ccs-cc:
    - shard-tglu:         NOTRUN -> [SKIP][84] ([i915#6095]) +39 other tests skip
   [84]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-5/igt@kms_ccs@random-ccs-data-4-tiled-mtl-rc-ccs-cc.html

  * igt@kms_ccs@random-ccs-data-y-tiled-ccs@pipe-d-hdmi-a-1:
    - shard-dg2:          NOTRUN -> [SKIP][85] ([i915#10307] / [i915#10434] / [i915#6095])
   [85]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg2-4/igt@kms_ccs@random-ccs-data-y-tiled-ccs@pipe-d-hdmi-a-1.html

  * igt@kms_ccs@random-ccs-data-yf-tiled-ccs@pipe-a-hdmi-a-3:
    - shard-dg1:          NOTRUN -> [SKIP][86] ([i915#6095]) +243 other tests skip
   [86]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg1-12/igt@kms_ccs@random-ccs-data-yf-tiled-ccs@pipe-a-hdmi-a-3.html

  * igt@kms_cdclk@plane-scaling:
    - shard-rkl:          NOTRUN -> [SKIP][87] ([i915#3742])
   [87]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-2/igt@kms_cdclk@plane-scaling.html
    - shard-tglu:         NOTRUN -> [SKIP][88] ([i915#3742])
   [88]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-5/igt@kms_cdclk@plane-scaling.html

  * igt@kms_chamelium_audio@hdmi-audio-after-suspend:
    - shard-tglu-1:       NOTRUN -> [SKIP][89] ([i915#11151])
   [89]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-1/igt@kms_chamelium_audio@hdmi-audio-after-suspend.html

  * igt@kms_chamelium_color@ctm-0-25:
    - shard-dg2:          NOTRUN -> [SKIP][90]
   [90]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg2-1/igt@kms_chamelium_color@ctm-0-25.html

  * igt@kms_chamelium_color_pipeline@plane-lut1d-ctm3x4-lut1d:
    - shard-tglu:         NOTRUN -> [SKIP][91] ([i915#16471])
   [91]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-5/igt@kms_chamelium_color_pipeline@plane-lut1d-ctm3x4-lut1d.html

  * igt@kms_chamelium_edid@hdmi-edid-stress-resolution-non-4k:
    - shard-tglu-1:       NOTRUN -> [SKIP][92] ([i915#11151] / [i915#7828]) +6 other tests skip
   [92]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-1/igt@kms_chamelium_edid@hdmi-edid-stress-resolution-non-4k.html

  * igt@kms_chamelium_frames@dp-crc-single:
    - shard-tglu:         NOTRUN -> [SKIP][93] ([i915#11151] / [i915#7828]) +2 other tests skip
   [93]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-5/igt@kms_chamelium_frames@dp-crc-single.html

  * igt@kms_chamelium_hpd@dp-hpd:
    - shard-rkl:          NOTRUN -> [SKIP][94] ([i915#11151] / [i915#7828]) +7 other tests skip
   [94]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-2/igt@kms_chamelium_hpd@dp-hpd.html

  * igt@kms_chamelium_hpd@hdmi-hpd-fast:
    - shard-dg2:          NOTRUN -> [SKIP][95] ([i915#11151] / [i915#7828]) +1 other test skip
   [95]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg2-1/igt@kms_chamelium_hpd@hdmi-hpd-fast.html

  * igt@kms_color@deep-color:
    - shard-rkl:          NOTRUN -> [SKIP][96] ([i915#12655] / [i915#3555])
   [96]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-7/igt@kms_color@deep-color.html

  * igt@kms_content_protection@atomic-dpms:
    - shard-rkl:          NOTRUN -> [SKIP][97] ([i915#15865]) +2 other tests skip
   [97]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-3/igt@kms_content_protection@atomic-dpms.html
    - shard-tglu:         NOTRUN -> [SKIP][98] ([i915#15865])
   [98]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-5/igt@kms_content_protection@atomic-dpms.html

  * igt@kms_content_protection@dp-mst-lic-type-1:
    - shard-dg2:          NOTRUN -> [SKIP][99] ([i915#15330] / [i915#3299])
   [99]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg2-1/igt@kms_content_protection@dp-mst-lic-type-1.html
    - shard-tglu-1:       NOTRUN -> [SKIP][100] ([i915#15330] / [i915#3116] / [i915#3299])
   [100]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-1/igt@kms_content_protection@dp-mst-lic-type-1.html

  * igt@kms_content_protection@dp-mst-type-0:
    - shard-rkl:          NOTRUN -> [SKIP][101] ([i915#15330] / [i915#3116]) +1 other test skip
   [101]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-7/igt@kms_content_protection@dp-mst-type-0.html

  * igt@kms_content_protection@mei-interface:
    - shard-dg2:          NOTRUN -> [SKIP][102] ([i915#15865])
   [102]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg2-1/igt@kms_content_protection@mei-interface.html
    - shard-tglu-1:       NOTRUN -> [SKIP][103] ([i915#15865]) +3 other tests skip
   [103]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-1/igt@kms_content_protection@mei-interface.html

  * igt@kms_cursor_crc@cursor-onscreen-128x42@pipe-a-hdmi-a-1:
    - shard-rkl:          NOTRUN -> [FAIL][104] ([i915#13566])
   [104]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-8/igt@kms_cursor_crc@cursor-onscreen-128x42@pipe-a-hdmi-a-1.html

  * igt@kms_cursor_crc@cursor-random-512x512:
    - shard-rkl:          NOTRUN -> [SKIP][105] ([i915#13049]) +1 other test skip
   [105]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-8/igt@kms_cursor_crc@cursor-random-512x512.html
    - shard-tglu-1:       NOTRUN -> [SKIP][106] ([i915#13049]) +1 other test skip
   [106]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-1/igt@kms_cursor_crc@cursor-random-512x512.html

  * igt@kms_cursor_crc@cursor-suspend:
    - shard-glk:          NOTRUN -> [INCOMPLETE][107] ([i915#12358] / [i915#14152] / [i915#7882])
   [107]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-glk5/igt@kms_cursor_crc@cursor-suspend.html

  * igt@kms_cursor_crc@cursor-suspend@pipe-a-hdmi-a-1:
    - shard-glk:          NOTRUN -> [INCOMPLETE][108] ([i915#12358] / [i915#14152])
   [108]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-glk5/igt@kms_cursor_crc@cursor-suspend@pipe-a-hdmi-a-1.html

  * igt@kms_cursor_crc@cursor-suspend@pipe-a-hdmi-a-2:
    - shard-rkl:          [PASS][109] -> [INCOMPLETE][110] ([i915#12358] / [i915#14152]) +1 other test incomplete
   [109]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-4/igt@kms_cursor_crc@cursor-suspend@pipe-a-hdmi-a-2.html
   [110]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-3/igt@kms_cursor_crc@cursor-suspend@pipe-a-hdmi-a-2.html

  * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-varying-size:
    - shard-tglu:         NOTRUN -> [SKIP][111] ([i915#4103])
   [111]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-5/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-varying-size.html

  * igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions-varying-size:
    - shard-tglu-1:       NOTRUN -> [SKIP][112] +69 other tests skip
   [112]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-1/igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions-varying-size.html
    - shard-dg2:          NOTRUN -> [SKIP][113] ([i915#13046] / [i915#5354])
   [113]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg2-1/igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions-varying-size.html

  * igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions:
    - shard-tglu-1:       NOTRUN -> [SKIP][114] ([i915#4103])
   [114]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-1/igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions.html

  * igt@kms_display_modes@extended-mode-basic:
    - shard-rkl:          NOTRUN -> [SKIP][115] ([i915#13691])
   [115]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-3/igt@kms_display_modes@extended-mode-basic.html

  * igt@kms_dither@fb-8bpc-vs-panel-6bpc@pipe-a-hdmi-a-2:
    - shard-rkl:          NOTRUN -> [SKIP][116] ([i915#3804])
   [116]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-7/igt@kms_dither@fb-8bpc-vs-panel-6bpc@pipe-a-hdmi-a-2.html

  * igt@kms_dp_link_training@uhbr-mst:
    - shard-tglu-1:       NOTRUN -> [SKIP][117] ([i915#13748])
   [117]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-1/igt@kms_dp_link_training@uhbr-mst.html

  * igt@kms_dsc@dsc-fractional-bpp-bigjoiner:
    - shard-tglu-1:       NOTRUN -> [SKIP][118] ([i915#16361]) +1 other test skip
   [118]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-1/igt@kms_dsc@dsc-fractional-bpp-bigjoiner.html

  * igt@kms_dsc@dsc-with-output-formats-bigjoiner:
    - shard-rkl:          NOTRUN -> [SKIP][119] ([i915#16361]) +5 other tests skip
   [119]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-2/igt@kms_dsc@dsc-with-output-formats-bigjoiner.html
    - shard-tglu:         NOTRUN -> [SKIP][120] ([i915#16361]) +1 other test skip
   [120]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-5/igt@kms_dsc@dsc-with-output-formats-bigjoiner.html

  * igt@kms_fbcon_fbt@psr-suspend:
    - shard-rkl:          NOTRUN -> [SKIP][121] ([i915#3955])
   [121]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-7/igt@kms_fbcon_fbt@psr-suspend.html

  * igt@kms_feature_discovery@chamelium:
    - shard-tglu-1:       NOTRUN -> [SKIP][122] ([i915#2065])
   [122]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-1/igt@kms_feature_discovery@chamelium.html

  * igt@kms_feature_discovery@display-3x:
    - shard-rkl:          NOTRUN -> [SKIP][123] ([i915#16081])
   [123]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-7/igt@kms_feature_discovery@display-3x.html
    - shard-tglu-1:       NOTRUN -> [SKIP][124] ([i915#16081])
   [124]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-1/igt@kms_feature_discovery@display-3x.html

  * igt@kms_feature_discovery@dp-mst:
    - shard-tglu:         NOTRUN -> [SKIP][125] ([i915#9337])
   [125]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-5/igt@kms_feature_discovery@dp-mst.html

  * igt@kms_feature_discovery@psr1:
    - shard-rkl:          NOTRUN -> [SKIP][126] ([i915#658])
   [126]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-8/igt@kms_feature_discovery@psr1.html

  * igt@kms_flip@2x-dpms-vs-vblank-race-interruptible:
    - shard-dg2:          NOTRUN -> [SKIP][127] ([i915#9934])
   [127]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg2-1/igt@kms_flip@2x-dpms-vs-vblank-race-interruptible.html

  * igt@kms_flip@2x-flip-vs-dpms:
    - shard-rkl:          NOTRUN -> [SKIP][128] ([i915#9934]) +11 other tests skip
   [128]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-2/igt@kms_flip@2x-flip-vs-dpms.html
    - shard-tglu:         NOTRUN -> [SKIP][129] ([i915#3637] / [i915#9934]) +2 other tests skip
   [129]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-5/igt@kms_flip@2x-flip-vs-dpms.html

  * igt@kms_flip@2x-plain-flip-fb-recreate-interruptible:
    - shard-tglu-1:       NOTRUN -> [SKIP][130] ([i915#3637] / [i915#9934]) +9 other tests skip
   [130]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-1/igt@kms_flip@2x-plain-flip-fb-recreate-interruptible.html

  * igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-upscaling:
    - shard-tglu:         NOTRUN -> [SKIP][131] ([i915#15643])
   [131]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-5/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-upscaling.html

  * igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-32bpp-yftile-upscaling:
    - shard-rkl:          NOTRUN -> [SKIP][132] ([i915#15643]) +3 other tests skip
   [132]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-8/igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-32bpp-yftile-upscaling.html
    - shard-tglu-1:       NOTRUN -> [SKIP][133] ([i915#15643])
   [133]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-1/igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-32bpp-yftile-upscaling.html

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-draw-mmap-wc:
    - shard-rkl:          NOTRUN -> [SKIP][134] ([i915#1825]) +7 other tests skip
   [134]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-7/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-pri-shrfb-draw-render:
    - shard-dg2:          NOTRUN -> [SKIP][135] ([i915#15991] / [i915#5354]) +1 other test skip
   [135]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg2-1/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-pri-shrfb-draw-render.html

  * igt@kms_frontbuffer_tracking@fbc-suspend:
    - shard-rkl:          [PASS][136] -> [ABORT][137] ([i915#15132])
   [136]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-5/igt@kms_frontbuffer_tracking@fbc-suspend.html
   [137]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-1/igt@kms_frontbuffer_tracking@fbc-suspend.html

  * igt@kms_frontbuffer_tracking@fbc-tiling-4:
    - shard-rkl:          NOTRUN -> [SKIP][138] ([i915#5439]) +1 other test skip
   [138]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-7/igt@kms_frontbuffer_tracking@fbc-tiling-4.html
    - shard-tglu-1:       NOTRUN -> [SKIP][139] ([i915#5439])
   [139]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-1/igt@kms_frontbuffer_tracking@fbc-tiling-4.html

  * igt@kms_frontbuffer_tracking@fbchdr-1p-offscreen-pri-indfb-draw-mmap-gtt:
    - shard-dg2:          NOTRUN -> [SKIP][140] ([i915#15990]) +5 other tests skip
   [140]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg2-1/igt@kms_frontbuffer_tracking@fbchdr-1p-offscreen-pri-indfb-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@fbchdr-1p-primscrn-pri-indfb-draw-mmap-cpu:
    - shard-tglu:         NOTRUN -> [SKIP][141] ([i915#15989]) +10 other tests skip
   [141]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-5/igt@kms_frontbuffer_tracking@fbchdr-1p-primscrn-pri-indfb-draw-mmap-cpu.html

  * igt@kms_frontbuffer_tracking@fbchdr-tiling-linear:
    - shard-rkl:          NOTRUN -> [SKIP][142] ([i915#15989]) +31 other tests skip
   [142]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-2/igt@kms_frontbuffer_tracking@fbchdr-tiling-linear.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-cur-indfb-draw-render:
    - shard-glk10:        NOTRUN -> [SKIP][143] +88 other tests skip
   [143]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-glk10/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-cur-indfb-draw-render.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-shrfb-pgflip-blt:
    - shard-dg2:          NOTRUN -> [SKIP][144] ([i915#15102]) +8 other tests skip
   [144]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg2-1/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-shrfb-pgflip-blt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-rte:
    - shard-rkl:          NOTRUN -> [SKIP][145] ([i915#15102] / [i915#3023]) +19 other tests skip
   [145]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-7/igt@kms_frontbuffer_tracking@fbcpsr-1p-rte.html

  * igt@kms_frontbuffer_tracking@fbcpsr-tiling-4:
    - shard-tglu:         NOTRUN -> [SKIP][146] ([i915#5439])
   [146]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-5/igt@kms_frontbuffer_tracking@fbcpsr-tiling-4.html

  * igt@kms_frontbuffer_tracking@fbcpsrhdr-1p-primscrn-cur-indfb-draw-mmap-wc:
    - shard-glk:          NOTRUN -> [SKIP][147] +184 other tests skip
   [147]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-glk6/igt@kms_frontbuffer_tracking@fbcpsrhdr-1p-primscrn-cur-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbcpsrhdr-1p-primscrn-spr-indfb-draw-mmap-cpu:
    - shard-rkl:          NOTRUN -> [SKIP][148] ([i915#15102]) +36 other tests skip
   [148]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-3/igt@kms_frontbuffer_tracking@fbcpsrhdr-1p-primscrn-spr-indfb-draw-mmap-cpu.html

  * igt@kms_frontbuffer_tracking@fbcpsrhdr-2p-scndscrn-pri-indfb-draw-blt:
    - shard-dg2:          NOTRUN -> [SKIP][149] ([i915#15991]) +4 other tests skip
   [149]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg2-1/igt@kms_frontbuffer_tracking@fbcpsrhdr-2p-scndscrn-pri-indfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbcpsrhdr-rgb101010-draw-mmap-gtt:
    - shard-tglu:         NOTRUN -> [SKIP][150] ([i915#15102]) +19 other tests skip
   [150]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-5/igt@kms_frontbuffer_tracking@fbcpsrhdr-rgb101010-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@hdr-1p-primscrn-cur-indfb-draw-render:
    - shard-dg2:          NOTRUN -> [SKIP][151] ([i915#15989]) +2 other tests skip
   [151]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg2-1/igt@kms_frontbuffer_tracking@hdr-1p-primscrn-cur-indfb-draw-render.html

  * igt@kms_frontbuffer_tracking@hdr-2p-primscrn-spr-indfb-draw-blt:
    - shard-dg1:          NOTRUN -> [SKIP][152]
   [152]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg1-14/igt@kms_frontbuffer_tracking@hdr-2p-primscrn-spr-indfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@hdr-2p-scndscrn-pri-shrfb-draw-mmap-gtt:
    - shard-glk:          [PASS][153] -> [SKIP][154] +20 other tests skip
   [153]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-glk8/igt@kms_frontbuffer_tracking@hdr-2p-scndscrn-pri-shrfb-draw-mmap-gtt.html
   [154]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-glk3/igt@kms_frontbuffer_tracking@hdr-2p-scndscrn-pri-shrfb-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@hdr-indfb-scaledprimary:
    - shard-tglu-1:       NOTRUN -> [SKIP][155] ([i915#15989]) +17 other tests skip
   [155]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-1/igt@kms_frontbuffer_tracking@hdr-indfb-scaledprimary.html

  * igt@kms_frontbuffer_tracking@hdr-rgb101010-draw-mmap-wc:
    - shard-rkl:          [PASS][156] -> [SKIP][157] ([i915#15989]) +8 other tests skip
   [156]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-1/igt@kms_frontbuffer_tracking@hdr-rgb101010-draw-mmap-wc.html
   [157]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-3/igt@kms_frontbuffer_tracking@hdr-rgb101010-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@hdr-rgb101010-draw-render:
    - shard-dg2:          [PASS][158] -> [SKIP][159] ([i915#15989]) +8 other tests skip
   [158]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-dg2-10/igt@kms_frontbuffer_tracking@hdr-rgb101010-draw-render.html
   [159]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg2-1/igt@kms_frontbuffer_tracking@hdr-rgb101010-draw-render.html

  * igt@kms_frontbuffer_tracking@psr-2p-scndscrn-pri-shrfb-draw-mmap-wc:
    - shard-tglu:         NOTRUN -> [SKIP][160] +53 other tests skip
   [160]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-5/igt@kms_frontbuffer_tracking@psr-2p-scndscrn-pri-shrfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@psrhdr-1p-offscreen-pri-shrfb-draw-blt:
    - shard-dg1:          NOTRUN -> [SKIP][161] ([i915#15102])
   [161]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg1-14/igt@kms_frontbuffer_tracking@psrhdr-1p-offscreen-pri-shrfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@psrhdr-rgb101010-draw-blt:
    - shard-tglu-1:       NOTRUN -> [SKIP][162] ([i915#15102]) +35 other tests skip
   [162]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-1/igt@kms_frontbuffer_tracking@psrhdr-rgb101010-draw-blt.html

  * igt@kms_hdr@bpc-switch-dpms:
    - shard-dg2:          [PASS][163] -> [SKIP][164] ([i915#16518] / [i915#3555] / [i915#8228])
   [163]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-dg2-10/igt@kms_hdr@bpc-switch-dpms.html
   [164]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg2-8/igt@kms_hdr@bpc-switch-dpms.html

  * igt@kms_hdr@bpc-switch-suspend:
    - shard-tglu:         NOTRUN -> [SKIP][165] ([i915#3555] / [i915#8228])
   [165]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-5/igt@kms_hdr@bpc-switch-suspend.html

  * igt@kms_hdr@static-toggle:
    - shard-rkl:          NOTRUN -> [SKIP][166] ([i915#3555] / [i915#8228]) +1 other test skip
   [166]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-8/igt@kms_hdr@static-toggle.html
    - shard-tglu-1:       NOTRUN -> [SKIP][167] ([i915#3555] / [i915#8228]) +1 other test skip
   [167]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-1/igt@kms_hdr@static-toggle.html

  * igt@kms_joiner@basic-big-joiner:
    - shard-dg2:          NOTRUN -> [SKIP][168] ([i915#15460])
   [168]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg2-1/igt@kms_joiner@basic-big-joiner.html
    - shard-tglu-1:       NOTRUN -> [SKIP][169] ([i915#15460])
   [169]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-1/igt@kms_joiner@basic-big-joiner.html

  * igt@kms_joiner@invalid-modeset-big-joiner:
    - shard-rkl:          NOTRUN -> [SKIP][170] ([i915#15460])
   [170]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-8/igt@kms_joiner@invalid-modeset-big-joiner.html

  * igt@kms_joiner@invalid-modeset-force-big-joiner:
    - shard-tglu-1:       NOTRUN -> [SKIP][171] ([i915#15459])
   [171]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-1/igt@kms_joiner@invalid-modeset-force-big-joiner.html

  * igt@kms_joiner@switch-modeset-ultra-joiner-big-joiner:
    - shard-rkl:          NOTRUN -> [SKIP][172] ([i915#15638] / [i915#15722])
   [172]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-2/igt@kms_joiner@switch-modeset-ultra-joiner-big-joiner.html
    - shard-tglu:         NOTRUN -> [SKIP][173] ([i915#15638] / [i915#15722])
   [173]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-5/igt@kms_joiner@switch-modeset-ultra-joiner-big-joiner.html

  * igt@kms_mst@mst-suspend-read-crc:
    - shard-rkl:          NOTRUN -> [SKIP][174] ([i915#16451])
   [174]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-7/igt@kms_mst@mst-suspend-read-crc.html

  * igt@kms_pipe_crc_basic@suspend-read-crc:
    - shard-rkl:          [PASS][175] -> [INCOMPLETE][176] ([i915#12756] / [i915#13476])
   [175]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-8/igt@kms_pipe_crc_basic@suspend-read-crc.html
   [176]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-6/igt@kms_pipe_crc_basic@suspend-read-crc.html

  * igt@kms_pipe_crc_basic@suspend-read-crc@pipe-a-hdmi-a-2:
    - shard-rkl:          NOTRUN -> [INCOMPLETE][177] ([i915#13476])
   [177]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-6/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-a-hdmi-a-2.html

  * igt@kms_pipe_crc_basic@suspend-read-crc@pipe-b-hdmi-a-2:
    - shard-glk:          NOTRUN -> [INCOMPLETE][178] ([i915#13409] / [i915#13476])
   [178]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-glk9/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-b-hdmi-a-2.html

  * igt@kms_plane@pixel-format-4-tiled-dg2-mc-ccs-modifier-source-clamping:
    - shard-tglu:         NOTRUN -> [SKIP][179] ([i915#15709]) +2 other tests skip
   [179]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-5/igt@kms_plane@pixel-format-4-tiled-dg2-mc-ccs-modifier-source-clamping.html

  * igt@kms_plane@pixel-format-4-tiled-dg2-rc-ccs-cc-modifier-source-clamping:
    - shard-tglu-1:       NOTRUN -> [SKIP][180] ([i915#15709]) +4 other tests skip
   [180]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-1/igt@kms_plane@pixel-format-4-tiled-dg2-rc-ccs-cc-modifier-source-clamping.html

  * igt@kms_plane@pixel-format-y-tiled-gen12-rc-ccs-cc-modifier-source-clamping:
    - shard-dg2:          NOTRUN -> [SKIP][181] ([i915#15709])
   [181]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg2-1/igt@kms_plane@pixel-format-y-tiled-gen12-rc-ccs-cc-modifier-source-clamping.html

  * igt@kms_plane@pixel-format-y-tiled-gen12-rc-ccs-cc-modifier@pipe-a-plane-5:
    - shard-rkl:          NOTRUN -> [SKIP][182] ([i915#16386]) +3 other tests skip
   [182]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-7/igt@kms_plane@pixel-format-y-tiled-gen12-rc-ccs-cc-modifier@pipe-a-plane-5.html

  * igt@kms_plane@pixel-format-yf-tiled-modifier:
    - shard-rkl:          NOTRUN -> [SKIP][183] ([i915#15709]) +5 other tests skip
   [183]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-2/igt@kms_plane@pixel-format-yf-tiled-modifier.html

  * igt@kms_plane@planar-pixel-format-settings@nv12-tile4-src-y:
    - shard-rkl:          NOTRUN -> [SKIP][184] ([i915#16112])
   [184]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-3/igt@kms_plane@planar-pixel-format-settings@nv12-tile4-src-y.html

  * igt@kms_plane@plane-panning-bottom-right-suspend:
    - shard-glk10:        NOTRUN -> [INCOMPLETE][185] ([i915#13026]) +1 other test incomplete
   [185]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-glk10/igt@kms_plane@plane-panning-bottom-right-suspend.html

  * igt@kms_plane_alpha_blend@alpha-opaque-fb:
    - shard-glk10:        NOTRUN -> [FAIL][186] ([i915#10647] / [i915#12169])
   [186]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-glk10/igt@kms_plane_alpha_blend@alpha-opaque-fb.html

  * igt@kms_plane_alpha_blend@alpha-opaque-fb@pipe-c-hdmi-a-1:
    - shard-glk10:        NOTRUN -> [FAIL][187] ([i915#10647]) +1 other test fail
   [187]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-glk10/igt@kms_plane_alpha_blend@alpha-opaque-fb@pipe-c-hdmi-a-1.html

  * igt@kms_plane_lowres@tiling-yf:
    - shard-rkl:          NOTRUN -> [SKIP][188] ([i915#3555]) +4 other tests skip
   [188]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-3/igt@kms_plane_lowres@tiling-yf.html
    - shard-tglu:         NOTRUN -> [SKIP][189] ([i915#3555]) +4 other tests skip
   [189]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-5/igt@kms_plane_lowres@tiling-yf.html

  * igt@kms_plane_multiple@2x-tiling-none:
    - shard-rkl:          NOTRUN -> [SKIP][190] ([i915#13958]) +1 other test skip
   [190]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-7/igt@kms_plane_multiple@2x-tiling-none.html

  * igt@kms_plane_scaling@plane-downscale-factor-0-75-with-rotation@pipe-a:
    - shard-rkl:          NOTRUN -> [SKIP][191] ([i915#15329]) +3 other tests skip
   [191]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-3/igt@kms_plane_scaling@plane-downscale-factor-0-75-with-rotation@pipe-a.html
    - shard-tglu:         NOTRUN -> [SKIP][192] ([i915#15329]) +4 other tests skip
   [192]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-5/igt@kms_plane_scaling@plane-downscale-factor-0-75-with-rotation@pipe-a.html

  * igt@kms_plane_scaling@plane-scaler-with-clipping-clamping-rotation:
    - shard-tglu-1:       NOTRUN -> [SKIP][193] ([i915#15329] / [i915#3555])
   [193]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-1/igt@kms_plane_scaling@plane-scaler-with-clipping-clamping-rotation.html

  * igt@kms_plane_scaling@plane-upscale-20x20-with-rotation@pipe-a:
    - shard-tglu-1:       NOTRUN -> [SKIP][194] ([i915#15329]) +8 other tests skip
   [194]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-1/igt@kms_plane_scaling@plane-upscale-20x20-with-rotation@pipe-a.html

  * igt@kms_pm_backlight@basic-brightness:
    - shard-tglu:         NOTRUN -> [SKIP][195] ([i915#12343] / [i915#9812])
   [195]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-5/igt@kms_pm_backlight@basic-brightness.html

  * igt@kms_pm_backlight@brightness-with-dpms:
    - shard-rkl:          NOTRUN -> [SKIP][196] ([i915#12343])
   [196]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-7/igt@kms_pm_backlight@brightness-with-dpms.html
    - shard-tglu-1:       NOTRUN -> [SKIP][197] ([i915#12343])
   [197]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-1/igt@kms_pm_backlight@brightness-with-dpms.html

  * igt@kms_pm_dc@dc5-retention-flops:
    - shard-rkl:          NOTRUN -> [SKIP][198] ([i915#3828])
   [198]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-7/igt@kms_pm_dc@dc5-retention-flops.html
    - shard-tglu-1:       NOTRUN -> [SKIP][199] ([i915#3828])
   [199]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-1/igt@kms_pm_dc@dc5-retention-flops.html

  * igt@kms_pm_rpm@dpms-mode-unset-non-lpsp:
    - shard-dg2:          [PASS][200] -> [SKIP][201] ([i915#15073])
   [200]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-dg2-5/igt@kms_pm_rpm@dpms-mode-unset-non-lpsp.html
   [201]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg2-4/igt@kms_pm_rpm@dpms-mode-unset-non-lpsp.html

  * igt@kms_pm_rpm@dpms-non-lpsp:
    - shard-tglu-1:       NOTRUN -> [SKIP][202] ([i915#15073])
   [202]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-1/igt@kms_pm_rpm@dpms-non-lpsp.html

  * igt@kms_pm_rpm@modeset-lpsp-stress:
    - shard-dg2:          NOTRUN -> [SKIP][203] ([i915#15073])
   [203]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg2-1/igt@kms_pm_rpm@modeset-lpsp-stress.html
    - shard-dg1:          [PASS][204] -> [SKIP][205] ([i915#15073]) +2 other tests skip
   [204]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-dg1-15/igt@kms_pm_rpm@modeset-lpsp-stress.html
   [205]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg1-13/igt@kms_pm_rpm@modeset-lpsp-stress.html

  * igt@kms_pm_rpm@modeset-non-lpsp:
    - shard-rkl:          [PASS][206] -> [SKIP][207] ([i915#15073]) +2 other tests skip
   [206]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-6/igt@kms_pm_rpm@modeset-non-lpsp.html
   [207]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-2/igt@kms_pm_rpm@modeset-non-lpsp.html

  * igt@kms_pm_rpm@package-g7:
    - shard-tglu:         NOTRUN -> [SKIP][208] ([i915#15403])
   [208]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-5/igt@kms_pm_rpm@package-g7.html
    - shard-rkl:          NOTRUN -> [SKIP][209] ([i915#15403])
   [209]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-2/igt@kms_pm_rpm@package-g7.html

  * igt@kms_pm_rpm@system-suspend-idle:
    - shard-dg1:          NOTRUN -> [DMESG-WARN][210] ([i915#4423])
   [210]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg1-14/igt@kms_pm_rpm@system-suspend-idle.html

  * igt@kms_prime@d3hot:
    - shard-rkl:          NOTRUN -> [SKIP][211] ([i915#6524])
   [211]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-8/igt@kms_prime@d3hot.html

  * igt@kms_psr2_sf@fbc-pr-cursor-plane-update-sf:
    - shard-tglu:         NOTRUN -> [SKIP][212] ([i915#11520]) +4 other tests skip
   [212]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-5/igt@kms_psr2_sf@fbc-pr-cursor-plane-update-sf.html

  * igt@kms_psr2_sf@fbc-pr-overlay-plane-update-sf-dmg-area:
    - shard-dg2:          NOTRUN -> [SKIP][213] ([i915#11520]) +1 other test skip
   [213]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg2-1/igt@kms_psr2_sf@fbc-pr-overlay-plane-update-sf-dmg-area.html
    - shard-tglu-1:       NOTRUN -> [SKIP][214] ([i915#11520]) +5 other tests skip
   [214]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-1/igt@kms_psr2_sf@fbc-pr-overlay-plane-update-sf-dmg-area.html

  * igt@kms_psr2_sf@fbc-psr2-overlay-plane-move-continuous-sf:
    - shard-glk11:        NOTRUN -> [SKIP][215] ([i915#11520]) +4 other tests skip
   [215]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-glk11/igt@kms_psr2_sf@fbc-psr2-overlay-plane-move-continuous-sf.html

  * igt@kms_psr2_sf@pr-cursor-plane-move-continuous-sf:
    - shard-glk:          NOTRUN -> [SKIP][216] ([i915#11520]) +1 other test skip
   [216]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-glk4/igt@kms_psr2_sf@pr-cursor-plane-move-continuous-sf.html

  * igt@kms_psr2_sf@psr2-overlay-plane-update-continuous-sf:
    - shard-glk10:        NOTRUN -> [SKIP][217] ([i915#11520]) +2 other tests skip
   [217]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-glk10/igt@kms_psr2_sf@psr2-overlay-plane-update-continuous-sf.html

  * igt@kms_psr2_sf@psr2-overlay-plane-update-sf-dmg-area:
    - shard-rkl:          NOTRUN -> [SKIP][218] ([i915#11520]) +11 other tests skip
   [218]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-8/igt@kms_psr2_sf@psr2-overlay-plane-update-sf-dmg-area.html

  * igt@kms_psr2_su@page_flip-xrgb8888:
    - shard-rkl:          NOTRUN -> [SKIP][219] ([i915#9683])
   [219]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-3/igt@kms_psr2_su@page_flip-xrgb8888.html
    - shard-tglu:         NOTRUN -> [SKIP][220] ([i915#9683])
   [220]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-5/igt@kms_psr2_su@page_flip-xrgb8888.html

  * igt@kms_psr@fbc-psr-no-drrs:
    - shard-tglu:         NOTRUN -> [SKIP][221] ([i915#9732]) +7 other tests skip
   [221]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-5/igt@kms_psr@fbc-psr-no-drrs.html

  * igt@kms_psr@fbc-psr2-cursor-mmap-gtt:
    - shard-dg2:          NOTRUN -> [SKIP][222] ([i915#1072] / [i915#9732]) +3 other tests skip
   [222]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg2-1/igt@kms_psr@fbc-psr2-cursor-mmap-gtt.html

  * igt@kms_psr@psr2-cursor-mmap-gtt:
    - shard-rkl:          NOTRUN -> [SKIP][223] ([i915#1072] / [i915#9732]) +24 other tests skip
   [223]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-8/igt@kms_psr@psr2-cursor-mmap-gtt.html
    - shard-tglu-1:       NOTRUN -> [SKIP][224] ([i915#9732]) +17 other tests skip
   [224]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-1/igt@kms_psr@psr2-cursor-mmap-gtt.html

  * igt@kms_psr_stress_test@invalidate-primary-flip-overlay:
    - shard-tglu:         NOTRUN -> [SKIP][225] ([i915#15949])
   [225]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-5/igt@kms_psr_stress_test@invalidate-primary-flip-overlay.html
    - shard-rkl:          NOTRUN -> [SKIP][226] ([i915#15949])
   [226]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-3/igt@kms_psr_stress_test@invalidate-primary-flip-overlay.html

  * igt@kms_rotation_crc@multiplane-rotation:
    - shard-glk:          NOTRUN -> [INCOMPLETE][227] ([i915#15492] / [i915#16184])
   [227]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-glk6/igt@kms_rotation_crc@multiplane-rotation.html

  * igt@kms_rotation_crc@primary-yf-tiled-reflect-x-270:
    - shard-rkl:          NOTRUN -> [SKIP][228] ([i915#5289]) +1 other test skip
   [228]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-3/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-270.html
    - shard-tglu:         NOTRUN -> [SKIP][229] ([i915#5289])
   [229]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-5/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-270.html

  * igt@kms_rotation_crc@primary-yf-tiled-reflect-x-90:
    - shard-tglu-1:       NOTRUN -> [SKIP][230] ([i915#5289])
   [230]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-tglu-1/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-90.html

  * igt@kms_vblank@ts-continuation-suspend:
    - shard-glk10:        NOTRUN -> [INCOMPLETE][231] ([i915#12276]) +1 other test incomplete
   [231]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-glk10/igt@kms_vblank@ts-continuation-suspend.html

  * igt@kms_vrr@max-min:
    - shard-rkl:          NOTRUN -> [SKIP][232] ([i915#9906])
   [232]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-7/igt@kms_vrr@max-min.html

  * igt@perf@mi-rpc:
    - shard-rkl:          NOTRUN -> [SKIP][233] ([i915#2434])
   [233]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-7/igt@perf@mi-rpc.html

  * igt@perf_pmu@rc6-suspend:
    - shard-rkl:          [PASS][234] -> [INCOMPLETE][235] ([i915#13520])
   [234]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-5/igt@perf_pmu@rc6-suspend.html
   [235]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-6/igt@perf_pmu@rc6-suspend.html

  * igt@prime_vgem@fence-write-hang:
    - shard-rkl:          NOTRUN -> [SKIP][236] ([i915#3708])
   [236]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-8/igt@prime_vgem@fence-write-hang.html

  * igt@sriov_basic@enable-vfs-bind-unbind-each-numvfs-all:
    - shard-rkl:          NOTRUN -> [SKIP][237] ([i915#9917])
   [237]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-8/igt@sriov_basic@enable-vfs-bind-unbind-each-numvfs-all.html

  
#### Possible fixes ####

  * igt@gem_eio@suspend:
    - shard-rkl:          [ABORT][238] ([i915#15131]) -> [PASS][239]
   [238]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-1/igt@gem_eio@suspend.html
   [239]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-3/igt@gem_eio@suspend.html

  * igt@gem_exec_suspend@basic-s0:
    - shard-rkl:          [ABORT][240] ([i915#15131] / [i915#15542]) -> [PASS][241] +1 other test pass
   [240]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-1/igt@gem_exec_suspend@basic-s0.html
   [241]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-7/igt@gem_exec_suspend@basic-s0.html

  * igt@kms_async_flips@alternate-sync-async-flip:
    - shard-dg1:          [FAIL][242] ([i915#14888]) -> [PASS][243]
   [242]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-dg1-15/igt@kms_async_flips@alternate-sync-async-flip.html
   [243]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg1-13/igt@kms_async_flips@alternate-sync-async-flip.html

  * igt@kms_async_flips@async-flip-suspend-resume:
    - shard-rkl:          [INCOMPLETE][244] ([i915#12761]) -> [PASS][245]
   [244]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-3/igt@kms_async_flips@async-flip-suspend-resume.html
   [245]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-8/igt@kms_async_flips@async-flip-suspend-resume.html

  * igt@kms_cursor_crc@cursor-random-256x85@pipe-a-hdmi-a-1:
    - shard-rkl:          [FAIL][246] ([i915#13566]) -> [PASS][247] +1 other test pass
   [246]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-2/igt@kms_cursor_crc@cursor-random-256x85@pipe-a-hdmi-a-1.html
   [247]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-2/igt@kms_cursor_crc@cursor-random-256x85@pipe-a-hdmi-a-1.html

  * igt@kms_cursor_crc@cursor-suspend:
    - shard-dg2:          [ABORT][248] ([i915#15132]) -> [PASS][249]
   [248]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-dg2-10/igt@kms_cursor_crc@cursor-suspend.html
   [249]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg2-1/igt@kms_cursor_crc@cursor-suspend.html

  * igt@kms_cursor_legacy@flip-vs-cursor-crc-legacy:
    - shard-dg1:          [FAIL][250] ([i915#15999]) -> [PASS][251]
   [250]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-dg1-14/igt@kms_cursor_legacy@flip-vs-cursor-crc-legacy.html
   [251]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg1-19/igt@kms_cursor_legacy@flip-vs-cursor-crc-legacy.html

  * igt@kms_fbcon_fbt@fbc-suspend:
    - shard-dg2:          [FAIL][252] ([i915#4767]) -> [PASS][253]
   [252]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-dg2-6/igt@kms_fbcon_fbt@fbc-suspend.html
   [253]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg2-8/igt@kms_fbcon_fbt@fbc-suspend.html

  * igt@kms_flip@flip-vs-absolute-wf_vblank:
    - shard-dg2:          [FAIL][254] ([i915#14600]) -> [PASS][255] +1 other test pass
   [254]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-dg2-1/igt@kms_flip@flip-vs-absolute-wf_vblank.html
   [255]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg2-6/igt@kms_flip@flip-vs-absolute-wf_vblank.html

  * igt@kms_flip@flip-vs-expired-vblank:
    - shard-dg2:          [FAIL][256] ([i915#13027]) -> [PASS][257]
   [256]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-dg2-5/igt@kms_flip@flip-vs-expired-vblank.html
   [257]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg2-4/igt@kms_flip@flip-vs-expired-vblank.html

  * igt@kms_force_connector_basic@prune-stale-modes:
    - shard-mtlp:         [SKIP][258] ([i915#15672]) -> [PASS][259]
   [258]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-mtlp-1/igt@kms_force_connector_basic@prune-stale-modes.html
   [259]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-mtlp-6/igt@kms_force_connector_basic@prune-stale-modes.html

  * igt@kms_frontbuffer_tracking@fbchdr-1p-primscrn-pri-shrfb-draw-blt:
    - shard-dg2:          [SKIP][260] ([i915#15989]) -> [PASS][261] +1 other test pass
   [260]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-dg2-3/igt@kms_frontbuffer_tracking@fbchdr-1p-primscrn-pri-shrfb-draw-blt.html
   [261]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg2-10/igt@kms_frontbuffer_tracking@fbchdr-1p-primscrn-pri-shrfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbchdr-1p-primscrn-shrfb-plflip-blt:
    - shard-rkl:          [SKIP][262] ([i915#15989]) -> [PASS][263] +21 other tests pass
   [262]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-5/igt@kms_frontbuffer_tracking@fbchdr-1p-primscrn-shrfb-plflip-blt.html
   [263]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-6/igt@kms_frontbuffer_tracking@fbchdr-1p-primscrn-shrfb-plflip-blt.html

  * igt@kms_frontbuffer_tracking@hdr-1p-primscrn-spr-indfb-fullscreen:
    - shard-glk:          [SKIP][264] -> [PASS][265] +8 other tests pass
   [264]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-glk3/igt@kms_frontbuffer_tracking@hdr-1p-primscrn-spr-indfb-fullscreen.html
   [265]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-glk8/igt@kms_frontbuffer_tracking@hdr-1p-primscrn-spr-indfb-fullscreen.html

  * igt@kms_hdr@static-toggle-dpms:
    - shard-rkl:          [SKIP][266] ([i915#3555] / [i915#8228]) -> [PASS][267]
   [266]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-5/igt@kms_hdr@static-toggle-dpms.html
   [267]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-1/igt@kms_hdr@static-toggle-dpms.html

  * igt@kms_pipe_crc_basic@suspend-read-crc@pipe-a-hdmi-a-1:
    - shard-glk:          [INCOMPLETE][268] ([i915#12756] / [i915#13409] / [i915#13476]) -> [PASS][269]
   [268]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-glk8/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-a-hdmi-a-1.html
   [269]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-glk9/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-a-hdmi-a-1.html

  * igt@kms_plane_scaling@intel-max-src-size:
    - shard-rkl:          [SKIP][270] ([i915#6953]) -> [PASS][271]
   [270]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-5/igt@kms_plane_scaling@intel-max-src-size.html
   [271]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-1/igt@kms_plane_scaling@intel-max-src-size.html

  * igt@kms_pm_rpm@dpms-mode-unset-lpsp:
    - shard-rkl:          [SKIP][272] ([i915#14544] / [i915#15073]) -> [PASS][273]
   [272]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-6/igt@kms_pm_rpm@dpms-mode-unset-lpsp.html
   [273]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-8/igt@kms_pm_rpm@dpms-mode-unset-lpsp.html

  * igt@kms_pm_rpm@modeset-non-lpsp-stress:
    - shard-dg1:          [SKIP][274] ([i915#15073]) -> [PASS][275] +2 other tests pass
   [274]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-dg1-14/igt@kms_pm_rpm@modeset-non-lpsp-stress.html
   [275]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg1-19/igt@kms_pm_rpm@modeset-non-lpsp-stress.html

  * igt@kms_pm_rpm@system-suspend-modeset:
    - shard-rkl:          [INCOMPLETE][276] ([i915#14419]) -> [PASS][277]
   [276]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-6/igt@kms_pm_rpm@system-suspend-modeset.html
   [277]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-3/igt@kms_pm_rpm@system-suspend-modeset.html

  * igt@perf_pmu@busy-double-start@vecs1:
    - shard-dg2:          [FAIL][278] ([i915#4349]) -> [PASS][279] +4 other tests pass
   [278]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-dg2-1/igt@perf_pmu@busy-double-start@vecs1.html
   [279]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg2-6/igt@perf_pmu@busy-double-start@vecs1.html

  
#### Warnings ####

  * igt@api_intel_bb@crc32:
    - shard-rkl:          [SKIP][280] ([i915#14544] / [i915#6230]) -> [SKIP][281] ([i915#6230])
   [280]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-6/igt@api_intel_bb@crc32.html
   [281]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-3/igt@api_intel_bb@crc32.html

  * igt@device_reset@cold-reset-bound:
    - shard-rkl:          [SKIP][282] ([i915#11078]) -> [SKIP][283] ([i915#11078] / [i915#14544])
   [282]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-8/igt@device_reset@cold-reset-bound.html
   [283]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-6/igt@device_reset@cold-reset-bound.html

  * igt@gem_ccs@block-multicopy-inplace:
    - shard-rkl:          [SKIP][284] ([i915#3555] / [i915#9323]) -> [SKIP][285] ([i915#14544] / [i915#3555] / [i915#9323])
   [284]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-5/igt@gem_ccs@block-multicopy-inplace.html
   [285]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-6/igt@gem_ccs@block-multicopy-inplace.html

  * igt@gem_exec_reloc@basic-cpu-gtt-noreloc:
    - shard-rkl:          [SKIP][286] ([i915#3281]) -> [SKIP][287] ([i915#14544] / [i915#3281]) +3 other tests skip
   [286]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-8/igt@gem_exec_reloc@basic-cpu-gtt-noreloc.html
   [287]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-6/igt@gem_exec_reloc@basic-cpu-gtt-noreloc.html

  * igt@gem_exec_schedule@semaphore-power:
    - shard-rkl:          [SKIP][288] ([i915#7276]) -> [SKIP][289] ([i915#14544] / [i915#7276])
   [288]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-5/igt@gem_exec_schedule@semaphore-power.html
   [289]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-6/igt@gem_exec_schedule@semaphore-power.html

  * igt@gem_lmem_swapping@massive-random:
    - shard-rkl:          [SKIP][290] ([i915#4613]) -> [SKIP][291] ([i915#14544] / [i915#4613]) +1 other test skip
   [290]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-4/igt@gem_lmem_swapping@massive-random.html
   [291]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-6/igt@gem_lmem_swapping@massive-random.html

  * igt@gem_lmem_swapping@random:
    - shard-rkl:          [SKIP][292] ([i915#14544] / [i915#4613]) -> [SKIP][293] ([i915#4613])
   [292]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-6/igt@gem_lmem_swapping@random.html
   [293]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-2/igt@gem_lmem_swapping@random.html

  * igt@gem_partial_pwrite_pread@reads:
    - shard-rkl:          [SKIP][294] ([i915#14544] / [i915#3282]) -> [SKIP][295] ([i915#3282])
   [294]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-6/igt@gem_partial_pwrite_pread@reads.html
   [295]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-3/igt@gem_partial_pwrite_pread@reads.html

  * igt@gem_readwrite@write-bad-handle:
    - shard-rkl:          [SKIP][296] ([i915#3282]) -> [SKIP][297] ([i915#14544] / [i915#3282]) +2 other tests skip
   [296]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-5/igt@gem_readwrite@write-bad-handle.html
   [297]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-6/igt@gem_readwrite@write-bad-handle.html

  * igt@gem_set_tiling_vs_blt@untiled-to-tiled:
    - shard-rkl:          [SKIP][298] ([i915#14544] / [i915#8411]) -> [SKIP][299] ([i915#8411])
   [298]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-6/igt@gem_set_tiling_vs_blt@untiled-to-tiled.html
   [299]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-8/igt@gem_set_tiling_vs_blt@untiled-to-tiled.html

  * igt@gem_userptr_blits@dmabuf-unsync:
    - shard-rkl:          [SKIP][300] ([i915#3297]) -> [SKIP][301] ([i915#14544] / [i915#3297]) +1 other test skip
   [300]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-8/igt@gem_userptr_blits@dmabuf-unsync.html
   [301]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-6/igt@gem_userptr_blits@dmabuf-unsync.html

  * igt@gem_userptr_blits@forbidden-operations:
    - shard-rkl:          [SKIP][302] ([i915#3282] / [i915#3297]) -> [SKIP][303] ([i915#14544] / [i915#3282] / [i915#3297])
   [302]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-5/igt@gem_userptr_blits@forbidden-operations.html
   [303]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-6/igt@gem_userptr_blits@forbidden-operations.html

  * igt@gem_userptr_blits@readonly-pwrite-unsync:
    - shard-rkl:          [SKIP][304] ([i915#14544] / [i915#3297]) -> [SKIP][305] ([i915#3297])
   [304]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-6/igt@gem_userptr_blits@readonly-pwrite-unsync.html
   [305]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-3/igt@gem_userptr_blits@readonly-pwrite-unsync.html

  * igt@gen9_exec_parse@basic-rejected-ctx-param:
    - shard-rkl:          [SKIP][306] ([i915#14544] / [i915#2527]) -> [SKIP][307] ([i915#2527])
   [306]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-6/igt@gen9_exec_parse@basic-rejected-ctx-param.html
   [307]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-2/igt@gen9_exec_parse@basic-rejected-ctx-param.html

  * igt@i915_pm_rc6_residency@media-rc6-accuracy:
    - shard-rkl:          [SKIP][308] ([i915#14544] / [i915#16080] / [i915#16166]) -> [SKIP][309] ([i915#16080] / [i915#16166])
   [308]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-6/igt@i915_pm_rc6_residency@media-rc6-accuracy.html
   [309]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-2/igt@i915_pm_rc6_residency@media-rc6-accuracy.html

  * igt@i915_query@query-topology-unsupported:
    - shard-rkl:          [SKIP][310] ([i915#16079]) -> [SKIP][311] ([i915#14544] / [i915#16079])
   [310]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-5/igt@i915_query@query-topology-unsupported.html
   [311]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-6/igt@i915_query@query-topology-unsupported.html

  * igt@intel_hwmon@hwmon-write:
    - shard-rkl:          [SKIP][312] ([i915#14544] / [i915#7707]) -> [SKIP][313] ([i915#7707])
   [312]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-6/igt@intel_hwmon@hwmon-write.html
   [313]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-2/igt@intel_hwmon@hwmon-write.html

  * igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180:
    - shard-rkl:          [SKIP][314] ([i915#5286]) -> [SKIP][315] ([i915#14544] / [i915#5286])
   [314]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-4/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180.html
   [315]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-6/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180.html

  * igt@kms_big_fb@linear-64bpp-rotate-90:
    - shard-rkl:          [SKIP][316] ([i915#14544] / [i915#3638]) -> [SKIP][317] ([i915#3638]) +1 other test skip
   [316]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-6/igt@kms_big_fb@linear-64bpp-rotate-90.html
   [317]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-2/igt@kms_big_fb@linear-64bpp-rotate-90.html

  * igt@kms_big_fb@y-tiled-8bpp-rotate-90:
    - shard-rkl:          [SKIP][318] ([i915#3638]) -> [SKIP][319] ([i915#14544] / [i915#3638]) +2 other tests skip
   [318]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-5/igt@kms_big_fb@y-tiled-8bpp-rotate-90.html
   [319]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-6/igt@kms_big_fb@y-tiled-8bpp-rotate-90.html

  * igt@kms_ccs@crc-primary-rotation-180-y-tiled-ccs:
    - shard-rkl:          [SKIP][320] ([i915#14098] / [i915#6095]) -> [SKIP][321] ([i915#14098] / [i915#14544] / [i915#6095]) +2 other tests skip
   [320]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-8/igt@kms_ccs@crc-primary-rotation-180-y-tiled-ccs.html
   [321]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-6/igt@kms_ccs@crc-primary-rotation-180-y-tiled-ccs.html

  * igt@kms_ccs@crc-sprite-planes-basic-y-tiled-ccs:
    - shard-rkl:          [SKIP][322] ([i915#14098] / [i915#14544] / [i915#6095]) -> [SKIP][323] ([i915#14098] / [i915#6095]) +4 other tests skip
   [322]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-6/igt@kms_ccs@crc-sprite-planes-basic-y-tiled-ccs.html
   [323]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-3/igt@kms_ccs@crc-sprite-planes-basic-y-tiled-ccs.html

  * igt@kms_ccs@crc-sprite-planes-basic-y-tiled-ccs@pipe-a-hdmi-a-2:
    - shard-rkl:          [SKIP][324] ([i915#14544] / [i915#6095]) -> [SKIP][325] ([i915#6095]) +3 other tests skip
   [324]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-6/igt@kms_ccs@crc-sprite-planes-basic-y-tiled-ccs@pipe-a-hdmi-a-2.html
   [325]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-3/igt@kms_ccs@crc-sprite-planes-basic-y-tiled-ccs@pipe-a-hdmi-a-2.html

  * igt@kms_chamelium_color_pipeline@plane-lut1d-ctm3x4-lut1d:
    - shard-rkl:          [SKIP][326] ([i915#14544] / [i915#16471]) -> [SKIP][327] ([i915#16471]) +1 other test skip
   [326]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-6/igt@kms_chamelium_color_pipeline@plane-lut1d-ctm3x4-lut1d.html
   [327]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-3/igt@kms_chamelium_color_pipeline@plane-lut1d-ctm3x4-lut1d.html

  * igt@kms_chamelium_edid@hdmi-edid-change-during-suspend:
    - shard-rkl:          [SKIP][328] ([i915#11151] / [i915#14544] / [i915#7828]) -> [SKIP][329] ([i915#11151] / [i915#7828]) +1 other test skip
   [328]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-6/igt@kms_chamelium_edid@hdmi-edid-change-during-suspend.html
   [329]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-2/igt@kms_chamelium_edid@hdmi-edid-change-during-suspend.html

  * igt@kms_chamelium_frames@hdmi-crc-nonplanar-formats:
    - shard-rkl:          [SKIP][330] ([i915#11151] / [i915#7828]) -> [SKIP][331] ([i915#11151] / [i915#14544] / [i915#7828]) +2 other tests skip
   [330]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-5/igt@kms_chamelium_frames@hdmi-crc-nonplanar-formats.html
   [331]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-6/igt@kms_chamelium_frames@hdmi-crc-nonplanar-formats.html

  * igt@kms_content_protection@dp-mst-type-0-suspend-resume:
    - shard-rkl:          [SKIP][332] ([i915#14544] / [i915#15330]) -> [SKIP][333] ([i915#15330])
   [332]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-6/igt@kms_content_protection@dp-mst-type-0-suspend-resume.html
   [333]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-2/igt@kms_content_protection@dp-mst-type-0-suspend-resume.html

  * igt@kms_content_protection@dp-mst-type-1-suspend-resume:
    - shard-rkl:          [SKIP][334] ([i915#15330]) -> [SKIP][335] ([i915#14544] / [i915#15330])
   [334]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-5/igt@kms_content_protection@dp-mst-type-1-suspend-resume.html
   [335]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-6/igt@kms_content_protection@dp-mst-type-1-suspend-resume.html

  * igt@kms_content_protection@legacy-hdcp14:
    - shard-dg2:          [FAIL][336] ([i915#7173]) -> [SKIP][337] ([i915#15865])
   [336]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-dg2-10/igt@kms_content_protection@legacy-hdcp14.html
   [337]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg2-8/igt@kms_content_protection@legacy-hdcp14.html

  * igt@kms_content_protection@mei-interface:
    - shard-dg1:          [SKIP][338] ([i915#15865]) -> [SKIP][339] ([i915#9433])
   [338]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-dg1-15/igt@kms_content_protection@mei-interface.html
   [339]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg1-13/igt@kms_content_protection@mei-interface.html

  * igt@kms_content_protection@suspend-resume:
    - shard-rkl:          [SKIP][340] ([i915#15865]) -> [SKIP][341] ([i915#14544] / [i915#15865])
   [340]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-4/igt@kms_content_protection@suspend-resume.html
   [341]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-6/igt@kms_content_protection@suspend-resume.html

  * igt@kms_cursor_crc@cursor-offscreen-32x10:
    - shard-rkl:          [SKIP][342] ([i915#14544] / [i915#3555]) -> [SKIP][343] ([i915#3555]) +4 other tests skip
   [342]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-6/igt@kms_cursor_crc@cursor-offscreen-32x10.html
   [343]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-2/igt@kms_cursor_crc@cursor-offscreen-32x10.html

  * igt@kms_cursor_crc@cursor-sliding-512x170:
    - shard-dg2:          [SKIP][344] ([i915#13049] / [i915#3359]) -> [SKIP][345] ([i915#13049])
   [344]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-dg2-10/igt@kms_cursor_crc@cursor-sliding-512x170.html
   [345]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg2-8/igt@kms_cursor_crc@cursor-sliding-512x170.html

  * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-varying-size:
    - shard-rkl:          [SKIP][346] ([i915#14544] / [i915#4103]) -> [SKIP][347] ([i915#4103])
   [346]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-6/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-varying-size.html
   [347]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-3/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-varying-size.html

  * igt@kms_cursor_legacy@cursorb-vs-flipa-legacy:
    - shard-rkl:          [SKIP][348] ([i915#14544]) -> [SKIP][349] +30 other tests skip
   [348]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-6/igt@kms_cursor_legacy@cursorb-vs-flipa-legacy.html
   [349]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-2/igt@kms_cursor_legacy@cursorb-vs-flipa-legacy.html

  * igt@kms_dp_aux_dev@basic:
    - shard-rkl:          [SKIP][350] ([i915#1257]) -> [SKIP][351] ([i915#1257] / [i915#14544])
   [350]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-8/igt@kms_dp_aux_dev@basic.html
   [351]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-6/igt@kms_dp_aux_dev@basic.html

  * igt@kms_dp_link_training@uhbr-sst:
    - shard-rkl:          [SKIP][352] ([i915#13748]) -> [SKIP][353] ([i915#13748] / [i915#14544])
   [352]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-5/igt@kms_dp_link_training@uhbr-sst.html
   [353]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-6/igt@kms_dp_link_training@uhbr-sst.html

  * igt@kms_dsc@dsc-fractional-bpp-with-bpc-ultrajoiner:
    - shard-rkl:          [SKIP][354] ([i915#14544] / [i915#16361]) -> [SKIP][355] ([i915#16361]) +1 other test skip
   [354]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-6/igt@kms_dsc@dsc-fractional-bpp-with-bpc-ultrajoiner.html
   [355]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-2/igt@kms_dsc@dsc-fractional-bpp-with-bpc-ultrajoiner.html

  * igt@kms_dsc@dsc-with-bpc-formats:
    - shard-rkl:          [SKIP][356] ([i915#16361]) -> [SKIP][357] ([i915#14544] / [i915#16361])
   [356]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-5/igt@kms_dsc@dsc-with-bpc-formats.html
   [357]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-6/igt@kms_dsc@dsc-with-bpc-formats.html

  * igt@kms_feature_discovery@display-4x:
    - shard-rkl:          [SKIP][358] ([i915#16081]) -> [SKIP][359] ([i915#14544] / [i915#16081])
   [358]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-8/igt@kms_feature_discovery@display-4x.html
   [359]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-6/igt@kms_feature_discovery@display-4x.html

  * igt@kms_feature_discovery@dp-mst:
    - shard-rkl:          [SKIP][360] ([i915#14544] / [i915#9337]) -> [SKIP][361] ([i915#9337])
   [360]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-6/igt@kms_feature_discovery@dp-mst.html
   [361]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-3/igt@kms_feature_discovery@dp-mst.html

  * igt@kms_flip@2x-busy-flip:
    - shard-rkl:          [SKIP][362] ([i915#14544] / [i915#9934]) -> [SKIP][363] ([i915#9934])
   [362]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-6/igt@kms_flip@2x-busy-flip.html
   [363]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-3/igt@kms_flip@2x-busy-flip.html

  * igt@kms_flip@2x-flip-vs-suspend:
    - shard-glk:          [INCOMPLETE][364] ([i915#12745] / [i915#4839] / [i915#6113]) -> [INCOMPLETE][365] ([i915#12745] / [i915#4839])
   [364]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-glk1/igt@kms_flip@2x-flip-vs-suspend.html
   [365]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-glk4/igt@kms_flip@2x-flip-vs-suspend.html

  * igt@kms_flip@2x-plain-flip-ts-check-interruptible:
    - shard-rkl:          [SKIP][366] ([i915#9934]) -> [SKIP][367] ([i915#14544] / [i915#9934]) +1 other test skip
   [366]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-4/igt@kms_flip@2x-plain-flip-ts-check-interruptible.html
   [367]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-6/igt@kms_flip@2x-plain-flip-ts-check-interruptible.html

  * igt@kms_flip@flip-vs-suspend:
    - shard-glk:          [INCOMPLETE][368] ([i915#12314] / [i915#12745] / [i915#4839] / [i915#6113]) -> [INCOMPLETE][369] ([i915#12745] / [i915#4839] / [i915#6113])
   [368]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-glk5/igt@kms_flip@flip-vs-suspend.html
   [369]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-glk1/igt@kms_flip@flip-vs-suspend.html

  * igt@kms_flip@flip-vs-suspend@a-hdmi-a1:
    - shard-glk:          [INCOMPLETE][370] ([i915#12314] / [i915#12745] / [i915#6113]) -> [INCOMPLETE][371] ([i915#12745] / [i915#6113])
   [370]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-glk5/igt@kms_flip@flip-vs-suspend@a-hdmi-a1.html
   [371]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-glk1/igt@kms_flip@flip-vs-suspend@a-hdmi-a1.html

  * igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-downscaling:
    - shard-rkl:          [SKIP][372] ([i915#15643]) -> [SKIP][373] ([i915#14544] / [i915#15643]) +3 other tests skip
   [372]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-5/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-downscaling.html
   [373]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-6/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-downscaling.html

  * igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-upscaling:
    - shard-rkl:          [SKIP][374] ([i915#14544] / [i915#15643]) -> [SKIP][375] ([i915#15643]) +1 other test skip
   [374]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-6/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-upscaling.html
   [375]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-3/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-upscaling.html

  * igt@kms_frontbuffer_tracking@fbchdr-1p-offscreen-pri-shrfb-draw-pwrite:
    - shard-dg1:          [SKIP][376] ([i915#15989]) -> [SKIP][377] ([i915#15989] / [i915#4423])
   [376]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-dg1-13/igt@kms_frontbuffer_tracking@fbchdr-1p-offscreen-pri-shrfb-draw-pwrite.html
   [377]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg1-18/igt@kms_frontbuffer_tracking@fbchdr-1p-offscreen-pri-shrfb-draw-pwrite.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-cur-indfb-draw-pwrite:
    - shard-rkl:          [SKIP][378] ([i915#15102] / [i915#3023]) -> [SKIP][379] ([i915#14544] / [i915#15102] / [i915#3023]) +7 other tests skip
   [378]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-5/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-cur-indfb-draw-pwrite.html
   [379]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-6/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-cur-indfb-draw-pwrite.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-spr-indfb-draw-pwrite:
    - shard-dg2:          [SKIP][380] ([i915#10433] / [i915#15102]) -> [SKIP][381] ([i915#15102])
   [380]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-dg2-4/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-spr-indfb-draw-pwrite.html
   [381]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg2-5/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-spr-indfb-draw-pwrite.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-cur-indfb-draw-mmap-gtt:
    - shard-rkl:          [SKIP][382] ([i915#14544] / [i915#1825]) -> [SKIP][383] ([i915#1825]) +1 other test skip
   [382]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-6/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-cur-indfb-draw-mmap-gtt.html
   [383]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-2/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-cur-indfb-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-spr-indfb-draw-mmap-gtt:
    - shard-rkl:          [SKIP][384] ([i915#1825]) -> [SKIP][385] ([i915#14544] / [i915#1825]) +5 other tests skip
   [384]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-5/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-spr-indfb-draw-mmap-gtt.html
   [385]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-6/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-spr-indfb-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-rgb565-draw-render:
    - shard-rkl:          [SKIP][386] ([i915#14544] / [i915#15102] / [i915#3023]) -> [SKIP][387] ([i915#15102] / [i915#3023]) +7 other tests skip
   [386]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-6/igt@kms_frontbuffer_tracking@fbcpsr-rgb565-draw-render.html
   [387]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-2/igt@kms_frontbuffer_tracking@fbcpsr-rgb565-draw-render.html

  * igt@kms_frontbuffer_tracking@fbcpsrhdr-2p-scndscrn-spr-indfb-move:
    - shard-rkl:          [SKIP][388] -> [SKIP][389] ([i915#14544]) +33 other tests skip
   [388]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-5/igt@kms_frontbuffer_tracking@fbcpsrhdr-2p-scndscrn-spr-indfb-move.html
   [389]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-6/igt@kms_frontbuffer_tracking@fbcpsrhdr-2p-scndscrn-spr-indfb-move.html

  * igt@kms_frontbuffer_tracking@fbcpsrhdr-tiling-linear:
    - shard-dg1:          [SKIP][390] ([i915#15102]) -> [SKIP][391] ([i915#15102] / [i915#4423])
   [390]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-dg1-13/igt@kms_frontbuffer_tracking@fbcpsrhdr-tiling-linear.html
   [391]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg1-18/igt@kms_frontbuffer_tracking@fbcpsrhdr-tiling-linear.html

  * igt@kms_frontbuffer_tracking@hdr-2p-primscrn-indfb-pgflip-blt:
    - shard-dg1:          [SKIP][392] ([i915#4423]) -> [SKIP][393] +1 other test skip
   [392]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-dg1-17/igt@kms_frontbuffer_tracking@hdr-2p-primscrn-indfb-pgflip-blt.html
   [393]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg1-15/igt@kms_frontbuffer_tracking@hdr-2p-primscrn-indfb-pgflip-blt.html

  * igt@kms_frontbuffer_tracking@hdr-suspend:
    - shard-glk:          [SKIP][394] -> [INCOMPLETE][395] ([i915#16056])
   [394]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-glk3/igt@kms_frontbuffer_tracking@hdr-suspend.html
   [395]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-glk8/igt@kms_frontbuffer_tracking@hdr-suspend.html

  * igt@kms_frontbuffer_tracking@psr-1p-offscreen-pri-indfb-draw-mmap-gtt:
    - shard-rkl:          [SKIP][396] ([i915#14544] / [i915#15102]) -> [SKIP][397] ([i915#15102]) +2 other tests skip
   [396]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-6/igt@kms_frontbuffer_tracking@psr-1p-offscreen-pri-indfb-draw-mmap-gtt.html
   [397]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-2/igt@kms_frontbuffer_tracking@psr-1p-offscreen-pri-indfb-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-shrfb-draw-pwrite:
    - shard-dg2:          [SKIP][398] ([i915#15102]) -> [SKIP][399] ([i915#10433] / [i915#15102])
   [398]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-dg2-5/igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-shrfb-draw-pwrite.html
   [399]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg2-4/igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-shrfb-draw-pwrite.html

  * igt@kms_frontbuffer_tracking@psrhdr-1p-primscrn-spr-indfb-move:
    - shard-rkl:          [SKIP][400] ([i915#15102]) -> [SKIP][401] ([i915#14544] / [i915#15102]) +13 other tests skip
   [400]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-5/igt@kms_frontbuffer_tracking@psrhdr-1p-primscrn-spr-indfb-move.html
   [401]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-6/igt@kms_frontbuffer_tracking@psrhdr-1p-primscrn-spr-indfb-move.html

  * igt@kms_hdr@static-toggle-suspend:
    - shard-rkl:          [INCOMPLETE][402] ([i915#15436]) -> [SKIP][403] ([i915#3555] / [i915#8228]) +1 other test skip
   [402]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-6/igt@kms_hdr@static-toggle-suspend.html
   [403]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-8/igt@kms_hdr@static-toggle-suspend.html

  * igt@kms_pipe_stress@stress-xrgb8888-4tiled:
    - shard-rkl:          [SKIP][404] ([i915#14544] / [i915#14712]) -> [SKIP][405] ([i915#14712])
   [404]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-6/igt@kms_pipe_stress@stress-xrgb8888-4tiled.html
   [405]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-8/igt@kms_pipe_stress@stress-xrgb8888-4tiled.html

  * igt@kms_plane@pixel-format-yf-tiled-ccs-modifier:
    - shard-rkl:          [SKIP][406] ([i915#14544] / [i915#15709]) -> [SKIP][407] ([i915#15709]) +1 other test skip
   [406]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-6/igt@kms_plane@pixel-format-yf-tiled-ccs-modifier.html
   [407]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-3/igt@kms_plane@pixel-format-yf-tiled-ccs-modifier.html

  * igt@kms_plane_lowres@tiling-4:
    - shard-rkl:          [SKIP][408] ([i915#3555]) -> [SKIP][409] ([i915#14544] / [i915#3555])
   [408]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-8/igt@kms_plane_lowres@tiling-4.html
   [409]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-6/igt@kms_plane_lowres@tiling-4.html

  * igt@kms_plane_multiple@tiling-yf:
    - shard-rkl:          [SKIP][410] ([i915#14259] / [i915#14544]) -> [SKIP][411] ([i915#14259])
   [410]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-6/igt@kms_plane_multiple@tiling-yf.html
   [411]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-2/igt@kms_plane_multiple@tiling-yf.html

  * igt@kms_plane_scaling@plane-downscale-factor-0-5-with-rotation@pipe-b:
    - shard-rkl:          [SKIP][412] ([i915#15329]) -> [SKIP][413] ([i915#14544] / [i915#15329]) +3 other tests skip
   [412]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-5/igt@kms_plane_scaling@plane-downscale-factor-0-5-with-rotation@pipe-b.html
   [413]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-6/igt@kms_plane_scaling@plane-downscale-factor-0-5-with-rotation@pipe-b.html

  * igt@kms_plane_scaling@plane-scaler-unity-scaling-with-rotation@pipe-b:
    - shard-rkl:          [SKIP][414] ([i915#14544] / [i915#15329]) -> [SKIP][415] ([i915#15329]) +3 other tests skip
   [414]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-6/igt@kms_plane_scaling@plane-scaler-unity-scaling-with-rotation@pipe-b.html
   [415]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-2/igt@kms_plane_scaling@plane-scaler-unity-scaling-with-rotation@pipe-b.html

  * igt@kms_pm_backlight@basic-brightness:
    - shard-rkl:          [SKIP][416] ([i915#12343] / [i915#14544] / [i915#5354]) -> [SKIP][417] ([i915#12343] / [i915#5354])
   [416]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-6/igt@kms_pm_backlight@basic-brightness.html
   [417]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-3/igt@kms_pm_backlight@basic-brightness.html

  * igt@kms_pm_backlight@fade:
    - shard-rkl:          [SKIP][418] ([i915#12343] / [i915#5354]) -> [SKIP][419] ([i915#12343] / [i915#14544] / [i915#5354])
   [418]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-5/igt@kms_pm_backlight@fade.html
   [419]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-6/igt@kms_pm_backlight@fade.html

  * igt@kms_pm_dc@dc5-pageflip-negative:
    - shard-rkl:          [SKIP][420] ([i915#14544] / [i915#9685]) -> [SKIP][421] ([i915#9685])
   [420]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-6/igt@kms_pm_dc@dc5-pageflip-negative.html
   [421]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-2/igt@kms_pm_dc@dc5-pageflip-negative.html

  * igt@kms_pm_dc@dc9-dpms:
    - shard-rkl:          [SKIP][422] ([i915#15739]) -> [SKIP][423] ([i915#14544] / [i915#15739])
   [422]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-8/igt@kms_pm_dc@dc9-dpms.html
   [423]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-6/igt@kms_pm_dc@dc9-dpms.html

  * igt@kms_pm_lpsp@kms-lpsp:
    - shard-rkl:          [SKIP][424] ([i915#9340]) -> [SKIP][425] ([i915#3828])
   [424]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-7/igt@kms_pm_lpsp@kms-lpsp.html
   [425]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-5/igt@kms_pm_lpsp@kms-lpsp.html
    - shard-dg1:          [SKIP][426] ([i915#9340]) -> [SKIP][427] ([i915#3828])
   [426]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-dg1-12/igt@kms_pm_lpsp@kms-lpsp.html
   [427]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg1-15/igt@kms_pm_lpsp@kms-lpsp.html

  * igt@kms_pm_lpsp@screens-disabled:
    - shard-rkl:          [SKIP][428] ([i915#8430]) -> [SKIP][429] ([i915#14544] / [i915#8430])
   [428]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-5/igt@kms_pm_lpsp@screens-disabled.html
   [429]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-6/igt@kms_pm_lpsp@screens-disabled.html

  * igt@kms_psr2_sf@fbc-pr-primary-plane-update-sf-dmg-area:
    - shard-rkl:          [SKIP][430] ([i915#11520] / [i915#14544]) -> [SKIP][431] ([i915#11520]) +1 other test skip
   [430]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-6/igt@kms_psr2_sf@fbc-pr-primary-plane-update-sf-dmg-area.html
   [431]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-8/igt@kms_psr2_sf@fbc-pr-primary-plane-update-sf-dmg-area.html

  * igt@kms_psr2_sf@fbc-psr2-cursor-plane-update-sf:
    - shard-rkl:          [SKIP][432] ([i915#11520]) -> [SKIP][433] ([i915#11520] / [i915#14544]) +2 other tests skip
   [432]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-4/igt@kms_psr2_sf@fbc-psr2-cursor-plane-update-sf.html
   [433]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-6/igt@kms_psr2_sf@fbc-psr2-cursor-plane-update-sf.html

  * igt@kms_psr2_sf@psr2-cursor-plane-move-continuous-sf:
    - shard-dg1:          [SKIP][434] ([i915#11520]) -> [SKIP][435] ([i915#11520] / [i915#4423])
   [434]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-dg1-13/igt@kms_psr2_sf@psr2-cursor-plane-move-continuous-sf.html
   [435]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg1-18/igt@kms_psr2_sf@psr2-cursor-plane-move-continuous-sf.html

  * igt@kms_psr@pr-primary-blt:
    - shard-rkl:          [SKIP][436] ([i915#1072] / [i915#14544] / [i915#9732]) -> [SKIP][437] ([i915#1072] / [i915#9732]) +7 other tests skip
   [436]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-6/igt@kms_psr@pr-primary-blt.html
   [437]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-2/igt@kms_psr@pr-primary-blt.html

  * igt@kms_psr@psr-no-drrs:
    - shard-rkl:          [SKIP][438] ([i915#1072] / [i915#9732]) -> [SKIP][439] ([i915#1072] / [i915#14544] / [i915#9732]) +6 other tests skip
   [438]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-5/igt@kms_psr@psr-no-drrs.html
   [439]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-6/igt@kms_psr@psr-no-drrs.html

  * igt@kms_rotation_crc@primary-y-tiled-reflect-x-270:
    - shard-dg2:          [SKIP][440] ([i915#15867] / [i915#5190]) -> [SKIP][441] ([i915#12755] / [i915#15867] / [i915#5190])
   [440]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-dg2-10/igt@kms_rotation_crc@primary-y-tiled-reflect-x-270.html
   [441]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-dg2-8/igt@kms_rotation_crc@primary-y-tiled-reflect-x-270.html

  * igt@kms_vrr@flip-basic:
    - shard-rkl:          [SKIP][442] ([i915#15243] / [i915#3555]) -> [SKIP][443] ([i915#14544] / [i915#15243] / [i915#3555])
   [442]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-5/igt@kms_vrr@flip-basic.html
   [443]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-6/igt@kms_vrr@flip-basic.html

  * igt@kms_vrr@flip-dpms:
    - shard-rkl:          [SKIP][444] ([i915#14544] / [i915#15243] / [i915#3555]) -> [SKIP][445] ([i915#15243] / [i915#3555])
   [444]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-6/igt@kms_vrr@flip-dpms.html
   [445]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-3/igt@kms_vrr@flip-dpms.html

  * igt@perf@unprivileged-single-ctx-counters:
    - shard-rkl:          [SKIP][446] ([i915#14544] / [i915#2433]) -> [SKIP][447] ([i915#2433])
   [446]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-6/igt@perf@unprivileged-single-ctx-counters.html
   [447]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-2/igt@perf@unprivileged-single-ctx-counters.html

  * igt@prime_vgem@basic-fence-read:
    - shard-rkl:          [SKIP][448] ([i915#14544] / [i915#3291] / [i915#3708]) -> [SKIP][449] ([i915#3291] / [i915#3708]) +1 other test skip
   [448]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-6/igt@prime_vgem@basic-fence-read.html
   [449]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-2/igt@prime_vgem@basic-fence-read.html

  * igt@sriov_basic@enable-vfs-autoprobe-on:
    - shard-rkl:          [SKIP][450] ([i915#9917]) -> [SKIP][451] ([i915#14544] / [i915#9917])
   [450]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18769/shard-rkl-8/igt@sriov_basic@enable-vfs-autoprobe-on.html
   [451]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/shard-rkl-6/igt@sriov_basic@enable-vfs-autoprobe-on.html

  
  [i915#10307]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10307
  [i915#10433]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10433
  [i915#10434]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10434
  [i915#10647]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10647
  [i915#1072]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1072
  [i915#11078]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11078
  [i915#11151]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11151
  [i915#11520]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11520
  [i915#12169]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12169
  [i915#12276]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12276
  [i915#12313]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12313
  [i915#12314]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12314
  [i915#12343]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12343
  [i915#12358]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12358
  [i915#1257]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1257
  [i915#12655]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12655
  [i915#12745]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12745
  [i915#12755]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12755
  [i915#12756]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12756
  [i915#12761]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12761
  [i915#13026]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13026
  [i915#13027]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13027
  [i915#13046]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13046
  [i915#13049]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13049
  [i915#13356]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13356
  [i915#13409]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13409
  [i915#13476]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13476
  [i915#13520]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13520
  [i915#13566]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13566
  [i915#13691]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13691
  [i915#13748]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13748
  [i915#13820]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13820
  [i915#13958]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13958
  [i915#14098]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14098
  [i915#14118]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14118
  [i915#14152]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14152
  [i915#14259]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14259
  [i915#14419]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14419
  [i915#14544]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14544
  [i915#14600]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14600
  [i915#14712]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14712
  [i915#14888]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14888
  [i915#15073]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15073
  [i915#15102]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15102
  [i915#15131]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15131
  [i915#15132]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15132
  [i915#15243]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15243
  [i915#15329]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15329
  [i915#15330]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15330
  [i915#15342]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15342
  [i915#15403]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15403
  [i915#15433]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15433
  [i915#15436]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15436
  [i915#15459]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15459
  [i915#15460]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15460
  [i915#15479]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15479
  [i915#15481]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15481
  [i915#15492]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15492
  [i915#15542]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15542
  [i915#15560]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15560
  [i915#15582]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15582
  [i915#15638]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15638
  [i915#15643]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15643
  [i915#15656]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15656
  [i915#15672]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15672
  [i915#15709]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15709
  [i915#15722]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15722
  [i915#15733]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15733
  [i915#15739]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15739
  [i915#15816]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15816
  [i915#15865]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15865
  [i915#15867]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15867
  [i915#15949]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15949
  [i915#15989]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15989
  [i915#15990]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15990
  [i915#15991]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15991
  [i915#15999]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15999
  [i915#16056]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16056
  [i915#16079]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16079
  [i915#16080]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16080
  [i915#16081]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16081
  [i915#16109]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16109
  [i915#16112]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16112
  [i915#16166]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16166
  [i915#16182]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16182
  [i915#16184]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16184
  [i915#16361]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16361
  [i915#16386]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16386
  [i915#16451]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16451
  [i915#16471]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16471
  [i915#16518]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16518
  [i915#1769]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1769
  [i915#1825]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1825
  [i915#2065]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2065
  [i915#2433]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2433
  [i915#2434]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2434
  [i915#2527]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2527
  [i915#280]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/280
  [i915#284]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/284
  [i915#2856]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2856
  [i915#3023]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3023
  [i915#3116]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3116
  [i915#3281]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3281
  [i915#3282]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3282
  [i915#3291]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3291
  [i915#3297]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3297
  [i915#3299]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3299
  [i915#3359]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3359
  [i915#3555]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3555
  [i915#3637]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3637
  [i915#3638]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3638
  [i915#3708]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3708
  [i915#3742]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3742
  [i915#3804]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3804
  [i915#3828]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3828
  [i915#3955]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3955
  [i915#4077]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4077
  [i915#4083]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4083
  [i915#4103]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4103
  [i915#4349]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4349
  [i915#4423]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4423
  [i915#4525]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4525
  [i915#4538]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4538
  [i915#4613]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4613
  [i915#4767]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4767
  [i915#4817]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4817
  [i915#4839]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4839
  [i915#4879]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4879
  [i915#5138]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5138
  [i915#5190]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5190
  [i915#5286]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5286
  [i915#5289]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5289
  [i915#5354]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5354
  [i915#5439]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5439
  [i915#6095]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6095
  [i915#6113]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6113
  [i915#6230]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6230
  [i915#6245]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6245
  [i915#6334]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6334
  [i915#6344]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6344
  [i915#6412]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6412
  [i915#6524]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6524
  [i915#658]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/658
  [i915#6590]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6590
  [i915#6953]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6953
  [i915#7173]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7173
  [i915#7276]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7276
  [i915#7697]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7697
  [i915#7707]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7707
  [i915#7828]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7828
  [i915#7882]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7882
  [i915#7984]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7984
  [i915#8228]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8228
  [i915#8399]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8399
  [i915#8411]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8411
  [i915#8430]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8430
  [i915#9323]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9323
  [i915#9337]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9337
  [i915#9340]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9340
  [i915#9433]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9433
  [i915#9683]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9683
  [i915#9685]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9685
  [i915#9732]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9732
  [i915#9812]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9812
  [i915#9906]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9906
  [i915#9917]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9917
  [i915#9934]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9934


Build changes
-------------

  * Linux: CI_DRM_18769 -> Patchwork_165273v4

  CI-20190529: 20190529
  CI_DRM_18769: 730a99730dc571631e8b0ebcb8a989fb7f33804f @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_8990: 8990
  Patchwork_165273v4: 730a99730dc571631e8b0ebcb8a989fb7f33804f @ git://anongit.freedesktop.org/gfx-ci/linux
  piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_165273v4/index.html

[-- Attachment #2: Type: text/html, Size: 153572 bytes --]

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH 1/6] drm/i915/cursor: Check joiner cursor commit status
  2026-07-06 11:56 ` [PATCH 1/6] drm/i915/cursor: Check joiner cursor commit status Nemesa Garg
@ 2026-07-29 15:28   ` Borah, Chaitanya Kumar
  0 siblings, 0 replies; 17+ messages in thread
From: Borah, Chaitanya Kumar @ 2026-07-29 15:28 UTC (permalink / raw)
  To: Nemesa Garg, intel-gfx, intel-xe



On 7/6/2026 5:26 PM, Nemesa Garg wrote:
> In joiner mode, secondary cursor commits may still be running
> even when the primary cursor commit is done. Walking the secondary
> pipes also requires holding the secondary planes modeset locks.
> Add intel_cursor_lock_joined_planes() to acquire modeset locks
> for all secondary cursor planes. Check all joined cursor commit
> status before taking the fast path. If any commit is still pending,
> fallback to slow path.
> 
> v2: Use intel_crtc_joined_pipe_mask(). [Ville]
> v3: Lock secondary cursor CRTCs and planes. [sashiko]
> v4: Iterate the full joined mask uniformly in both helpers, no
>      primary special-case.
>      Move the parameter-change check above the lock acquisition so
>      we don't grab secondary locks just to fall to slow path. [Chaitanya]
> 
> Assisted-by: Claude:claude-sonnet-4.6
> Signed-off-by: Nemesa Garg <nemesa.garg@intel.com>
> ---
>   drivers/gpu/drm/i915/display/intel_cursor.c | 69 ++++++++++++++++++---
>   1 file changed, 60 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_cursor.c b/drivers/gpu/drm/i915/display/intel_cursor.c
> index 88384dea868b..af7fc1f888c4 100644
> --- a/drivers/gpu/drm/i915/display/intel_cursor.c
> +++ b/drivers/gpu/drm/i915/display/intel_cursor.c
> @@ -13,6 +13,7 @@
>   #include <drm/drm_vblank.h>
>   
>   #include "intel_atomic.h"
> +#include "intel_crtc.h"

do we need this header here?
I think it is only needed for intel_crtc_get_vblank_counter(). Add it 
with the patch that adds the dependency.

>   #include "intel_cursor.h"
>   #include "intel_cursor_regs.h"
>   #include "intel_de.h"
> @@ -796,6 +797,50 @@ void intel_cursor_unpin_work(struct kthread_work *base)
>   	intel_plane_destroy_state(&plane->base, &plane_state->uapi);
>   }
>   
> +static int intel_cursor_lock_joined_planes(struct intel_display *display,
> +					   const struct intel_crtc_state *crtc_state,
> +					   struct drm_modeset_acquire_ctx *ctx)
> +{
> +	struct intel_crtc *pipe_crtc;
> +	int ret;
> +
> +	for_each_intel_crtc_in_pipe_mask(display, pipe_crtc,
> +					 intel_crtc_joined_pipe_mask(crtc_state)) {
> +		struct intel_plane *pipe_plane =
> +			intel_crtc_get_plane(pipe_crtc, PLANE_CURSOR);
> +
> +		ret = drm_modeset_lock(&pipe_crtc->base.mutex, ctx);
> +		if (ret)
> +			return ret;
> +
> +		ret = drm_modeset_lock(&pipe_plane->base.mutex, ctx);
> +		if (ret)
> +			return ret;
> +	}
> +	return 0;
> +}
> +
> +static bool
> +intel_cursor_joiner_commits_idle(struct intel_display *display,
> +				 const struct intel_crtc_state *crtc_state)
> +{
> +	struct intel_crtc *pipe_crtc;
> +
> +	for_each_intel_crtc_in_pipe_mask(display, pipe_crtc,
> +					 intel_crtc_joined_pipe_mask(crtc_state)) {
> +		struct intel_plane *pipe_plane =
> +			intel_crtc_get_plane(pipe_crtc, PLANE_CURSOR);
> +		struct intel_plane_state *pipe_plane_state =
> +			to_intel_plane_state(pipe_plane->base.state);
> +
> +		if (pipe_plane_state->uapi.commit &&
> +		    !try_wait_for_completion(&pipe_plane_state->uapi.commit->hw_done))
> +			return false;
> +	}
> +
> +	return true;
> +}
> +
>   static int
>   intel_legacy_cursor_update(struct drm_plane *_plane,
>   			   struct drm_crtc *_crtc,
> @@ -833,15 +878,6 @@ intel_legacy_cursor_update(struct drm_plane *_plane,
>   	    crtc_state->joiner_pipes)
>   		goto slow;
>   
> -	/*
> -	 * Don't do an async update if there is an outstanding commit modifying
> -	 * the plane.  This prevents our async update's changes from getting
> -	 * overridden by a previous synchronous update's state.
> -	 */
> -	if (old_plane_state->uapi.commit &&
> -	    !try_wait_for_completion(&old_plane_state->uapi.commit->hw_done))
> -		goto slow;
> -
>   	/*
>   	 * If any parameters change that may affect watermarks,
>   	 * take the slowpath. Only changing fb or position should be
> @@ -855,6 +891,21 @@ intel_legacy_cursor_update(struct drm_plane *_plane,
>   	    !old_plane_state->uapi.fb != !fb)
>   		goto slow;
>   
> +	ret = intel_cursor_lock_joined_planes(display, crtc_state, ctx);
> +	if (ret == -EDEADLK)
> +		return ret;
> +	if (ret)
> +		goto slow;
> +
> +	/*
> +	 * Don't do an async update if there is an outstanding commit modifying
> +	 * any of the joined cursor planes. This prevents our async update's
> +	 * changes from getting overridden by a previous synchronous update's
> +	 * state.
> +	 */
> +	if (!intel_cursor_joiner_commits_idle(display, crtc_state))
> +		goto slow;
> +
>   	new_plane_state = to_intel_plane_state(intel_plane_duplicate_state(&plane->base));
>   	if (!new_plane_state)
>   		return -ENOMEM;


^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH 3/6] drm/i915/cursor: Handle secondary cursor state
  2026-07-06 11:56 ` [PATCH 3/6] drm/i915/cursor: Handle secondary cursor state Nemesa Garg
@ 2026-07-29 15:29   ` Borah, Chaitanya Kumar
  0 siblings, 0 replies; 17+ messages in thread
From: Borah, Chaitanya Kumar @ 2026-07-29 15:29 UTC (permalink / raw)
  To: Nemesa Garg, intel-gfx, intel-xe



On 7/6/2026 5:26 PM, Nemesa Garg wrote:
> In joiner mode the fast path cursor update must handle
> secondary pipes. Iterate over all joined pipes uniformly
> to duplicate plane state, run check_plane(), pin the
> framebuffer and on success swap in the new plane state
> for each secondary cursor.
> 
> Track every successfully prepared pipe in a joined[] array
> of struct intel_cursor_pipe so that later frontbuffer, unpin
> and error-cleanup paths treat primary and secondaries uniformly,
> and ensures the primary's pinned framebuffer is released if a
> secondary fails partway through.
> 
> v2: Use intel_crtc_joined_pipe_mask(). [Ville]
>      Add locking mechanism. [Ville]
> v3: Drop the per-pipe fastpath mutex array. [sashiko]
> v4: Fold parallel arrays into struct intel_cursor_pipe joined[],
>      unify primary/secondary in a single loop, and use bare
>      check_plane(). [Chaitanya]
> 
> Assisted-by: Claude:claude-sonnet-4.6
> Signed-off-by: Nemesa Garg <nemesa.garg@intel.com>
> ---
>   drivers/gpu/drm/i915/display/intel_cursor.c | 125 ++++++++++++++------
>   1 file changed, 90 insertions(+), 35 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_cursor.c b/drivers/gpu/drm/i915/display/intel_cursor.c
> index 632f7a0a5a63..fad5d5302b36 100644
> --- a/drivers/gpu/drm/i915/display/intel_cursor.c
> +++ b/drivers/gpu/drm/i915/display/intel_cursor.c
> @@ -864,6 +864,14 @@ intel_cursor_fastpath_update_plane_state(struct intel_plane_state *plane_state,
>   	intel_plane_copy_uapi_to_hw_state(NULL, plane_state, plane_state, hw_crtc);
>   }
>   
> +struct intel_cursor_pipe {
> +	struct intel_plane *plane;
> +	struct intel_crtc *crtc;
> +	struct intel_crtc_state *crtc_state;
> +	struct intel_plane_state *old_plane_state;
> +	struct intel_plane_state *new_plane_state;
> +};
> +

nit: struct intel_cursor_joiner_state

>   static int
>   intel_legacy_cursor_update(struct drm_plane *_plane,
>   			   struct drm_crtc *_crtc,
> @@ -879,11 +887,13 @@ intel_legacy_cursor_update(struct drm_plane *_plane,
>   	struct intel_display *display = to_intel_display(plane);
>   	struct intel_plane_state *old_plane_state =
>   		to_intel_plane_state(plane->base.state);
> -	struct intel_plane_state *new_plane_state;
> +	struct intel_plane_state *new_plane_state = NULL;
>   	struct intel_crtc_state *crtc_state =
>   		to_intel_crtc_state(crtc->base.state);
> -	struct intel_crtc_state *new_crtc_state;
>   	struct intel_vblank_evade_ctx evade;
> +	struct intel_cursor_pipe joined[I915_MAX_PIPES] = {};

nit: joined_pipe_state

> +	struct intel_crtc *pipe_crtc;
> +	int num_pipes = 0;
>   	int ret;
>   
>   	/*
> @@ -929,38 +939,74 @@ intel_legacy_cursor_update(struct drm_plane *_plane,
>   	if (!intel_cursor_joiner_commits_idle(display, crtc_state))
>   		goto slow;
>   
> -	new_plane_state = to_intel_plane_state(intel_plane_duplicate_state(&plane->base));
> -	if (!new_plane_state)
> -		return -ENOMEM;
> +	/*
> +	 * Iterate over all joined pipes (primary and secondary) uniformly.
> +	 * The joined pipe mask includes both the primary pipe and all
> +	 * secondary joiner pipes, allowing us to handle them all the same way.
> +	 */
> +	for_each_intel_crtc_in_pipe_mask(display, pipe_crtc,
> +					 intel_crtc_joined_pipe_mask(crtc_state)) {
> +		struct intel_cursor_pipe *j = &joined[num_pipes];
> +
> +		j->plane = intel_crtc_get_plane(pipe_crtc, PLANE_CURSOR);
> +		j->crtc = pipe_crtc;
> +		j->crtc_state = to_intel_crtc_state(pipe_crtc->base.state);
> +		j->old_plane_state = to_intel_plane_state(j->plane->base.state);
> +		j->new_plane_state =
> +			to_intel_plane_state(intel_plane_duplicate_state(&j->plane->base));
> +
> +		if (!j->new_plane_state) {
> +			ret = -ENOMEM;
> +			goto out_free;
> +		}
> +
> +		/* Joiner secondary: uapi.crtc points at the primary uapi crtc. */
> +		j->new_plane_state->uapi.crtc = &crtc->base;
> +

This copies the secondary pipe's uapi.crtc to the primary's crtc. So the 
first time any atomic commit touches this plane by its own pipe after a 
fast path joiner cursor update, it will still point to the primary's 
crtc and results into a atomic check fail. See plane_switching_crtc().

As far as I see, nothing else in the driver treats a secondary's plane 
state that way.

This should perhaps be

j->new_plane_state->uapi.crtc = &pipe_crtc->base;


> +		intel_cursor_fastpath_update_plane_state(j->new_plane_state, fb,
> +							 pipe_crtc,
> +							 crtc_x, crtc_y,
> +							 crtc_w, crtc_h,
> +							 src_x, src_y,
> +							 src_w, src_h);
> +
> +		ret = j->plane->check_plane(j->crtc_state, j->new_plane_state);
> +		if (ret) {
> +			intel_plane_destroy_state(&j->plane->base,
> +						  &j->new_plane_state->uapi);
> +			goto out_free;
> +		}
> +
> +		ret = intel_plane_pin_fb(j->new_plane_state, j->old_plane_state);
> +		if (ret) {
> +			intel_plane_destroy_state(&j->plane->base,
> +						  &j->new_plane_state->uapi);
> +			goto out_free;
> +		}
>   
> -	new_crtc_state = to_intel_crtc_state(intel_crtc_duplicate_state(&crtc->base));
> -	if (!new_crtc_state) {
> -		ret = -ENOMEM;
> -		goto out_free;
> +		num_pipes++;
>   	}
>   
> -	intel_cursor_fastpath_update_plane_state(new_plane_state, fb,
> -						 crtc,
> -						 crtc_x, crtc_y, crtc_w, crtc_h,
> -						 src_x, src_y, src_w, src_h);
> +	new_plane_state = joined[0].new_plane_state;
> +	intel_frontbuffer_flush(to_intel_frontbuffer(joined[0].new_plane_state->hw.fb),
> +				ORIGIN_CURSOR_UPDATE);
>   
> -	ret = intel_plane_atomic_check_with_state(crtc_state, new_crtc_state,
> -						  old_plane_state, new_plane_state);
> -	if (ret)
> -		goto out_free;
> +	for (int i = 0; i < num_pipes; i++)
> +		intel_frontbuffer_track(to_intel_frontbuffer(joined[i].old_plane_state->hw.fb),
> +					to_intel_frontbuffer(joined[i].new_plane_state->hw.fb),
> +					joined[i].plane->frontbuffer_bit);
>   
> -	ret = intel_plane_pin_fb(new_plane_state, old_plane_state);
> -	if (ret)
> -		goto out_free;
> +	for (int i = 0; i < num_pipes; i++) {
> +		struct intel_crtc_state *cs =
> +			to_intel_crtc_state(joined[i].crtc->base.state);

Isn't this already collected in joined[].crtc_state?

>   
> -	intel_frontbuffer_flush(to_intel_frontbuffer(new_plane_state->hw.fb),
> -				ORIGIN_CURSOR_UPDATE);
> -	intel_frontbuffer_track(to_intel_frontbuffer(old_plane_state->hw.fb),
> -				to_intel_frontbuffer(new_plane_state->hw.fb),
> -				plane->frontbuffer_bit);
> +		joined[i].plane->base.state = &joined[i].new_plane_state->uapi;
>   
> -	/* Swap plane state */
> -	plane->base.state = &new_plane_state->uapi;
> +		if (joined[i].new_plane_state->uapi.visible)
> +			cs->active_planes |= BIT(PLANE_CURSOR);
> +		else
> +			cs->active_planes &= ~BIT(PLANE_CURSOR);
> +	}
>   
>   	/*
>   	 * We cannot swap crtc_state as it may be in use by an atomic commit or
> @@ -972,7 +1018,6 @@ intel_legacy_cursor_update(struct drm_plane *_plane,
>   	 * planes atomically. If the cursor was part of the atomic update then
>   	 * we would have taken the slowpath.
>   	 */
> -	crtc_state->active_planes = new_crtc_state->active_planes;
>   
>   	intel_vblank_evade_init(crtc_state, crtc_state, &evade);
>   
> @@ -1005,6 +1050,10 @@ intel_legacy_cursor_update(struct drm_plane *_plane,
>   
>   	intel_psr_unlock(crtc_state);
>   
> +	/*
> +	 * Schedule or immediately unpin old framebuffers.
> +	 * Protect against concurrent access.
> +	 */
>   	if (old_plane_state->ggtt_vma != new_plane_state->ggtt_vma) {
>   		drm_vblank_work_init(&old_plane_state->unpin_work, &crtc->base,
>   				     intel_cursor_unpin_work);
> @@ -1013,18 +1062,24 @@ intel_legacy_cursor_update(struct drm_plane *_plane,
>   					 drm_crtc_accurate_vblank_count(&crtc->base) + 1,
>   					 false);
>   
> -		old_plane_state = NULL;
> +		joined[0].old_plane_state = NULL;
>   	} else {
>   		intel_plane_unpin_fb(old_plane_state);
>   	}
>   
>   out_free:
> -	if (new_crtc_state)
> -		intel_crtc_destroy_state(&crtc->base, &new_crtc_state->uapi);
> -	if (ret)
> -		intel_plane_destroy_state(&plane->base, &new_plane_state->uapi);
> -	else if (old_plane_state)
> -		intel_plane_destroy_state(&plane->base, &old_plane_state->uapi);
> +	if (ret) {
> +		for (int i = 0; i < num_pipes; i++) {
> +			intel_plane_unpin_fb(joined[i].new_plane_state);
> +			intel_plane_destroy_state(&joined[i].plane->base,
> +						  &joined[i].new_plane_state->uapi);
> +		}
> +	} else {
> +		for (int i = 0; i < num_pipes; i++)
> +			if (joined[i].old_plane_state)
> +				intel_plane_destroy_state(&joined[i].plane->base,
> +							  &joined[i].old_plane_state->uapi);
> +	}
>   	return ret;
>   
>   slow:


^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH 4/6] drm/i915/cursor: Program secondary cursor planes
  2026-07-06 11:56 ` [PATCH 4/6] drm/i915/cursor: Program secondary cursor planes Nemesa Garg
@ 2026-07-29 15:30   ` Borah, Chaitanya Kumar
  0 siblings, 0 replies; 17+ messages in thread
From: Borah, Chaitanya Kumar @ 2026-07-29 15:30 UTC (permalink / raw)
  To: Nemesa Garg, intel-gfx, intel-xe



On 7/6/2026 5:26 PM, Nemesa Garg wrote:
> Iterate over all joined pipes when arming/disabling the cursor plane so
> secondary pipes are updated together with the primary. The pin, check
> and state duplication for secondary pipes was already prepared in the
> previous commit; this converts the update_arm pass to a loop over the
> joined[] array.
> 
> Because the whole loop runs inside a single primary vblank-evade,
> sample intel_crtc_get_vblank_counter() per pipe around each arm and
> emit a drm_err() if the counter ticks during that pipe's own
> programming.
> 
> v2: Check primary and secondary pipe together. [Ville]
> v3: Use struct intel_cursor_pipe. [Ville]
> v4: Add per-pipe vblank straddle detection around the arm loop. [Chaitanya]
> 
> Assisted-by: Claude:claude-sonnet-4.6
> Signed-off-by: Nemesa Garg <nemesa.garg@intel.com>
> ---
>   drivers/gpu/drm/i915/display/intel_cursor.c | 26 +++++++++++++++++----
>   1 file changed, 21 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_cursor.c b/drivers/gpu/drm/i915/display/intel_cursor.c
> index fad5d5302b36..65e1fa60a606 100644
> --- a/drivers/gpu/drm/i915/display/intel_cursor.c
> +++ b/drivers/gpu/drm/i915/display/intel_cursor.c
> @@ -1039,11 +1039,27 @@ intel_legacy_cursor_update(struct drm_plane *_plane,
>   		local_irq_disable();
>   	}
>   
> -	if (new_plane_state->uapi.visible) {
> -		intel_plane_update_noarm(NULL, plane, crtc_state, new_plane_state);
> -		intel_plane_update_arm(NULL, plane, crtc_state, new_plane_state);
> -	} else {
> -		intel_plane_disable_arm(NULL, plane, crtc_state);
> +	for (int i = 0; i < num_pipes; i++) {
> +		u32 start_vbl_count = intel_crtc_get_vblank_counter(joined[i].crtc);
> +		u32 end_vbl_count;
> +
> +		if (joined[i].new_plane_state->uapi.visible) {
> +			intel_plane_update_noarm(NULL, joined[i].plane,
> +						 joined[i].crtc_state,
> +						 joined[i].new_plane_state);
> +			intel_plane_update_arm(NULL, joined[i].plane,
> +					       joined[i].crtc_state,
> +					       joined[i].new_plane_state);
> +		} else {
> +			intel_plane_disable_arm(NULL, joined[i].plane, joined[i].crtc_state);
> +		}
> +
> +		end_vbl_count = intel_crtc_get_vblank_counter(joined[i].crtc);
> +		if (start_vbl_count != end_vbl_count)
> +			drm_err(display->drm,
> +				"Atomic update failure on pipe %c (start=%u end=%u)\n",
> +				pipe_name(joined[i].crtc->pipe),
> +				start_vbl_count, end_vbl_count);

The straddling logic should be outside the for loop. We want to make 
sure all the updates went in the same frame. Not that write to each pipe 
is done within the same frame.

Assuming that joiner pipes are always in sync, sampling the frame count 
only from the primary pipe should be enough. Please call this out in a 
comment - this and also that the evasion logic also depends on the 
primary pipe.

Also no log printing when IRQs are disabled. It extends the period IRQs 
are off and will make a straddle, if any, even worse.

>   	}
>   
>   	local_irq_enable();


^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2026-07-29 15:30 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-06 11:56 [PATCH 0/6] Enable joiner cursor fast updates Nemesa Garg
2026-07-06 11:56 ` [PATCH 1/6] drm/i915/cursor: Check joiner cursor commit status Nemesa Garg
2026-07-29 15:28   ` Borah, Chaitanya Kumar
2026-07-06 11:56 ` [PATCH 2/6] drm/i915/cursor: Add helper to update cursor plane Nemesa Garg
2026-07-06 11:56 ` [PATCH 3/6] drm/i915/cursor: Handle secondary cursor state Nemesa Garg
2026-07-29 15:29   ` Borah, Chaitanya Kumar
2026-07-06 11:56 ` [PATCH 4/6] drm/i915/cursor: Program secondary cursor planes Nemesa Garg
2026-07-29 15:30   ` Borah, Chaitanya Kumar
2026-07-06 11:56 ` [PATCH 5/6] drm/i915/cursor: Schedule cursor unpin per joined pipe Nemesa Garg
2026-07-06 11:56 ` [PATCH 6/6] drm/i915/cursor: Allow joiner cursor fast path update Nemesa Garg
2026-07-06 19:09 ` ✓ i915.CI.BAT: success for Enable joiner cursor fast updates (rev4) Patchwork
2026-07-07  0:20 ` ✗ i915.CI.Full: failure " Patchwork
  -- strict thread matches above, loose matches on Subject: below --
2026-06-08  6:26 [PATCH 0/6] Enable joiner cursor fast updates Nemesa Garg
2026-06-08  6:26 ` [PATCH 3/6] drm/i915/cursor: Handle secondary cursor state Nemesa Garg
2026-07-01 16:30   ` Borah, Chaitanya Kumar
2026-07-06  8:40     ` Garg, Nemesa
2026-04-28 14:16 [PATCH 0/6] Enable joiner cursor fast updates Nemesa Garg
2026-04-28 14:16 ` [PATCH 3/6] drm/i915/cursor: Handle secondary cursor state Nemesa Garg
2026-04-22  7:37 [PATCH 0/6] Enable joiner cursor fast updates Nemesa Garg
2026-04-22  7:37 ` [PATCH 3/6] drm/i915/cursor: Handle secondary cursor state Nemesa Garg

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox