All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 00/10] vga_switcheroo, drm: Push fbcon handling into DRM clients
@ 2026-07-07 13:38 ` Thomas Zimmermann
  0 siblings, 0 replies; 32+ messages in thread
From: Thomas Zimmermann @ 2026-07-07 13:38 UTC (permalink / raw)
  To: lukas, jfalempe, alexander.deucher, christian.koenig, airlied,
	simona, maarten.lankhorst, mripard, jani.nikula, joonas.lahtinen,
	rodrigo.vivi, tursulin, lyude, dakr, deller
  Cc: dri-devel, amd-gfx, intel-gfx, nouveau, linux-fbdev,
	sashiko-reviews

Vga_switcheroo currently invokes fb_switch_outputs() to inform fbcon
about switching of the physical outputs among framebuffer devices. But
new DRM clients to not use fbdev/fbcon and might require their own
vga_switcheroo support. Let's strictly separate them from each other.

Remove fbdev/fbcon from vga_switcheroo. Introduce a pre_switch callback
for vga_switcheroo clients to do the fbcon update. Allows for removing
all direct interactions between vga_switcheroo and fbdev/fbcon.

Also replace the existing reprobe hook with post_switch for symetry.

At the same time, push the fbcon update into DRM's client for fbdev
emulation. Do this with the new DRM client callback acquire_outputs,
so that other clients can have their own handling of vga_switcheroo.

There are only four drivers that support vga_switcheroo: amdgpu,
radeon, i915 and nouveau. Update each of them with the new callbacks.
When vga_switcheroo now invokes pre_switch, each DRM driver forwards
to aquire_outputs and lets the DRM clients handle the new outputs.

Tested with radeon on a notebook with Radeon HD 4225 and HD 5430.

Thomas Zimmermann (10):
  drm/edid: Include <linux/fb.h>
  drm/client: Add acquire_outputs callback; implement for fbdev
    emulation
  vga_switcheroo: Add pre_switch callback to client ops
  vga_switcheroo: Add post_switch callback to client ops
  drm/amdgpu: Implement struct vga_switcheroo_client_ops.pre_switch
  drm/i915: Implement vga_switcheroo_client_ops.pre_switch
  drm/nouveau: Implement vga_switcheroo_client_ops.pre_switch
  drm/nouveau: Implement vga_switcheroo_client_ops.post_switch
  drm/radeon: Implement struct vga_switcheroo_client_ops.pre_switch
  vga-switcheroo: Remove unused interfaces

 drivers/gpu/drm/amd/amdgpu/amdgpu_device.c |  9 ++++-
 drivers/gpu/drm/clients/drm_fbdev_client.c | 23 ++++++++----
 drivers/gpu/drm/drm_client_event.c         | 18 ++++++++++
 drivers/gpu/drm/drm_edid.c                 |  1 +
 drivers/gpu/drm/i915/i915_switcheroo.c     | 11 +++++-
 drivers/gpu/drm/nouveau/nouveau_vga.c      | 28 +++++++++------
 drivers/gpu/drm/radeon/radeon_device.c     |  9 ++++-
 drivers/gpu/vga/vga_switcheroo.c           | 41 +++++-----------------
 drivers/video/fbdev/core/fbcon.c           |  8 -----
 include/drm/drm_client.h                   | 14 ++++++++
 include/drm/drm_client_event.h             |  3 ++
 include/linux/vga_switcheroo.h             | 30 +++++++++-------
 12 files changed, 122 insertions(+), 73 deletions(-)


base-commit: cd8abe2554ec7eba16c1d48ab508732bf93534eb
-- 
2.54.0


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

* [PATCH 00/10] vga_switcheroo, drm: Push fbcon handling into DRM clients
@ 2026-07-07 13:38 ` Thomas Zimmermann
  0 siblings, 0 replies; 32+ messages in thread
From: Thomas Zimmermann @ 2026-07-07 13:38 UTC (permalink / raw)
  To: lukas, jfalempe, alexander.deucher, christian.koenig, airlied,
	simona, maarten.lankhorst, mripard, jani.nikula, joonas.lahtinen,
	rodrigo.vivi, tursulin, lyude, dakr, deller
  Cc: dri-devel, amd-gfx, intel-gfx, nouveau, linux-fbdev,
	sashiko-reviews, Thomas Zimmermann

Vga_switcheroo currently invokes fb_switch_outputs() to inform fbcon
about switching of the physical outputs among framebuffer devices. But
new DRM clients to not use fbdev/fbcon and might require their own
vga_switcheroo support. Let's strictly separate them from each other.

Remove fbdev/fbcon from vga_switcheroo. Introduce a pre_switch callback
for vga_switcheroo clients to do the fbcon update. Allows for removing
all direct interactions between vga_switcheroo and fbdev/fbcon.

Also replace the existing reprobe hook with post_switch for symetry.

At the same time, push the fbcon update into DRM's client for fbdev
emulation. Do this with the new DRM client callback acquire_outputs,
so that other clients can have their own handling of vga_switcheroo.

There are only four drivers that support vga_switcheroo: amdgpu,
radeon, i915 and nouveau. Update each of them with the new callbacks.
When vga_switcheroo now invokes pre_switch, each DRM driver forwards
to aquire_outputs and lets the DRM clients handle the new outputs.

Tested with radeon on a notebook with Radeon HD 4225 and HD 5430.

Thomas Zimmermann (10):
  drm/edid: Include <linux/fb.h>
  drm/client: Add acquire_outputs callback; implement for fbdev
    emulation
  vga_switcheroo: Add pre_switch callback to client ops
  vga_switcheroo: Add post_switch callback to client ops
  drm/amdgpu: Implement struct vga_switcheroo_client_ops.pre_switch
  drm/i915: Implement vga_switcheroo_client_ops.pre_switch
  drm/nouveau: Implement vga_switcheroo_client_ops.pre_switch
  drm/nouveau: Implement vga_switcheroo_client_ops.post_switch
  drm/radeon: Implement struct vga_switcheroo_client_ops.pre_switch
  vga-switcheroo: Remove unused interfaces

 drivers/gpu/drm/amd/amdgpu/amdgpu_device.c |  9 ++++-
 drivers/gpu/drm/clients/drm_fbdev_client.c | 23 ++++++++----
 drivers/gpu/drm/drm_client_event.c         | 18 ++++++++++
 drivers/gpu/drm/drm_edid.c                 |  1 +
 drivers/gpu/drm/i915/i915_switcheroo.c     | 11 +++++-
 drivers/gpu/drm/nouveau/nouveau_vga.c      | 28 +++++++++------
 drivers/gpu/drm/radeon/radeon_device.c     |  9 ++++-
 drivers/gpu/vga/vga_switcheroo.c           | 41 +++++-----------------
 drivers/video/fbdev/core/fbcon.c           |  8 -----
 include/drm/drm_client.h                   | 14 ++++++++
 include/drm/drm_client_event.h             |  3 ++
 include/linux/vga_switcheroo.h             | 30 +++++++++-------
 12 files changed, 122 insertions(+), 73 deletions(-)


base-commit: cd8abe2554ec7eba16c1d48ab508732bf93534eb
-- 
2.54.0


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

* [PATCH 01/10] drm/edid: Include <linux/fb.h>
  2026-07-07 13:38 ` Thomas Zimmermann
@ 2026-07-07 13:38   ` Thomas Zimmermann
  -1 siblings, 0 replies; 32+ messages in thread
From: Thomas Zimmermann @ 2026-07-07 13:38 UTC (permalink / raw)
  To: lukas, jfalempe, alexander.deucher, christian.koenig, airlied,
	simona, maarten.lankhorst, mripard, jani.nikula, joonas.lahtinen,
	rodrigo.vivi, tursulin, lyude, dakr, deller
  Cc: dri-devel, amd-gfx, intel-gfx, nouveau, linux-fbdev,
	sashiko-reviews

We currently get <linux/fb.h> via <linux/vga_switcheroo.h>. Include it
explicitly.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
 drivers/gpu/drm/drm_edid.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index 07970e5b5f65..86ae2d8d4de2 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -32,6 +32,7 @@
 #include <linux/byteorder/generic.h>
 #include <linux/cec.h>
 #include <linux/export.h>
+#include <linux/fb.h> /* for KHZ2PICOS() */
 #include <linux/hdmi.h>
 #include <linux/i2c.h>
 #include <linux/kernel.h>
-- 
2.54.0


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

* [PATCH 01/10] drm/edid: Include <linux/fb.h>
@ 2026-07-07 13:38   ` Thomas Zimmermann
  0 siblings, 0 replies; 32+ messages in thread
From: Thomas Zimmermann @ 2026-07-07 13:38 UTC (permalink / raw)
  To: lukas, jfalempe, alexander.deucher, christian.koenig, airlied,
	simona, maarten.lankhorst, mripard, jani.nikula, joonas.lahtinen,
	rodrigo.vivi, tursulin, lyude, dakr, deller
  Cc: dri-devel, amd-gfx, intel-gfx, nouveau, linux-fbdev,
	sashiko-reviews, Thomas Zimmermann

We currently get <linux/fb.h> via <linux/vga_switcheroo.h>. Include it
explicitly.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
 drivers/gpu/drm/drm_edid.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index 07970e5b5f65..86ae2d8d4de2 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -32,6 +32,7 @@
 #include <linux/byteorder/generic.h>
 #include <linux/cec.h>
 #include <linux/export.h>
+#include <linux/fb.h> /* for KHZ2PICOS() */
 #include <linux/hdmi.h>
 #include <linux/i2c.h>
 #include <linux/kernel.h>
-- 
2.54.0


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

* [PATCH 02/10] drm/client: Add acquire_outputs callback; implement for fbdev emulation
  2026-07-07 13:38 ` Thomas Zimmermann
@ 2026-07-07 13:38   ` Thomas Zimmermann
  -1 siblings, 0 replies; 32+ messages in thread
From: Thomas Zimmermann @ 2026-07-07 13:38 UTC (permalink / raw)
  To: lukas, jfalempe, alexander.deucher, christian.koenig, airlied,
	simona, maarten.lankhorst, mripard, jani.nikula, joonas.lahtinen,
	rodrigo.vivi, tursulin, lyude, dakr, deller
  Cc: dri-devel, amd-gfx, intel-gfx, nouveau, linux-fbdev,
	sashiko-reviews

Add the callback acquire_outputs to drm_client_funcs to inform an internal
DRM client that vga-switcheroo is about to switch the physical outputs to
the client's device. Allows the client to prepare its internal state for
the upcoming switch.

Wire up the DRM client helpers to invoke the helper for a device's
clients.

Implement acquire_outputs for fbdev emulation. Invoke fb_switch_outputs(),
which remaps framebuffers to virtual terminals in fbcon. Currently this
is still being done by vga-switcheroo. With more DRM clients becoming
available, vga-switcheroo needs to become client agonostic.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
 drivers/gpu/drm/clients/drm_fbdev_client.c | 23 +++++++++++++++-------
 drivers/gpu/drm/drm_client_event.c         | 18 +++++++++++++++++
 include/drm/drm_client.h                   | 14 +++++++++++++
 include/drm/drm_client_event.h             |  3 +++
 4 files changed, 51 insertions(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/clients/drm_fbdev_client.c b/drivers/gpu/drm/clients/drm_fbdev_client.c
index 91d196a397cf..827f32668714 100644
--- a/drivers/gpu/drm/clients/drm_fbdev_client.c
+++ b/drivers/gpu/drm/clients/drm_fbdev_client.c
@@ -47,6 +47,14 @@ static int drm_fbdev_client_restore(struct drm_client_dev *client, bool force)
 	return 0;
 }
 
+static void drm_fbdev_client_acquire_outputs(struct drm_client_dev *client)
+{
+	struct drm_fb_helper *fb_helper = drm_fb_helper_from_client(client);
+
+	if (fb_helper->info)
+		fb_switch_outputs(fb_helper->info);
+}
+
 static int drm_fbdev_client_hotplug(struct drm_client_dev *client)
 {
 	struct drm_fb_helper *fb_helper = drm_fb_helper_from_client(client);
@@ -95,13 +103,14 @@ static int drm_fbdev_client_resume(struct drm_client_dev *client)
 }
 
 static const struct drm_client_funcs drm_fbdev_client_funcs = {
-	.owner		= THIS_MODULE,
-	.free		= drm_fbdev_client_free,
-	.unregister	= drm_fbdev_client_unregister,
-	.restore	= drm_fbdev_client_restore,
-	.hotplug	= drm_fbdev_client_hotplug,
-	.suspend	= drm_fbdev_client_suspend,
-	.resume		= drm_fbdev_client_resume,
+	.owner		 = THIS_MODULE,
+	.free		 = drm_fbdev_client_free,
+	.unregister	 = drm_fbdev_client_unregister,
+	.restore	 = drm_fbdev_client_restore,
+	.acquire_outputs = drm_fbdev_client_acquire_outputs,
+	.hotplug	 = drm_fbdev_client_hotplug,
+	.suspend	 = drm_fbdev_client_suspend,
+	.resume		 = drm_fbdev_client_resume,
 };
 
 /**
diff --git a/drivers/gpu/drm/drm_client_event.c b/drivers/gpu/drm/drm_client_event.c
index 7b3e362f7926..f0af584da23c 100644
--- a/drivers/gpu/drm/drm_client_event.c
+++ b/drivers/gpu/drm/drm_client_event.c
@@ -123,6 +123,24 @@ void drm_client_dev_restore(struct drm_device *dev, bool force)
 	mutex_unlock(&dev->clientlist_mutex);
 }
 
+void drm_client_dev_acquire_outputs(struct drm_device *dev)
+{
+	struct drm_client_dev *client;
+
+	if (!drm_core_check_feature(dev, DRIVER_MODESET))
+		return;
+
+	mutex_lock(&dev->clientlist_mutex);
+	list_for_each_entry(client, &dev->clientlist, list) {
+		if (!client->funcs || !client->funcs->acquire_outputs)
+			continue;
+
+		client->funcs->acquire_outputs(client);
+	}
+	mutex_unlock(&dev->clientlist_mutex);
+}
+EXPORT_SYMBOL(drm_client_dev_acquire_outputs);
+
 static int drm_client_suspend(struct drm_client_dev *client)
 {
 	struct drm_device *dev = client->dev;
diff --git a/include/drm/drm_client.h b/include/drm/drm_client.h
index 49a21f3dcb36..10a0cae3e48f 100644
--- a/include/drm/drm_client.h
+++ b/include/drm/drm_client.h
@@ -66,6 +66,20 @@ struct drm_client_funcs {
 	 */
 	int (*restore)(struct drm_client_dev *client, bool force);
 
+	/**
+	 * @acquire_outputs:
+	 *
+	 * Called by vga-switcheroo. Informs the client that the outputs will
+	 * be switched to its device. When @acquire_outputs runs, the outputs
+	 * have not been switched yet. The client should only prepare the software
+	 * state. After the switch happened, the client might get a hotplug
+	 * event to update the hardware state.
+	 *
+	 * This callback exists for remapping framebuffers to virtual terminals
+	 * in fbcon.
+	 */
+	void (*acquire_outputs)(struct drm_client_dev *client);
+
 	/**
 	 * @hotplug:
 	 *
diff --git a/include/drm/drm_client_event.h b/include/drm/drm_client_event.h
index 79369c755bc9..c93f404bae1d 100644
--- a/include/drm/drm_client_event.h
+++ b/include/drm/drm_client_event.h
@@ -11,6 +11,7 @@ struct drm_device;
 void drm_client_dev_unregister(struct drm_device *dev);
 void drm_client_dev_hotplug(struct drm_device *dev);
 void drm_client_dev_restore(struct drm_device *dev, bool force);
+void drm_client_dev_acquire_outputs(struct drm_device *dev);
 void drm_client_dev_suspend(struct drm_device *dev);
 void drm_client_dev_resume(struct drm_device *dev);
 #else
@@ -20,6 +21,8 @@ static inline void drm_client_dev_hotplug(struct drm_device *dev)
 { }
 static inline void drm_client_dev_restore(struct drm_device *dev, bool force)
 { }
+static inline void drm_client_dev_acquire_outputs(struct drm_device *dev)
+{ }
 static inline void drm_client_dev_suspend(struct drm_device *dev)
 { }
 static inline void drm_client_dev_resume(struct drm_device *dev)
-- 
2.54.0


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

* [PATCH 02/10] drm/client: Add acquire_outputs callback; implement for fbdev emulation
@ 2026-07-07 13:38   ` Thomas Zimmermann
  0 siblings, 0 replies; 32+ messages in thread
From: Thomas Zimmermann @ 2026-07-07 13:38 UTC (permalink / raw)
  To: lukas, jfalempe, alexander.deucher, christian.koenig, airlied,
	simona, maarten.lankhorst, mripard, jani.nikula, joonas.lahtinen,
	rodrigo.vivi, tursulin, lyude, dakr, deller
  Cc: dri-devel, amd-gfx, intel-gfx, nouveau, linux-fbdev,
	sashiko-reviews, Thomas Zimmermann

Add the callback acquire_outputs to drm_client_funcs to inform an internal
DRM client that vga-switcheroo is about to switch the physical outputs to
the client's device. Allows the client to prepare its internal state for
the upcoming switch.

Wire up the DRM client helpers to invoke the helper for a device's
clients.

Implement acquire_outputs for fbdev emulation. Invoke fb_switch_outputs(),
which remaps framebuffers to virtual terminals in fbcon. Currently this
is still being done by vga-switcheroo. With more DRM clients becoming
available, vga-switcheroo needs to become client agonostic.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
 drivers/gpu/drm/clients/drm_fbdev_client.c | 23 +++++++++++++++-------
 drivers/gpu/drm/drm_client_event.c         | 18 +++++++++++++++++
 include/drm/drm_client.h                   | 14 +++++++++++++
 include/drm/drm_client_event.h             |  3 +++
 4 files changed, 51 insertions(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/clients/drm_fbdev_client.c b/drivers/gpu/drm/clients/drm_fbdev_client.c
index 91d196a397cf..827f32668714 100644
--- a/drivers/gpu/drm/clients/drm_fbdev_client.c
+++ b/drivers/gpu/drm/clients/drm_fbdev_client.c
@@ -47,6 +47,14 @@ static int drm_fbdev_client_restore(struct drm_client_dev *client, bool force)
 	return 0;
 }
 
+static void drm_fbdev_client_acquire_outputs(struct drm_client_dev *client)
+{
+	struct drm_fb_helper *fb_helper = drm_fb_helper_from_client(client);
+
+	if (fb_helper->info)
+		fb_switch_outputs(fb_helper->info);
+}
+
 static int drm_fbdev_client_hotplug(struct drm_client_dev *client)
 {
 	struct drm_fb_helper *fb_helper = drm_fb_helper_from_client(client);
@@ -95,13 +103,14 @@ static int drm_fbdev_client_resume(struct drm_client_dev *client)
 }
 
 static const struct drm_client_funcs drm_fbdev_client_funcs = {
-	.owner		= THIS_MODULE,
-	.free		= drm_fbdev_client_free,
-	.unregister	= drm_fbdev_client_unregister,
-	.restore	= drm_fbdev_client_restore,
-	.hotplug	= drm_fbdev_client_hotplug,
-	.suspend	= drm_fbdev_client_suspend,
-	.resume		= drm_fbdev_client_resume,
+	.owner		 = THIS_MODULE,
+	.free		 = drm_fbdev_client_free,
+	.unregister	 = drm_fbdev_client_unregister,
+	.restore	 = drm_fbdev_client_restore,
+	.acquire_outputs = drm_fbdev_client_acquire_outputs,
+	.hotplug	 = drm_fbdev_client_hotplug,
+	.suspend	 = drm_fbdev_client_suspend,
+	.resume		 = drm_fbdev_client_resume,
 };
 
 /**
diff --git a/drivers/gpu/drm/drm_client_event.c b/drivers/gpu/drm/drm_client_event.c
index 7b3e362f7926..f0af584da23c 100644
--- a/drivers/gpu/drm/drm_client_event.c
+++ b/drivers/gpu/drm/drm_client_event.c
@@ -123,6 +123,24 @@ void drm_client_dev_restore(struct drm_device *dev, bool force)
 	mutex_unlock(&dev->clientlist_mutex);
 }
 
+void drm_client_dev_acquire_outputs(struct drm_device *dev)
+{
+	struct drm_client_dev *client;
+
+	if (!drm_core_check_feature(dev, DRIVER_MODESET))
+		return;
+
+	mutex_lock(&dev->clientlist_mutex);
+	list_for_each_entry(client, &dev->clientlist, list) {
+		if (!client->funcs || !client->funcs->acquire_outputs)
+			continue;
+
+		client->funcs->acquire_outputs(client);
+	}
+	mutex_unlock(&dev->clientlist_mutex);
+}
+EXPORT_SYMBOL(drm_client_dev_acquire_outputs);
+
 static int drm_client_suspend(struct drm_client_dev *client)
 {
 	struct drm_device *dev = client->dev;
diff --git a/include/drm/drm_client.h b/include/drm/drm_client.h
index 49a21f3dcb36..10a0cae3e48f 100644
--- a/include/drm/drm_client.h
+++ b/include/drm/drm_client.h
@@ -66,6 +66,20 @@ struct drm_client_funcs {
 	 */
 	int (*restore)(struct drm_client_dev *client, bool force);
 
+	/**
+	 * @acquire_outputs:
+	 *
+	 * Called by vga-switcheroo. Informs the client that the outputs will
+	 * be switched to its device. When @acquire_outputs runs, the outputs
+	 * have not been switched yet. The client should only prepare the software
+	 * state. After the switch happened, the client might get a hotplug
+	 * event to update the hardware state.
+	 *
+	 * This callback exists for remapping framebuffers to virtual terminals
+	 * in fbcon.
+	 */
+	void (*acquire_outputs)(struct drm_client_dev *client);
+
 	/**
 	 * @hotplug:
 	 *
diff --git a/include/drm/drm_client_event.h b/include/drm/drm_client_event.h
index 79369c755bc9..c93f404bae1d 100644
--- a/include/drm/drm_client_event.h
+++ b/include/drm/drm_client_event.h
@@ -11,6 +11,7 @@ struct drm_device;
 void drm_client_dev_unregister(struct drm_device *dev);
 void drm_client_dev_hotplug(struct drm_device *dev);
 void drm_client_dev_restore(struct drm_device *dev, bool force);
+void drm_client_dev_acquire_outputs(struct drm_device *dev);
 void drm_client_dev_suspend(struct drm_device *dev);
 void drm_client_dev_resume(struct drm_device *dev);
 #else
@@ -20,6 +21,8 @@ static inline void drm_client_dev_hotplug(struct drm_device *dev)
 { }
 static inline void drm_client_dev_restore(struct drm_device *dev, bool force)
 { }
+static inline void drm_client_dev_acquire_outputs(struct drm_device *dev)
+{ }
 static inline void drm_client_dev_suspend(struct drm_device *dev)
 { }
 static inline void drm_client_dev_resume(struct drm_device *dev)
-- 
2.54.0


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

* [PATCH 03/10] vga_switcheroo: Add pre_switch callback to client ops
  2026-07-07 13:38 ` Thomas Zimmermann
@ 2026-07-07 13:38   ` Thomas Zimmermann
  -1 siblings, 0 replies; 32+ messages in thread
From: Thomas Zimmermann @ 2026-07-07 13:38 UTC (permalink / raw)
  To: lukas, jfalempe, alexander.deucher, christian.koenig, airlied,
	simona, maarten.lankhorst, mripard, jani.nikula, joonas.lahtinen,
	rodrigo.vivi, tursulin, lyude, dakr, deller
  Cc: dri-devel, amd-gfx, intel-gfx, nouveau, linux-fbdev,
	sashiko-reviews

Add pre_switch to struct vga_switcheroo_client_ops to inform the
switcheroo client about upcoming switches of the outputs.

This callback is intended to replace the hard-coded call to fbdev's
fb_switch_outputs(). With DRM supporting more clients than just fbdev
emulation, something more flexible is required.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
 drivers/gpu/vga/vga_switcheroo.c |  4 +++-
 include/linux/vga_switcheroo.h   | 12 +++++++++---
 2 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/vga/vga_switcheroo.c b/drivers/gpu/vga/vga_switcheroo.c
index 22cf52b78b75..bdf1e56ae891 100644
--- a/drivers/gpu/vga/vga_switcheroo.c
+++ b/drivers/gpu/vga/vga_switcheroo.c
@@ -733,8 +733,10 @@ static int vga_switchto_stage2(struct vga_switcheroo_client *new_client)
 	if (!active->driver_power_control)
 		set_audio_state(active->id, VGA_SWITCHEROO_OFF);
 
+	if (new_client->ops->pre_switch)
+		new_client->ops->pre_switch(new_client->pdev);
 #if defined(CONFIG_FB)
-	if (new_client->fb_info)
+	else if (new_client->fb_info)
 		fb_switch_outputs(new_client->fb_info);
 #endif
 
diff --git a/include/linux/vga_switcheroo.h b/include/linux/vga_switcheroo.h
index 7e6ac0114d55..d2ce30d8b6f7 100644
--- a/include/linux/vga_switcheroo.h
+++ b/include/linux/vga_switcheroo.h
@@ -127,23 +127,29 @@ struct vga_switcheroo_handler {
  * @set_gpu_state: do the equivalent of suspend/resume for the card.
  * 	Mandatory. This should not cut power to the discrete GPU,
  * 	which is the job of the handler
+ * @gpu_bound: Optional. Called before switching the outputs to the device.
  * @reprobe: poll outputs.
  * 	Optional. This gets called after waking the GPU and switching
  * 	the outputs to it
  * @can_switch: check if the device is in a position to switch now.
  * 	Mandatory. The client should return false if a user space process
  * 	has one of its device files open
+ * @pre_switch: prepare switch
+ *	Optional. This gets called before switching the outputs to the
+ *	GPU. Allows drivers to prepare for the switch.
  * @gpu_bound: notify the client id to audio client when the GPU is bound.
  *
  * Client callbacks. A client can be either a GPU or an audio device on a GPU.
- * The @set_gpu_state and @can_switch methods are mandatory, @reprobe may be
- * set to NULL. For audio clients, the @reprobe member is bogus.
- * OTOH, @gpu_bound is only for audio clients, and not used for GPU clients.
+ * The @set_gpu_state and @can_switch methods are mandatory, @pre_switch and
+ * @reprobe may be set to NULL. For audio clients, the @pre_switch and
+ * @reprobe members are bogus. OTOH, @gpu_bound is only for audio clients,
+ * and not used for GPU clients.
  */
 struct vga_switcheroo_client_ops {
 	void (*set_gpu_state)(struct pci_dev *dev, enum vga_switcheroo_state);
 	void (*reprobe)(struct pci_dev *dev);
 	bool (*can_switch)(struct pci_dev *dev);
+	void (*pre_switch)(struct pci_dev *dev);
 	void (*gpu_bound)(struct pci_dev *dev, enum vga_switcheroo_client_id);
 };
 
-- 
2.54.0


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

* [PATCH 03/10] vga_switcheroo: Add pre_switch callback to client ops
@ 2026-07-07 13:38   ` Thomas Zimmermann
  0 siblings, 0 replies; 32+ messages in thread
From: Thomas Zimmermann @ 2026-07-07 13:38 UTC (permalink / raw)
  To: lukas, jfalempe, alexander.deucher, christian.koenig, airlied,
	simona, maarten.lankhorst, mripard, jani.nikula, joonas.lahtinen,
	rodrigo.vivi, tursulin, lyude, dakr, deller
  Cc: dri-devel, amd-gfx, intel-gfx, nouveau, linux-fbdev,
	sashiko-reviews, Thomas Zimmermann

Add pre_switch to struct vga_switcheroo_client_ops to inform the
switcheroo client about upcoming switches of the outputs.

This callback is intended to replace the hard-coded call to fbdev's
fb_switch_outputs(). With DRM supporting more clients than just fbdev
emulation, something more flexible is required.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
 drivers/gpu/vga/vga_switcheroo.c |  4 +++-
 include/linux/vga_switcheroo.h   | 12 +++++++++---
 2 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/vga/vga_switcheroo.c b/drivers/gpu/vga/vga_switcheroo.c
index 22cf52b78b75..bdf1e56ae891 100644
--- a/drivers/gpu/vga/vga_switcheroo.c
+++ b/drivers/gpu/vga/vga_switcheroo.c
@@ -733,8 +733,10 @@ static int vga_switchto_stage2(struct vga_switcheroo_client *new_client)
 	if (!active->driver_power_control)
 		set_audio_state(active->id, VGA_SWITCHEROO_OFF);
 
+	if (new_client->ops->pre_switch)
+		new_client->ops->pre_switch(new_client->pdev);
 #if defined(CONFIG_FB)
-	if (new_client->fb_info)
+	else if (new_client->fb_info)
 		fb_switch_outputs(new_client->fb_info);
 #endif
 
diff --git a/include/linux/vga_switcheroo.h b/include/linux/vga_switcheroo.h
index 7e6ac0114d55..d2ce30d8b6f7 100644
--- a/include/linux/vga_switcheroo.h
+++ b/include/linux/vga_switcheroo.h
@@ -127,23 +127,29 @@ struct vga_switcheroo_handler {
  * @set_gpu_state: do the equivalent of suspend/resume for the card.
  * 	Mandatory. This should not cut power to the discrete GPU,
  * 	which is the job of the handler
+ * @gpu_bound: Optional. Called before switching the outputs to the device.
  * @reprobe: poll outputs.
  * 	Optional. This gets called after waking the GPU and switching
  * 	the outputs to it
  * @can_switch: check if the device is in a position to switch now.
  * 	Mandatory. The client should return false if a user space process
  * 	has one of its device files open
+ * @pre_switch: prepare switch
+ *	Optional. This gets called before switching the outputs to the
+ *	GPU. Allows drivers to prepare for the switch.
  * @gpu_bound: notify the client id to audio client when the GPU is bound.
  *
  * Client callbacks. A client can be either a GPU or an audio device on a GPU.
- * The @set_gpu_state and @can_switch methods are mandatory, @reprobe may be
- * set to NULL. For audio clients, the @reprobe member is bogus.
- * OTOH, @gpu_bound is only for audio clients, and not used for GPU clients.
+ * The @set_gpu_state and @can_switch methods are mandatory, @pre_switch and
+ * @reprobe may be set to NULL. For audio clients, the @pre_switch and
+ * @reprobe members are bogus. OTOH, @gpu_bound is only for audio clients,
+ * and not used for GPU clients.
  */
 struct vga_switcheroo_client_ops {
 	void (*set_gpu_state)(struct pci_dev *dev, enum vga_switcheroo_state);
 	void (*reprobe)(struct pci_dev *dev);
 	bool (*can_switch)(struct pci_dev *dev);
+	void (*pre_switch)(struct pci_dev *dev);
 	void (*gpu_bound)(struct pci_dev *dev, enum vga_switcheroo_client_id);
 };
 
-- 
2.54.0


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

* [PATCH 04/10] vga_switcheroo: Add post_switch callback to client ops
  2026-07-07 13:38 ` Thomas Zimmermann
@ 2026-07-07 13:38   ` Thomas Zimmermann
  -1 siblings, 0 replies; 32+ messages in thread
From: Thomas Zimmermann @ 2026-07-07 13:38 UTC (permalink / raw)
  To: lukas, jfalempe, alexander.deucher, christian.koenig, airlied,
	simona, maarten.lankhorst, mripard, jani.nikula, joonas.lahtinen,
	rodrigo.vivi, tursulin, lyude, dakr, deller
  Cc: dri-devel, amd-gfx, intel-gfx, nouveau, linux-fbdev,
	sashiko-reviews

Add post_switch to struct vga_switcheroo_client_ops to inform the
switcheroo client about a completed switch of the output.

This callback is intended to replace the reprobe client op. It is a
rename of reprobe for consistency with pre_switch.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
 drivers/gpu/vga/vga_switcheroo.c |  4 +++-
 include/linux/vga_switcheroo.h   | 12 +++++++-----
 2 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/vga/vga_switcheroo.c b/drivers/gpu/vga/vga_switcheroo.c
index bdf1e56ae891..7b0af4a8aa7d 100644
--- a/drivers/gpu/vga/vga_switcheroo.c
+++ b/drivers/gpu/vga/vga_switcheroo.c
@@ -746,7 +746,9 @@ static int vga_switchto_stage2(struct vga_switcheroo_client *new_client)
 	if (ret)
 		return ret;
 
-	if (new_client->ops->reprobe)
+	if (new_client->ops->post_switch)
+		new_client->ops->post_switch(new_client->pdev);
+	else if (new_client->ops->reprobe)
 		new_client->ops->reprobe(new_client->pdev);
 
 	if (vga_switcheroo_pwr_state(active) == VGA_SWITCHEROO_ON)
diff --git a/include/linux/vga_switcheroo.h b/include/linux/vga_switcheroo.h
index d2ce30d8b6f7..38047fe6ea60 100644
--- a/include/linux/vga_switcheroo.h
+++ b/include/linux/vga_switcheroo.h
@@ -128,21 +128,22 @@ struct vga_switcheroo_handler {
  * 	Mandatory. This should not cut power to the discrete GPU,
  * 	which is the job of the handler
  * @gpu_bound: Optional. Called before switching the outputs to the device.
- * @reprobe: poll outputs.
- * 	Optional. This gets called after waking the GPU and switching
- * 	the outputs to it
+ * @reprobe: deprecated
  * @can_switch: check if the device is in a position to switch now.
  * 	Mandatory. The client should return false if a user space process
  * 	has one of its device files open
  * @pre_switch: prepare switch
  *	Optional. This gets called before switching the outputs to the
  *	GPU. Allows drivers to prepare for the switch.
+ * @post_switch: completes switch
+ *	Optional. This gets called after waking the GPU and switching
+ *	the outputs to it. Allows drivers to poll the switched outputs.
  * @gpu_bound: notify the client id to audio client when the GPU is bound.
  *
  * Client callbacks. A client can be either a GPU or an audio device on a GPU.
  * The @set_gpu_state and @can_switch methods are mandatory, @pre_switch and
- * @reprobe may be set to NULL. For audio clients, the @pre_switch and
- * @reprobe members are bogus. OTOH, @gpu_bound is only for audio clients,
+ * @post_switch may be set to NULL. For audio clients, the @pre_switch and
+ * @post_switch members are bogus. OTOH, @gpu_bound is only for audio clients,
  * and not used for GPU clients.
  */
 struct vga_switcheroo_client_ops {
@@ -150,6 +151,7 @@ struct vga_switcheroo_client_ops {
 	void (*reprobe)(struct pci_dev *dev);
 	bool (*can_switch)(struct pci_dev *dev);
 	void (*pre_switch)(struct pci_dev *dev);
+	void (*post_switch)(struct pci_dev *dev);
 	void (*gpu_bound)(struct pci_dev *dev, enum vga_switcheroo_client_id);
 };
 
-- 
2.54.0


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

* [PATCH 04/10] vga_switcheroo: Add post_switch callback to client ops
@ 2026-07-07 13:38   ` Thomas Zimmermann
  0 siblings, 0 replies; 32+ messages in thread
From: Thomas Zimmermann @ 2026-07-07 13:38 UTC (permalink / raw)
  To: lukas, jfalempe, alexander.deucher, christian.koenig, airlied,
	simona, maarten.lankhorst, mripard, jani.nikula, joonas.lahtinen,
	rodrigo.vivi, tursulin, lyude, dakr, deller
  Cc: dri-devel, amd-gfx, intel-gfx, nouveau, linux-fbdev,
	sashiko-reviews, Thomas Zimmermann

Add post_switch to struct vga_switcheroo_client_ops to inform the
switcheroo client about a completed switch of the output.

This callback is intended to replace the reprobe client op. It is a
rename of reprobe for consistency with pre_switch.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
 drivers/gpu/vga/vga_switcheroo.c |  4 +++-
 include/linux/vga_switcheroo.h   | 12 +++++++-----
 2 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/vga/vga_switcheroo.c b/drivers/gpu/vga/vga_switcheroo.c
index bdf1e56ae891..7b0af4a8aa7d 100644
--- a/drivers/gpu/vga/vga_switcheroo.c
+++ b/drivers/gpu/vga/vga_switcheroo.c
@@ -746,7 +746,9 @@ static int vga_switchto_stage2(struct vga_switcheroo_client *new_client)
 	if (ret)
 		return ret;
 
-	if (new_client->ops->reprobe)
+	if (new_client->ops->post_switch)
+		new_client->ops->post_switch(new_client->pdev);
+	else if (new_client->ops->reprobe)
 		new_client->ops->reprobe(new_client->pdev);
 
 	if (vga_switcheroo_pwr_state(active) == VGA_SWITCHEROO_ON)
diff --git a/include/linux/vga_switcheroo.h b/include/linux/vga_switcheroo.h
index d2ce30d8b6f7..38047fe6ea60 100644
--- a/include/linux/vga_switcheroo.h
+++ b/include/linux/vga_switcheroo.h
@@ -128,21 +128,22 @@ struct vga_switcheroo_handler {
  * 	Mandatory. This should not cut power to the discrete GPU,
  * 	which is the job of the handler
  * @gpu_bound: Optional. Called before switching the outputs to the device.
- * @reprobe: poll outputs.
- * 	Optional. This gets called after waking the GPU and switching
- * 	the outputs to it
+ * @reprobe: deprecated
  * @can_switch: check if the device is in a position to switch now.
  * 	Mandatory. The client should return false if a user space process
  * 	has one of its device files open
  * @pre_switch: prepare switch
  *	Optional. This gets called before switching the outputs to the
  *	GPU. Allows drivers to prepare for the switch.
+ * @post_switch: completes switch
+ *	Optional. This gets called after waking the GPU and switching
+ *	the outputs to it. Allows drivers to poll the switched outputs.
  * @gpu_bound: notify the client id to audio client when the GPU is bound.
  *
  * Client callbacks. A client can be either a GPU or an audio device on a GPU.
  * The @set_gpu_state and @can_switch methods are mandatory, @pre_switch and
- * @reprobe may be set to NULL. For audio clients, the @pre_switch and
- * @reprobe members are bogus. OTOH, @gpu_bound is only for audio clients,
+ * @post_switch may be set to NULL. For audio clients, the @pre_switch and
+ * @post_switch members are bogus. OTOH, @gpu_bound is only for audio clients,
  * and not used for GPU clients.
  */
 struct vga_switcheroo_client_ops {
@@ -150,6 +151,7 @@ struct vga_switcheroo_client_ops {
 	void (*reprobe)(struct pci_dev *dev);
 	bool (*can_switch)(struct pci_dev *dev);
 	void (*pre_switch)(struct pci_dev *dev);
+	void (*post_switch)(struct pci_dev *dev);
 	void (*gpu_bound)(struct pci_dev *dev, enum vga_switcheroo_client_id);
 };
 
-- 
2.54.0


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

* [PATCH 05/10] drm/amdgpu: Implement struct vga_switcheroo_client_ops.pre_switch
  2026-07-07 13:38 ` Thomas Zimmermann
@ 2026-07-07 13:38   ` Thomas Zimmermann
  -1 siblings, 0 replies; 32+ messages in thread
From: Thomas Zimmermann @ 2026-07-07 13:38 UTC (permalink / raw)
  To: lukas, jfalempe, alexander.deucher, christian.koenig, airlied,
	simona, maarten.lankhorst, mripard, jani.nikula, joonas.lahtinen,
	rodrigo.vivi, tursulin, lyude, dakr, deller
  Cc: dri-devel, amd-gfx, intel-gfx, nouveau, linux-fbdev,
	sashiko-reviews

Call drm_client_dev_acquire_outputs() from vga_switcheroo's pre_switch
callback. Pushes fbcon updates from vga_switcheroo into DRM's fbdev
emulation.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
index 78c96c7102e4..87a59a79a019 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -1699,10 +1699,18 @@ static bool amdgpu_switcheroo_can_switch(struct pci_dev *pdev)
 	return atomic_read(&dev->open_count) == 0;
 }
 
+static void amdgpu_switcheroo_pre_switch(struct pci_dev *pdev)
+{
+	struct drm_device *dev = pci_get_drvdata(pdev);
+
+	drm_client_dev_acquire_outputs(dev);
+}
+
 static const struct vga_switcheroo_client_ops amdgpu_switcheroo_ops = {
 	.set_gpu_state = amdgpu_switcheroo_set_state,
 	.reprobe = NULL,
 	.can_switch = amdgpu_switcheroo_can_switch,
+	.pre_switch = amdgpu_switcheroo_pre_switch,
 };
 
 /**
-- 
2.54.0


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

* [PATCH 05/10] drm/amdgpu: Implement struct vga_switcheroo_client_ops.pre_switch
@ 2026-07-07 13:38   ` Thomas Zimmermann
  0 siblings, 0 replies; 32+ messages in thread
From: Thomas Zimmermann @ 2026-07-07 13:38 UTC (permalink / raw)
  To: lukas, jfalempe, alexander.deucher, christian.koenig, airlied,
	simona, maarten.lankhorst, mripard, jani.nikula, joonas.lahtinen,
	rodrigo.vivi, tursulin, lyude, dakr, deller
  Cc: dri-devel, amd-gfx, intel-gfx, nouveau, linux-fbdev,
	sashiko-reviews, Thomas Zimmermann

Call drm_client_dev_acquire_outputs() from vga_switcheroo's pre_switch
callback. Pushes fbcon updates from vga_switcheroo into DRM's fbdev
emulation.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
index 78c96c7102e4..87a59a79a019 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -1699,10 +1699,18 @@ static bool amdgpu_switcheroo_can_switch(struct pci_dev *pdev)
 	return atomic_read(&dev->open_count) == 0;
 }
 
+static void amdgpu_switcheroo_pre_switch(struct pci_dev *pdev)
+{
+	struct drm_device *dev = pci_get_drvdata(pdev);
+
+	drm_client_dev_acquire_outputs(dev);
+}
+
 static const struct vga_switcheroo_client_ops amdgpu_switcheroo_ops = {
 	.set_gpu_state = amdgpu_switcheroo_set_state,
 	.reprobe = NULL,
 	.can_switch = amdgpu_switcheroo_can_switch,
+	.pre_switch = amdgpu_switcheroo_pre_switch,
 };
 
 /**
-- 
2.54.0


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

* [PATCH 06/10] drm/i915: Implement vga_switcheroo_client_ops.pre_switch
  2026-07-07 13:38 ` Thomas Zimmermann
@ 2026-07-07 13:38   ` Thomas Zimmermann
  -1 siblings, 0 replies; 32+ messages in thread
From: Thomas Zimmermann @ 2026-07-07 13:38 UTC (permalink / raw)
  To: lukas, jfalempe, alexander.deucher, christian.koenig, airlied,
	simona, maarten.lankhorst, mripard, jani.nikula, joonas.lahtinen,
	rodrigo.vivi, tursulin, lyude, dakr, deller
  Cc: dri-devel, amd-gfx, intel-gfx, nouveau, linux-fbdev,
	sashiko-reviews

Call drm_client_dev_acquire_outputs() from vga_switcheroo's pre_switch
callback. Pushes fbcon updates from vga_switcheroo into DRM's fbdev
emulation.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
 drivers/gpu/drm/i915/i915_switcheroo.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/drivers/gpu/drm/i915/i915_switcheroo.c b/drivers/gpu/drm/i915/i915_switcheroo.c
index 7e0791024282..6b306ece0556 100644
--- a/drivers/gpu/drm/i915/i915_switcheroo.c
+++ b/drivers/gpu/drm/i915/i915_switcheroo.c
@@ -5,6 +5,7 @@
 
 #include <linux/vga_switcheroo.h>
 
+#include <drm/drm_client_event.h>
 #include <drm/drm_print.h>
 
 #include "display/intel_display_device.h"
@@ -58,10 +59,19 @@ static bool i915_switcheroo_can_switch(struct pci_dev *pdev)
 		atomic_read(&i915->drm.open_count) == 0;
 }
 
+static void i915_switcheroo_pre_switch(struct pci_dev *pdev)
+{
+	struct drm_i915_private *i915 = pdev_to_i915(pdev);
+
+	if (i915 && intel_display_device_present(i915->display))
+		drm_client_dev_acquire_outputs(&i915->drm);
+}
+
 static const struct vga_switcheroo_client_ops i915_switcheroo_ops = {
 	.set_gpu_state = i915_switcheroo_set_state,
 	.reprobe = NULL,
 	.can_switch = i915_switcheroo_can_switch,
+	.pre_switch = i915_switcheroo_pre_switch,
 };
 
 int i915_switcheroo_register(struct drm_i915_private *i915)
-- 
2.54.0


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

* [PATCH 06/10] drm/i915: Implement vga_switcheroo_client_ops.pre_switch
@ 2026-07-07 13:38   ` Thomas Zimmermann
  0 siblings, 0 replies; 32+ messages in thread
From: Thomas Zimmermann @ 2026-07-07 13:38 UTC (permalink / raw)
  To: lukas, jfalempe, alexander.deucher, christian.koenig, airlied,
	simona, maarten.lankhorst, mripard, jani.nikula, joonas.lahtinen,
	rodrigo.vivi, tursulin, lyude, dakr, deller
  Cc: dri-devel, amd-gfx, intel-gfx, nouveau, linux-fbdev,
	sashiko-reviews, Thomas Zimmermann

Call drm_client_dev_acquire_outputs() from vga_switcheroo's pre_switch
callback. Pushes fbcon updates from vga_switcheroo into DRM's fbdev
emulation.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
 drivers/gpu/drm/i915/i915_switcheroo.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/drivers/gpu/drm/i915/i915_switcheroo.c b/drivers/gpu/drm/i915/i915_switcheroo.c
index 7e0791024282..6b306ece0556 100644
--- a/drivers/gpu/drm/i915/i915_switcheroo.c
+++ b/drivers/gpu/drm/i915/i915_switcheroo.c
@@ -5,6 +5,7 @@
 
 #include <linux/vga_switcheroo.h>
 
+#include <drm/drm_client_event.h>
 #include <drm/drm_print.h>
 
 #include "display/intel_display_device.h"
@@ -58,10 +59,19 @@ static bool i915_switcheroo_can_switch(struct pci_dev *pdev)
 		atomic_read(&i915->drm.open_count) == 0;
 }
 
+static void i915_switcheroo_pre_switch(struct pci_dev *pdev)
+{
+	struct drm_i915_private *i915 = pdev_to_i915(pdev);
+
+	if (i915 && intel_display_device_present(i915->display))
+		drm_client_dev_acquire_outputs(&i915->drm);
+}
+
 static const struct vga_switcheroo_client_ops i915_switcheroo_ops = {
 	.set_gpu_state = i915_switcheroo_set_state,
 	.reprobe = NULL,
 	.can_switch = i915_switcheroo_can_switch,
+	.pre_switch = i915_switcheroo_pre_switch,
 };
 
 int i915_switcheroo_register(struct drm_i915_private *i915)
-- 
2.54.0


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

* [PATCH 07/10] drm/nouveau: Implement vga_switcheroo_client_ops.pre_switch
  2026-07-07 13:38 ` Thomas Zimmermann
@ 2026-07-07 13:38   ` Thomas Zimmermann
  -1 siblings, 0 replies; 32+ messages in thread
From: Thomas Zimmermann @ 2026-07-07 13:38 UTC (permalink / raw)
  To: lukas, jfalempe, alexander.deucher, christian.koenig, airlied,
	simona, maarten.lankhorst, mripard, jani.nikula, joonas.lahtinen,
	rodrigo.vivi, tursulin, lyude, dakr, deller
  Cc: dri-devel, amd-gfx, intel-gfx, nouveau, linux-fbdev,
	sashiko-reviews

Call drm_client_dev_acquire_outputs() from vga_switcheroo's pre_switch
callback. Pushes fbcon updates from vga_switcheroo into DRM's fbdev
emulation.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
 drivers/gpu/drm/nouveau/nouveau_vga.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/drivers/gpu/drm/nouveau/nouveau_vga.c b/drivers/gpu/drm/nouveau/nouveau_vga.c
index a6c375a24154..2d2d08be8fbe 100644
--- a/drivers/gpu/drm/nouveau/nouveau_vga.c
+++ b/drivers/gpu/drm/nouveau/nouveau_vga.c
@@ -76,11 +76,20 @@ nouveau_switcheroo_can_switch(struct pci_dev *pdev)
 	return atomic_read(&drm->dev->open_count) == 0;
 }
 
+static void
+nouveau_switcheroo_pre_switch(struct pci_dev *pdev)
+{
+	struct nouveau_drm *drm = pci_get_drvdata(pdev);
+
+	drm_client_dev_acquire_outputs(drm->dev);
+}
+
 static const struct vga_switcheroo_client_ops
 nouveau_switcheroo_ops = {
 	.set_gpu_state = nouveau_switcheroo_set_state,
 	.reprobe = nouveau_switcheroo_reprobe,
 	.can_switch = nouveau_switcheroo_can_switch,
+	.pre_switch = nouveau_switcheroo_pre_switch,
 };
 
 void
-- 
2.54.0


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

* [PATCH 07/10] drm/nouveau: Implement vga_switcheroo_client_ops.pre_switch
@ 2026-07-07 13:38   ` Thomas Zimmermann
  0 siblings, 0 replies; 32+ messages in thread
From: Thomas Zimmermann @ 2026-07-07 13:38 UTC (permalink / raw)
  To: lukas, jfalempe, alexander.deucher, christian.koenig, airlied,
	simona, maarten.lankhorst, mripard, jani.nikula, joonas.lahtinen,
	rodrigo.vivi, tursulin, lyude, dakr, deller
  Cc: dri-devel, amd-gfx, intel-gfx, nouveau, linux-fbdev,
	sashiko-reviews, Thomas Zimmermann

Call drm_client_dev_acquire_outputs() from vga_switcheroo's pre_switch
callback. Pushes fbcon updates from vga_switcheroo into DRM's fbdev
emulation.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
 drivers/gpu/drm/nouveau/nouveau_vga.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/drivers/gpu/drm/nouveau/nouveau_vga.c b/drivers/gpu/drm/nouveau/nouveau_vga.c
index a6c375a24154..2d2d08be8fbe 100644
--- a/drivers/gpu/drm/nouveau/nouveau_vga.c
+++ b/drivers/gpu/drm/nouveau/nouveau_vga.c
@@ -76,11 +76,20 @@ nouveau_switcheroo_can_switch(struct pci_dev *pdev)
 	return atomic_read(&drm->dev->open_count) == 0;
 }
 
+static void
+nouveau_switcheroo_pre_switch(struct pci_dev *pdev)
+{
+	struct nouveau_drm *drm = pci_get_drvdata(pdev);
+
+	drm_client_dev_acquire_outputs(drm->dev);
+}
+
 static const struct vga_switcheroo_client_ops
 nouveau_switcheroo_ops = {
 	.set_gpu_state = nouveau_switcheroo_set_state,
 	.reprobe = nouveau_switcheroo_reprobe,
 	.can_switch = nouveau_switcheroo_can_switch,
+	.pre_switch = nouveau_switcheroo_pre_switch,
 };
 
 void
-- 
2.54.0


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

* [PATCH 08/10] drm/nouveau: Implement vga_switcheroo_client_ops.post_switch
  2026-07-07 13:38 ` Thomas Zimmermann
@ 2026-07-07 13:38   ` Thomas Zimmermann
  -1 siblings, 0 replies; 32+ messages in thread
From: Thomas Zimmermann @ 2026-07-07 13:38 UTC (permalink / raw)
  To: lukas, jfalempe, alexander.deucher, christian.koenig, airlied,
	simona, maarten.lankhorst, mripard, jani.nikula, joonas.lahtinen,
	rodrigo.vivi, tursulin, lyude, dakr, deller
  Cc: dri-devel, amd-gfx, intel-gfx, nouveau, linux-fbdev,
	sashiko-reviews

An output's attached display might have changed while a DRM client's
device did not have the output switched to it.

The nouveau_switcheroo_reprobe() callback sends a hotplug notice to
DRM's internal clients, wo that they can reconfigure their display
output if necessary.

As post_switch callback replaces reprobe in vga_switcheroo, update
nouveau accordingly. No functional changes.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
 drivers/gpu/drm/nouveau/nouveau_vga.c | 19 +++++++++----------
 1 file changed, 9 insertions(+), 10 deletions(-)

diff --git a/drivers/gpu/drm/nouveau/nouveau_vga.c b/drivers/gpu/drm/nouveau/nouveau_vga.c
index 2d2d08be8fbe..29a801124e56 100644
--- a/drivers/gpu/drm/nouveau/nouveau_vga.c
+++ b/drivers/gpu/drm/nouveau/nouveau_vga.c
@@ -54,15 +54,6 @@ nouveau_switcheroo_set_state(struct pci_dev *pdev,
 	}
 }
 
-static void
-nouveau_switcheroo_reprobe(struct pci_dev *pdev)
-{
-	struct nouveau_drm *drm = pci_get_drvdata(pdev);
-	struct drm_device *dev = drm->dev;
-
-	drm_client_dev_hotplug(dev);
-}
-
 static bool
 nouveau_switcheroo_can_switch(struct pci_dev *pdev)
 {
@@ -84,12 +75,20 @@ nouveau_switcheroo_pre_switch(struct pci_dev *pdev)
 	drm_client_dev_acquire_outputs(drm->dev);
 }
 
+static void
+nouveau_switcheroo_post_switch(struct pci_dev *pdev)
+{
+	struct nouveau_drm *drm = pci_get_drvdata(pdev);
+
+	drm_client_dev_hotplug(drm->dev);
+}
+
 static const struct vga_switcheroo_client_ops
 nouveau_switcheroo_ops = {
 	.set_gpu_state = nouveau_switcheroo_set_state,
-	.reprobe = nouveau_switcheroo_reprobe,
 	.can_switch = nouveau_switcheroo_can_switch,
 	.pre_switch = nouveau_switcheroo_pre_switch,
+	.post_switch = nouveau_switcheroo_post_switch,
 };
 
 void
-- 
2.54.0


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

* [PATCH 08/10] drm/nouveau: Implement vga_switcheroo_client_ops.post_switch
@ 2026-07-07 13:38   ` Thomas Zimmermann
  0 siblings, 0 replies; 32+ messages in thread
From: Thomas Zimmermann @ 2026-07-07 13:38 UTC (permalink / raw)
  To: lukas, jfalempe, alexander.deucher, christian.koenig, airlied,
	simona, maarten.lankhorst, mripard, jani.nikula, joonas.lahtinen,
	rodrigo.vivi, tursulin, lyude, dakr, deller
  Cc: dri-devel, amd-gfx, intel-gfx, nouveau, linux-fbdev,
	sashiko-reviews, Thomas Zimmermann

An output's attached display might have changed while a DRM client's
device did not have the output switched to it.

The nouveau_switcheroo_reprobe() callback sends a hotplug notice to
DRM's internal clients, wo that they can reconfigure their display
output if necessary.

As post_switch callback replaces reprobe in vga_switcheroo, update
nouveau accordingly. No functional changes.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
 drivers/gpu/drm/nouveau/nouveau_vga.c | 19 +++++++++----------
 1 file changed, 9 insertions(+), 10 deletions(-)

diff --git a/drivers/gpu/drm/nouveau/nouveau_vga.c b/drivers/gpu/drm/nouveau/nouveau_vga.c
index 2d2d08be8fbe..29a801124e56 100644
--- a/drivers/gpu/drm/nouveau/nouveau_vga.c
+++ b/drivers/gpu/drm/nouveau/nouveau_vga.c
@@ -54,15 +54,6 @@ nouveau_switcheroo_set_state(struct pci_dev *pdev,
 	}
 }
 
-static void
-nouveau_switcheroo_reprobe(struct pci_dev *pdev)
-{
-	struct nouveau_drm *drm = pci_get_drvdata(pdev);
-	struct drm_device *dev = drm->dev;
-
-	drm_client_dev_hotplug(dev);
-}
-
 static bool
 nouveau_switcheroo_can_switch(struct pci_dev *pdev)
 {
@@ -84,12 +75,20 @@ nouveau_switcheroo_pre_switch(struct pci_dev *pdev)
 	drm_client_dev_acquire_outputs(drm->dev);
 }
 
+static void
+nouveau_switcheroo_post_switch(struct pci_dev *pdev)
+{
+	struct nouveau_drm *drm = pci_get_drvdata(pdev);
+
+	drm_client_dev_hotplug(drm->dev);
+}
+
 static const struct vga_switcheroo_client_ops
 nouveau_switcheroo_ops = {
 	.set_gpu_state = nouveau_switcheroo_set_state,
-	.reprobe = nouveau_switcheroo_reprobe,
 	.can_switch = nouveau_switcheroo_can_switch,
 	.pre_switch = nouveau_switcheroo_pre_switch,
+	.post_switch = nouveau_switcheroo_post_switch,
 };
 
 void
-- 
2.54.0


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

* [PATCH 09/10] drm/radeon: Implement struct vga_switcheroo_client_ops.pre_switch
  2026-07-07 13:38 ` Thomas Zimmermann
@ 2026-07-07 13:38   ` Thomas Zimmermann
  -1 siblings, 0 replies; 32+ messages in thread
From: Thomas Zimmermann @ 2026-07-07 13:38 UTC (permalink / raw)
  To: lukas, jfalempe, alexander.deucher, christian.koenig, airlied,
	simona, maarten.lankhorst, mripard, jani.nikula, joonas.lahtinen,
	rodrigo.vivi, tursulin, lyude, dakr, deller
  Cc: dri-devel, amd-gfx, intel-gfx, nouveau, linux-fbdev,
	sashiko-reviews

Call drm_client_dev_acquire_outputs() from vga_switcheroo's pre_switch
callback. Pushes fbcon updates from vga_switcheroo into DRM's fbdev
emulation.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
 drivers/gpu/drm/radeon/radeon_device.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c
index 705c012fcf9e..8697a9eb5d13 100644
--- a/drivers/gpu/drm/radeon/radeon_device.c
+++ b/drivers/gpu/drm/radeon/radeon_device.c
@@ -1258,10 +1258,18 @@ static bool radeon_switcheroo_can_switch(struct pci_dev *pdev)
 	return atomic_read(&dev->open_count) == 0;
 }
 
+static void radeon_switcheroo_pre_switch(struct pci_dev *pdev)
+{
+	struct drm_device *dev = pci_get_drvdata(pdev);
+
+	drm_client_dev_acquire_outputs(dev);
+}
+
 static const struct vga_switcheroo_client_ops radeon_switcheroo_ops = {
 	.set_gpu_state = radeon_switcheroo_set_state,
 	.reprobe = NULL,
 	.can_switch = radeon_switcheroo_can_switch,
+	.pre_switch = radeon_switcheroo_pre_switch,
 };
 
 /**
-- 
2.54.0


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

* [PATCH 09/10] drm/radeon: Implement struct vga_switcheroo_client_ops.pre_switch
@ 2026-07-07 13:38   ` Thomas Zimmermann
  0 siblings, 0 replies; 32+ messages in thread
From: Thomas Zimmermann @ 2026-07-07 13:38 UTC (permalink / raw)
  To: lukas, jfalempe, alexander.deucher, christian.koenig, airlied,
	simona, maarten.lankhorst, mripard, jani.nikula, joonas.lahtinen,
	rodrigo.vivi, tursulin, lyude, dakr, deller
  Cc: dri-devel, amd-gfx, intel-gfx, nouveau, linux-fbdev,
	sashiko-reviews, Thomas Zimmermann

Call drm_client_dev_acquire_outputs() from vga_switcheroo's pre_switch
callback. Pushes fbcon updates from vga_switcheroo into DRM's fbdev
emulation.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
 drivers/gpu/drm/radeon/radeon_device.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c
index 705c012fcf9e..8697a9eb5d13 100644
--- a/drivers/gpu/drm/radeon/radeon_device.c
+++ b/drivers/gpu/drm/radeon/radeon_device.c
@@ -1258,10 +1258,18 @@ static bool radeon_switcheroo_can_switch(struct pci_dev *pdev)
 	return atomic_read(&dev->open_count) == 0;
 }
 
+static void radeon_switcheroo_pre_switch(struct pci_dev *pdev)
+{
+	struct drm_device *dev = pci_get_drvdata(pdev);
+
+	drm_client_dev_acquire_outputs(dev);
+}
+
 static const struct vga_switcheroo_client_ops radeon_switcheroo_ops = {
 	.set_gpu_state = radeon_switcheroo_set_state,
 	.reprobe = NULL,
 	.can_switch = radeon_switcheroo_can_switch,
+	.pre_switch = radeon_switcheroo_pre_switch,
 };
 
 /**
-- 
2.54.0


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

* [PATCH 10/10] vga-switcheroo: Remove unused interfaces
  2026-07-07 13:38 ` Thomas Zimmermann
@ 2026-07-07 13:38   ` Thomas Zimmermann
  -1 siblings, 0 replies; 32+ messages in thread
From: Thomas Zimmermann @ 2026-07-07 13:38 UTC (permalink / raw)
  To: lukas, jfalempe, alexander.deucher, christian.koenig, airlied,
	simona, maarten.lankhorst, mripard, jani.nikula, joonas.lahtinen,
	rodrigo.vivi, tursulin, lyude, dakr, deller
  Cc: dri-devel, amd-gfx, intel-gfx, nouveau, linux-fbdev,
	sashiko-reviews

Remove all unused interfaces that used to implement the functionality
of pre_switch and post_switch.

For pre_switch, drop calls to vga_switcheroo_client_fb_set() from
fbcon. Each client that implements pre_switch holds references to
its resources; either fbcon's fb_info or something else. Also remove
vga_switcheroo_client_fb_set(). This further allows for removing all
symbols and data structures that refer to fbdev; such as fb_info and
fb_switch_outputs().

For post_switch, remove the reprobe callback from the client ops.
Nouveau, the only driver that implemented the interface, now uses
post_switch.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_device.c |  1 -
 drivers/gpu/drm/i915/i915_switcheroo.c     |  1 -
 drivers/gpu/drm/radeon/radeon_device.c     |  1 -
 drivers/gpu/vga/vga_switcheroo.c           | 37 +++-------------------
 drivers/video/fbdev/core/fbcon.c           |  8 -----
 include/linux/vga_switcheroo.h             | 12 +++----
 6 files changed, 9 insertions(+), 51 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
index 87a59a79a019..5bb1567d512d 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -1708,7 +1708,6 @@ static void amdgpu_switcheroo_pre_switch(struct pci_dev *pdev)
 
 static const struct vga_switcheroo_client_ops amdgpu_switcheroo_ops = {
 	.set_gpu_state = amdgpu_switcheroo_set_state,
-	.reprobe = NULL,
 	.can_switch = amdgpu_switcheroo_can_switch,
 	.pre_switch = amdgpu_switcheroo_pre_switch,
 };
diff --git a/drivers/gpu/drm/i915/i915_switcheroo.c b/drivers/gpu/drm/i915/i915_switcheroo.c
index 6b306ece0556..d97057722fde 100644
--- a/drivers/gpu/drm/i915/i915_switcheroo.c
+++ b/drivers/gpu/drm/i915/i915_switcheroo.c
@@ -69,7 +69,6 @@ static void i915_switcheroo_pre_switch(struct pci_dev *pdev)
 
 static const struct vga_switcheroo_client_ops i915_switcheroo_ops = {
 	.set_gpu_state = i915_switcheroo_set_state,
-	.reprobe = NULL,
 	.can_switch = i915_switcheroo_can_switch,
 	.pre_switch = i915_switcheroo_pre_switch,
 };
diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c
index 8697a9eb5d13..9523240110a6 100644
--- a/drivers/gpu/drm/radeon/radeon_device.c
+++ b/drivers/gpu/drm/radeon/radeon_device.c
@@ -1267,7 +1267,6 @@ static void radeon_switcheroo_pre_switch(struct pci_dev *pdev)
 
 static const struct vga_switcheroo_client_ops radeon_switcheroo_ops = {
 	.set_gpu_state = radeon_switcheroo_set_state,
-	.reprobe = NULL,
 	.can_switch = radeon_switcheroo_can_switch,
 	.pre_switch = radeon_switcheroo_pre_switch,
 };
diff --git a/drivers/gpu/vga/vga_switcheroo.c b/drivers/gpu/vga/vga_switcheroo.c
index 7b0af4a8aa7d..9431d83b38a9 100644
--- a/drivers/gpu/vga/vga_switcheroo.c
+++ b/drivers/gpu/vga/vga_switcheroo.c
@@ -32,9 +32,9 @@
 
 #include <linux/apple-gmux.h>
 #include <linux/debugfs.h>
-#include <linux/fb.h>
+#include <linux/export.h>
 #include <linux/fs.h>
-#include <linux/module.h>
+#include <linux/mutex.h>
 #include <linux/pci.h>
 #include <linux/pm_domain.h>
 #include <linux/pm_runtime.h>
@@ -90,7 +90,6 @@
 /**
  * struct vga_switcheroo_client - registered client
  * @pdev: client pci device
- * @fb_info: framebuffer to which console is remapped on switching
  * @pwr_state: current power state if manual power control is used.
  *	For driver power control, call vga_switcheroo_pwr_state().
  * @ops: client callbacks
@@ -105,12 +104,11 @@
  * @vga_dev: pci device, indicate which GPU is bound to current audio client
  *
  * Registered client. A client can be either a GPU or an audio device on a GPU.
- * For audio clients, the @fb_info and @active members are bogus. For GPU
- * clients, the @vga_dev is bogus.
+ * For audio clients, the @active member is bogus. For GPU clients, the @vga_dev
+ * is bogus.
  */
 struct vga_switcheroo_client {
 	struct pci_dev *pdev;
-	struct fb_info *fb_info;
 	enum vga_switcheroo_state pwr_state;
 	const struct vga_switcheroo_client_ops *ops;
 	enum vga_switcheroo_client_id id;
@@ -514,27 +512,6 @@ void vga_switcheroo_unregister_client(struct pci_dev *pdev)
 }
 EXPORT_SYMBOL(vga_switcheroo_unregister_client);
 
-/**
- * vga_switcheroo_client_fb_set() - set framebuffer of a given client
- * @pdev: client pci device
- * @info: framebuffer
- *
- * Set framebuffer of a given client. The console will be remapped to this
- * on switching.
- */
-void vga_switcheroo_client_fb_set(struct pci_dev *pdev,
-				 struct fb_info *info)
-{
-	struct vga_switcheroo_client *client;
-
-	mutex_lock(&vgasr_mutex);
-	client = find_client_from_pci(&vgasr_priv.clients, pdev);
-	if (client)
-		client->fb_info = info;
-	mutex_unlock(&vgasr_mutex);
-}
-EXPORT_SYMBOL(vga_switcheroo_client_fb_set);
-
 /**
  * vga_switcheroo_lock_ddc() - temporarily switch DDC lines to a given client
  * @pdev: client pci device
@@ -735,10 +712,6 @@ static int vga_switchto_stage2(struct vga_switcheroo_client *new_client)
 
 	if (new_client->ops->pre_switch)
 		new_client->ops->pre_switch(new_client->pdev);
-#if defined(CONFIG_FB)
-	else if (new_client->fb_info)
-		fb_switch_outputs(new_client->fb_info);
-#endif
 
 	mutex_lock(&vgasr_priv.mux_hw_lock);
 	ret = vgasr_priv.handler->switchto(new_client->id);
@@ -748,8 +721,6 @@ static int vga_switchto_stage2(struct vga_switcheroo_client *new_client)
 
 	if (new_client->ops->post_switch)
 		new_client->ops->post_switch(new_client->pdev);
-	else if (new_client->ops->reprobe)
-		new_client->ops->reprobe(new_client->pdev);
 
 	if (vga_switcheroo_pwr_state(active) == VGA_SWITCHEROO_ON)
 		vga_switchoff(active);
diff --git a/drivers/video/fbdev/core/fbcon.c b/drivers/video/fbdev/core/fbcon.c
index 9f5c4c101581..974c7dcf5251 100644
--- a/drivers/video/fbdev/core/fbcon.c
+++ b/drivers/video/fbdev/core/fbcon.c
@@ -78,7 +78,6 @@
 #include <linux/interrupt.h>
 #include <linux/crc32.h> /* For counting font checksums */
 #include <linux/uaccess.h>
-#include <linux/vga_switcheroo.h>
 #include <asm/irq.h>
 
 #include "fbcon.h"
@@ -2851,9 +2850,6 @@ void fbcon_fb_unregistered(struct fb_info *info)
 
 	console_lock();
 
-	if (info->device && dev_is_pci(info->device))
-		vga_switcheroo_client_fb_set(to_pci_dev(info->device), NULL);
-
 	fbcon_registered_fb[info->node] = NULL;
 	fbcon_num_registered_fb--;
 
@@ -2987,10 +2983,6 @@ static int do_fb_registered(struct fb_info *info)
 		}
 	}
 
-	/* Set the fb info for vga_switcheroo clients. Does nothing otherwise. */
-	if (info->device && dev_is_pci(info->device))
-		vga_switcheroo_client_fb_set(to_pci_dev(info->device), info);
-
 	return ret;
 }
 
diff --git a/include/linux/vga_switcheroo.h b/include/linux/vga_switcheroo.h
index 38047fe6ea60..e0198cffb4d6 100644
--- a/include/linux/vga_switcheroo.h
+++ b/include/linux/vga_switcheroo.h
@@ -31,8 +31,12 @@
 #ifndef _LINUX_VGA_SWITCHEROO_H_
 #define _LINUX_VGA_SWITCHEROO_H_
 
-#include <linux/fb.h>
+#include <linux/errno.h>
+#include <linux/types.h>
 
+struct device;
+struct dev_pm_domain;
+struct fb_info;
 struct pci_dev;
 
 /**
@@ -128,7 +132,6 @@ struct vga_switcheroo_handler {
  * 	Mandatory. This should not cut power to the discrete GPU,
  * 	which is the job of the handler
  * @gpu_bound: Optional. Called before switching the outputs to the device.
- * @reprobe: deprecated
  * @can_switch: check if the device is in a position to switch now.
  * 	Mandatory. The client should return false if a user space process
  * 	has one of its device files open
@@ -148,7 +151,6 @@ struct vga_switcheroo_handler {
  */
 struct vga_switcheroo_client_ops {
 	void (*set_gpu_state)(struct pci_dev *dev, enum vga_switcheroo_state);
-	void (*reprobe)(struct pci_dev *dev);
 	bool (*can_switch)(struct pci_dev *dev);
 	void (*pre_switch)(struct pci_dev *dev);
 	void (*post_switch)(struct pci_dev *dev);
@@ -164,9 +166,6 @@ int vga_switcheroo_register_audio_client(struct pci_dev *pdev,
 					 const struct vga_switcheroo_client_ops *ops,
 					 struct pci_dev *vga_dev);
 
-void vga_switcheroo_client_fb_set(struct pci_dev *dev,
-				  struct fb_info *info);
-
 int vga_switcheroo_register_handler(const struct vga_switcheroo_handler *handler,
 				    enum vga_switcheroo_handler_flags_t handler_flags);
 void vga_switcheroo_unregister_handler(void);
@@ -186,7 +185,6 @@ void vga_switcheroo_fini_domain_pm_ops(struct device *dev);
 static inline void vga_switcheroo_unregister_client(struct pci_dev *dev) {}
 static inline int vga_switcheroo_register_client(struct pci_dev *dev,
 		const struct vga_switcheroo_client_ops *ops, bool driver_power_control) { return 0; }
-static inline void vga_switcheroo_client_fb_set(struct pci_dev *dev, struct fb_info *info) {}
 static inline int vga_switcheroo_register_handler(const struct vga_switcheroo_handler *handler,
 		enum vga_switcheroo_handler_flags_t handler_flags) { return 0; }
 static inline int vga_switcheroo_register_audio_client(struct pci_dev *pdev,
-- 
2.54.0


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

* [PATCH 10/10] vga-switcheroo: Remove unused interfaces
@ 2026-07-07 13:38   ` Thomas Zimmermann
  0 siblings, 0 replies; 32+ messages in thread
From: Thomas Zimmermann @ 2026-07-07 13:38 UTC (permalink / raw)
  To: lukas, jfalempe, alexander.deucher, christian.koenig, airlied,
	simona, maarten.lankhorst, mripard, jani.nikula, joonas.lahtinen,
	rodrigo.vivi, tursulin, lyude, dakr, deller
  Cc: dri-devel, amd-gfx, intel-gfx, nouveau, linux-fbdev,
	sashiko-reviews, Thomas Zimmermann

Remove all unused interfaces that used to implement the functionality
of pre_switch and post_switch.

For pre_switch, drop calls to vga_switcheroo_client_fb_set() from
fbcon. Each client that implements pre_switch holds references to
its resources; either fbcon's fb_info or something else. Also remove
vga_switcheroo_client_fb_set(). This further allows for removing all
symbols and data structures that refer to fbdev; such as fb_info and
fb_switch_outputs().

For post_switch, remove the reprobe callback from the client ops.
Nouveau, the only driver that implemented the interface, now uses
post_switch.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_device.c |  1 -
 drivers/gpu/drm/i915/i915_switcheroo.c     |  1 -
 drivers/gpu/drm/radeon/radeon_device.c     |  1 -
 drivers/gpu/vga/vga_switcheroo.c           | 37 +++-------------------
 drivers/video/fbdev/core/fbcon.c           |  8 -----
 include/linux/vga_switcheroo.h             | 12 +++----
 6 files changed, 9 insertions(+), 51 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
index 87a59a79a019..5bb1567d512d 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -1708,7 +1708,6 @@ static void amdgpu_switcheroo_pre_switch(struct pci_dev *pdev)
 
 static const struct vga_switcheroo_client_ops amdgpu_switcheroo_ops = {
 	.set_gpu_state = amdgpu_switcheroo_set_state,
-	.reprobe = NULL,
 	.can_switch = amdgpu_switcheroo_can_switch,
 	.pre_switch = amdgpu_switcheroo_pre_switch,
 };
diff --git a/drivers/gpu/drm/i915/i915_switcheroo.c b/drivers/gpu/drm/i915/i915_switcheroo.c
index 6b306ece0556..d97057722fde 100644
--- a/drivers/gpu/drm/i915/i915_switcheroo.c
+++ b/drivers/gpu/drm/i915/i915_switcheroo.c
@@ -69,7 +69,6 @@ static void i915_switcheroo_pre_switch(struct pci_dev *pdev)
 
 static const struct vga_switcheroo_client_ops i915_switcheroo_ops = {
 	.set_gpu_state = i915_switcheroo_set_state,
-	.reprobe = NULL,
 	.can_switch = i915_switcheroo_can_switch,
 	.pre_switch = i915_switcheroo_pre_switch,
 };
diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c
index 8697a9eb5d13..9523240110a6 100644
--- a/drivers/gpu/drm/radeon/radeon_device.c
+++ b/drivers/gpu/drm/radeon/radeon_device.c
@@ -1267,7 +1267,6 @@ static void radeon_switcheroo_pre_switch(struct pci_dev *pdev)
 
 static const struct vga_switcheroo_client_ops radeon_switcheroo_ops = {
 	.set_gpu_state = radeon_switcheroo_set_state,
-	.reprobe = NULL,
 	.can_switch = radeon_switcheroo_can_switch,
 	.pre_switch = radeon_switcheroo_pre_switch,
 };
diff --git a/drivers/gpu/vga/vga_switcheroo.c b/drivers/gpu/vga/vga_switcheroo.c
index 7b0af4a8aa7d..9431d83b38a9 100644
--- a/drivers/gpu/vga/vga_switcheroo.c
+++ b/drivers/gpu/vga/vga_switcheroo.c
@@ -32,9 +32,9 @@
 
 #include <linux/apple-gmux.h>
 #include <linux/debugfs.h>
-#include <linux/fb.h>
+#include <linux/export.h>
 #include <linux/fs.h>
-#include <linux/module.h>
+#include <linux/mutex.h>
 #include <linux/pci.h>
 #include <linux/pm_domain.h>
 #include <linux/pm_runtime.h>
@@ -90,7 +90,6 @@
 /**
  * struct vga_switcheroo_client - registered client
  * @pdev: client pci device
- * @fb_info: framebuffer to which console is remapped on switching
  * @pwr_state: current power state if manual power control is used.
  *	For driver power control, call vga_switcheroo_pwr_state().
  * @ops: client callbacks
@@ -105,12 +104,11 @@
  * @vga_dev: pci device, indicate which GPU is bound to current audio client
  *
  * Registered client. A client can be either a GPU or an audio device on a GPU.
- * For audio clients, the @fb_info and @active members are bogus. For GPU
- * clients, the @vga_dev is bogus.
+ * For audio clients, the @active member is bogus. For GPU clients, the @vga_dev
+ * is bogus.
  */
 struct vga_switcheroo_client {
 	struct pci_dev *pdev;
-	struct fb_info *fb_info;
 	enum vga_switcheroo_state pwr_state;
 	const struct vga_switcheroo_client_ops *ops;
 	enum vga_switcheroo_client_id id;
@@ -514,27 +512,6 @@ void vga_switcheroo_unregister_client(struct pci_dev *pdev)
 }
 EXPORT_SYMBOL(vga_switcheroo_unregister_client);
 
-/**
- * vga_switcheroo_client_fb_set() - set framebuffer of a given client
- * @pdev: client pci device
- * @info: framebuffer
- *
- * Set framebuffer of a given client. The console will be remapped to this
- * on switching.
- */
-void vga_switcheroo_client_fb_set(struct pci_dev *pdev,
-				 struct fb_info *info)
-{
-	struct vga_switcheroo_client *client;
-
-	mutex_lock(&vgasr_mutex);
-	client = find_client_from_pci(&vgasr_priv.clients, pdev);
-	if (client)
-		client->fb_info = info;
-	mutex_unlock(&vgasr_mutex);
-}
-EXPORT_SYMBOL(vga_switcheroo_client_fb_set);
-
 /**
  * vga_switcheroo_lock_ddc() - temporarily switch DDC lines to a given client
  * @pdev: client pci device
@@ -735,10 +712,6 @@ static int vga_switchto_stage2(struct vga_switcheroo_client *new_client)
 
 	if (new_client->ops->pre_switch)
 		new_client->ops->pre_switch(new_client->pdev);
-#if defined(CONFIG_FB)
-	else if (new_client->fb_info)
-		fb_switch_outputs(new_client->fb_info);
-#endif
 
 	mutex_lock(&vgasr_priv.mux_hw_lock);
 	ret = vgasr_priv.handler->switchto(new_client->id);
@@ -748,8 +721,6 @@ static int vga_switchto_stage2(struct vga_switcheroo_client *new_client)
 
 	if (new_client->ops->post_switch)
 		new_client->ops->post_switch(new_client->pdev);
-	else if (new_client->ops->reprobe)
-		new_client->ops->reprobe(new_client->pdev);
 
 	if (vga_switcheroo_pwr_state(active) == VGA_SWITCHEROO_ON)
 		vga_switchoff(active);
diff --git a/drivers/video/fbdev/core/fbcon.c b/drivers/video/fbdev/core/fbcon.c
index 9f5c4c101581..974c7dcf5251 100644
--- a/drivers/video/fbdev/core/fbcon.c
+++ b/drivers/video/fbdev/core/fbcon.c
@@ -78,7 +78,6 @@
 #include <linux/interrupt.h>
 #include <linux/crc32.h> /* For counting font checksums */
 #include <linux/uaccess.h>
-#include <linux/vga_switcheroo.h>
 #include <asm/irq.h>
 
 #include "fbcon.h"
@@ -2851,9 +2850,6 @@ void fbcon_fb_unregistered(struct fb_info *info)
 
 	console_lock();
 
-	if (info->device && dev_is_pci(info->device))
-		vga_switcheroo_client_fb_set(to_pci_dev(info->device), NULL);
-
 	fbcon_registered_fb[info->node] = NULL;
 	fbcon_num_registered_fb--;
 
@@ -2987,10 +2983,6 @@ static int do_fb_registered(struct fb_info *info)
 		}
 	}
 
-	/* Set the fb info for vga_switcheroo clients. Does nothing otherwise. */
-	if (info->device && dev_is_pci(info->device))
-		vga_switcheroo_client_fb_set(to_pci_dev(info->device), info);
-
 	return ret;
 }
 
diff --git a/include/linux/vga_switcheroo.h b/include/linux/vga_switcheroo.h
index 38047fe6ea60..e0198cffb4d6 100644
--- a/include/linux/vga_switcheroo.h
+++ b/include/linux/vga_switcheroo.h
@@ -31,8 +31,12 @@
 #ifndef _LINUX_VGA_SWITCHEROO_H_
 #define _LINUX_VGA_SWITCHEROO_H_
 
-#include <linux/fb.h>
+#include <linux/errno.h>
+#include <linux/types.h>
 
+struct device;
+struct dev_pm_domain;
+struct fb_info;
 struct pci_dev;
 
 /**
@@ -128,7 +132,6 @@ struct vga_switcheroo_handler {
  * 	Mandatory. This should not cut power to the discrete GPU,
  * 	which is the job of the handler
  * @gpu_bound: Optional. Called before switching the outputs to the device.
- * @reprobe: deprecated
  * @can_switch: check if the device is in a position to switch now.
  * 	Mandatory. The client should return false if a user space process
  * 	has one of its device files open
@@ -148,7 +151,6 @@ struct vga_switcheroo_handler {
  */
 struct vga_switcheroo_client_ops {
 	void (*set_gpu_state)(struct pci_dev *dev, enum vga_switcheroo_state);
-	void (*reprobe)(struct pci_dev *dev);
 	bool (*can_switch)(struct pci_dev *dev);
 	void (*pre_switch)(struct pci_dev *dev);
 	void (*post_switch)(struct pci_dev *dev);
@@ -164,9 +166,6 @@ int vga_switcheroo_register_audio_client(struct pci_dev *pdev,
 					 const struct vga_switcheroo_client_ops *ops,
 					 struct pci_dev *vga_dev);
 
-void vga_switcheroo_client_fb_set(struct pci_dev *dev,
-				  struct fb_info *info);
-
 int vga_switcheroo_register_handler(const struct vga_switcheroo_handler *handler,
 				    enum vga_switcheroo_handler_flags_t handler_flags);
 void vga_switcheroo_unregister_handler(void);
@@ -186,7 +185,6 @@ void vga_switcheroo_fini_domain_pm_ops(struct device *dev);
 static inline void vga_switcheroo_unregister_client(struct pci_dev *dev) {}
 static inline int vga_switcheroo_register_client(struct pci_dev *dev,
 		const struct vga_switcheroo_client_ops *ops, bool driver_power_control) { return 0; }
-static inline void vga_switcheroo_client_fb_set(struct pci_dev *dev, struct fb_info *info) {}
 static inline int vga_switcheroo_register_handler(const struct vga_switcheroo_handler *handler,
 		enum vga_switcheroo_handler_flags_t handler_flags) { return 0; }
 static inline int vga_switcheroo_register_audio_client(struct pci_dev *pdev,
-- 
2.54.0


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

* Re: [PATCH 03/10] vga_switcheroo: Add pre_switch callback to client ops
  2026-07-07 13:38   ` Thomas Zimmermann
  (?)
@ 2026-07-07 14:12   ` sashiko-bot
  -1 siblings, 0 replies; 32+ messages in thread
From: sashiko-bot @ 2026-07-07 14:12 UTC (permalink / raw)
  To: Thomas Zimmermann; +Cc: dri-devel

Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:

New issues:
- [Low] Duplicate and conflicting kernel-doc entry for `@gpu_bound` instead of `@pre_switch`.

Pre-existing issues:
- [High] This problem wasn't introduced by this patch, but if the hardware mux switch fails, the active client is permanently marked as inactive, breaking the vga_switcheroo state machine.
--

--- Patch [3]: [PATCH 03/10] vga_switcheroo: Add pre_switch callback to client ops ---
commit 5537cd5fab2c2375821fd4433e71171511ada8ff
Author: Thomas Zimmermann <tzimmermann@suse.de>

vga_switcheroo: Add pre_switch callback to client ops

This commit adds a pre_switch callback to vga_switcheroo_client_ops to
inform clients about upcoming output switches, replacing the hard-coded
fb_switch_outputs() call.

> diff --git a/drivers/gpu/vga/vga_switcheroo.c b/drivers/gpu/vga/vga_switcheroo.c
> index 22cf52b78b755..bdf1e56ae8910 100644
> --- a/drivers/gpu/vga/vga_switcheroo.c
> +++ b/drivers/gpu/vga/vga_switcheroo.c
> @@ -733,8 +733,10 @@ static int vga_switchto_stage2(struct vga_switcheroo_client *new_client)
>  	if (!active->driver_power_control)
>  		set_audio_state(active->id, VGA_SWITCHEROO_OFF);
>  
> +	if (new_client->ops->pre_switch)
> +		new_client->ops->pre_switch(new_client->pdev);
>  #if defined(CONFIG_FB)
> -	if (new_client->fb_info)
> +	else if (new_client->fb_info)
>  		fb_switch_outputs(new_client->fb_info);
>  #endif
>  

[Severity: High]
This is a pre-existing issue, but does vga_switchto_stage2() leave the
state machine corrupted if the hardware mux switch fails?

Earlier in vga_switchto_stage2(), the active client is marked as inactive:

	active->active = false;

If the handler's switchto() callback fails shortly after this patch's
hunk:

	ret = vgasr_priv.handler->switchto(new_client->id);
	mutex_unlock(&vgasr_priv.mux_hw_lock);
	if (ret)
		return ret;

Will returning early here leave the original active client permanently
marked as inactive? Since find_active_client() relies on this flag, it
appears subsequent switch commands would silently abort because they
can no longer find an active client. Should the active flag be restored
in this error path?

> diff --git a/include/linux/vga_switcheroo.h b/include/linux/vga_switcheroo.h
> index 7e6ac0114d556..d2ce30d8b6f78 100644
> --- a/include/linux/vga_switcheroo.h
> +++ b/include/linux/vga_switcheroo.h
> @@ -127,23 +127,29 @@ struct vga_switcheroo_handler {
>   * @set_gpu_state: do the equivalent of suspend/resume for the card.
>   * 	Mandatory. This should not cut power to the discrete GPU,
>   * 	which is the job of the handler
> + * @gpu_bound: Optional. Called before switching the outputs to the device.

[Severity: Low]
This isn't a bug, but should this be named @pre_switch instead of
@gpu_bound? 

It looks like @gpu_bound is already defined further down in this struct's
documentation, and this new description matches the purpose of the new
pre_switch callback.

>   * @reprobe: poll outputs.

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260707135724.247562-1-tzimmermann@suse.de?part=3

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

* Re: [PATCH 06/10] drm/i915: Implement vga_switcheroo_client_ops.pre_switch
  2026-07-07 13:38   ` Thomas Zimmermann
  (?)
@ 2026-07-07 14:17   ` sashiko-bot
  2026-07-08  7:39     ` Thomas Zimmermann
  -1 siblings, 1 reply; 32+ messages in thread
From: sashiko-bot @ 2026-07-07 14:17 UTC (permalink / raw)
  To: Thomas Zimmermann; +Cc: dri-devel

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] AB-BA deadlock between `vgasr_mutex` and `dev->clientlist_mutex` during VGA switcheroo and DRM client hotplug/registration.
--

--- Patch [6]: [PATCH 06/10] drm/i915: Implement vga_switcheroo_client_ops.pre_switch ---
commit ca43d8e034e1ee27918b22e1b7a19b8f6a5b4a67
Author: Thomas Zimmermann <tzimmermann@suse.de>

drm/i915: Implement vga_switcheroo_client_ops.pre_switch

This commit implements the pre_switch callback for vga_switcheroo in the
i915 driver. It calls drm_client_dev_acquire_outputs() to push fbcon
updates from vga_switcheroo into DRM's fbdev emulation.

> diff --git a/drivers/gpu/drm/i915/i915_switcheroo.c b/drivers/gpu/drm/i915/i915_switcheroo.c
> index 7e0791024282e..6b306ece0556a 100644
> --- a/drivers/gpu/drm/i915/i915_switcheroo.c
> +++ b/drivers/gpu/drm/i915/i915_switcheroo.c
[ ... ]
> @@ -58,10 +59,19 @@ static bool i915_switcheroo_can_switch(struct pci_dev *pdev)
>  		atomic_read(&i915->drm.open_count) == 0;
>  }
>  
> +static void i915_switcheroo_pre_switch(struct pci_dev *pdev)
> +{
> +	struct drm_i915_private *i915 = pdev_to_i915(pdev);
> +
> +	if (i915 && intel_display_device_present(i915->display))
> +		drm_client_dev_acquire_outputs(&i915->drm);
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

[Severity: High]
Does this code introduce an AB-BA deadlock between vgasr_mutex and
dev->clientlist_mutex?

A GPU switch triggered via userspace will acquire vgasr_mutex and eventually
call this pre_switch callback:

vga_switcheroo_debugfs_write()  [acquires vgasr_mutex]
  vga_switchto_stage2()
    i915_switcheroo_pre_switch()
      drm_client_dev_acquire_outputs()  [acquires dev->clientlist_mutex]

However, a DRM client hotplug event can acquire these locks in the reverse
order:

drm_client_dev_hotplug()  [acquires dev->clientlist_mutex]
  drm_fbdev_client_hotplug()
    register_framebuffer()
      fbcon_fb_registered()
        do_fb_registered()
          vga_switcheroo_client_fb_set()  [acquires vgasr_mutex]

Could this lead to a system hang when a GPU switch races with a display
hotplug event?

> +}
> +
>  static const struct vga_switcheroo_client_ops i915_switcheroo_ops = {
>  	.set_gpu_state = i915_switcheroo_set_state,
>  	.reprobe = NULL,

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260707135724.247562-1-tzimmermann@suse.de?part=6

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

* Re: [PATCH 07/10] drm/nouveau: Implement vga_switcheroo_client_ops.pre_switch
  2026-07-07 13:38   ` Thomas Zimmermann
  (?)
@ 2026-07-07 14:18   ` sashiko-bot
  2026-07-08  7:41     ` Thomas Zimmermann
  -1 siblings, 1 reply; 32+ messages in thread
From: sashiko-bot @ 2026-07-07 14:18 UTC (permalink / raw)
  To: Thomas Zimmermann; +Cc: dri-devel

Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:

New issues:
- [High] New AB-BA deadlock introduced between vgasr_mutex and clientlist_mutex.

Pre-existing issues:
- [High] Preexisting AB-BA deadlock between vgasr_mutex and console_lock.
--

--- Patch [7]: [PATCH 07/10] drm/nouveau: Implement vga_switcheroo_client_ops.pre_switch ---
commit a0ca13a7165f71c977582a84acf58b2f2681a805
Author: Thomas Zimmermann <tzimmermann@suse.de>

drm/nouveau: Implement vga_switcheroo_client_ops.pre_switch

This patch implements the vga_switcheroo_client_ops.pre_switch callback in
the nouveau driver. It calls drm_client_dev_acquire_outputs() from the
pre_switch callback to push fbcon updates from vga_switcheroo into DRM's
fbdev emulation.

> diff --git a/drivers/gpu/drm/nouveau/nouveau_vga.c b/drivers/gpu/drm/nouveau/nouveau_vga.c
> index a6c375a241542..2d2d08be8fbe2 100644
> --- a/drivers/gpu/drm/nouveau/nouveau_vga.c
> +++ b/drivers/gpu/drm/nouveau/nouveau_vga.c
> @@ -76,11 +76,20 @@ nouveau_switcheroo_can_switch(struct pci_dev *pdev)
>  	return atomic_read(&drm->dev->open_count) == 0;
>  }
>  
> +static void
> +nouveau_switcheroo_pre_switch(struct pci_dev *pdev)
> +{
> +	struct nouveau_drm *drm = pci_get_drvdata(pdev);
> +
> +	drm_client_dev_acquire_outputs(drm->dev);
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

[Severity: High]
Does this introduce an AB-BA deadlock between vgasr_mutex and
clientlist_mutex?

When drm_client_dev_hotplug() is called, it acquires dev->clientlist_mutex
and eventually calls register_framebuffer(). This takes the console_lock()
and then calls vga_switcheroo_client_fb_set(), taking vgasr_mutex. This
establishes the lock order:
clientlist_mutex -> console_lock -> vgasr_mutex

However, vga_switcheroo_debugfs_write() acquires vgasr_mutex and calls
vga_switchto_stage2(), which invokes this new pre_switch callback.
Calling drm_client_dev_acquire_outputs() here attempts to acquire
dev->clientlist_mutex, establishing the reverse lock order:
vgasr_mutex -> clientlist_mutex

[Severity: High]
This is a pre-existing issue, but does this path also trigger a deadlock
between vgasr_mutex and console_lock?

When register_framebuffer() is called (e.g., during driver probe or
hotplug), it calls fbcon_fb_registered(), which acquires console_lock()
and then calls vga_switcheroo_client_fb_set(), taking vgasr_mutex.

Conversely, vga_switcheroo_debugfs_write() acquires vgasr_mutex and calls
vga_switchto_stage2(). This invokes pre_switch(), which leads to
drm_client_dev_acquire_outputs() and then fb_switch_outputs(), attempting
to acquire console_lock(). This creates an exact inversion:
vgasr_mutex -> console_lock

> +}
> +
>  static const struct vga_switcheroo_client_ops
>  nouveau_switcheroo_ops = {
>  	.set_gpu_state = nouveau_switcheroo_set_state,
>  	.reprobe = nouveau_switcheroo_reprobe,
>  	.can_switch = nouveau_switcheroo_can_switch,
> +	.pre_switch = nouveau_switcheroo_pre_switch,
>  };
>  
>  void

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260707135724.247562-1-tzimmermann@suse.de?part=7

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

* Re: [PATCH 05/10] drm/amdgpu: Implement struct vga_switcheroo_client_ops.pre_switch
  2026-07-07 13:38   ` Thomas Zimmermann
  (?)
@ 2026-07-07 14:22   ` sashiko-bot
  2026-07-08  7:38     ` Thomas Zimmermann
  -1 siblings, 1 reply; 32+ messages in thread
From: sashiko-bot @ 2026-07-07 14:22 UTC (permalink / raw)
  To: Thomas Zimmermann; +Cc: dri-devel

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] An AB-BA lock inversion is introduced between `vgasr_mutex` and `dev->clientlist_mutex`, leading to a potential deadlock.
--

--- Patch [5]: [PATCH 05/10] drm/amdgpu: Implement struct vga_switcheroo_client_ops.pre_switch ---
commit 31dd42c0f56cf03f20324c5c0e3557fa630afd13
Author: Thomas Zimmermann <tzimmermann@suse.de>

drm/amdgpu: Implement struct vga_switcheroo_client_ops.pre_switch

This commit implements the pre_switch callback for vga_switcheroo_client_ops
in the amdgpu driver. It calls drm_client_dev_acquire_outputs() to push fbcon
updates from vga_switcheroo into DRM's fbdev emulation.

> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> index 211d30f03d25f..6c80c6f4b07ca 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> @@ -1698,10 +1698,18 @@ static bool amdgpu_switcheroo_can_switch(struct pci_dev *pdev)
>  	return atomic_read(&dev->open_count) == 0;
>  }
>  
> +static void amdgpu_switcheroo_pre_switch(struct pci_dev *pdev)
> +{
> +	struct drm_device *dev = pci_get_drvdata(pdev);
> +
> +	drm_client_dev_acquire_outputs(dev);

[Severity: High]
Can this introduce an AB-BA lock inversion between vgasr_mutex and
dev->clientlist_mutex?

This callback is invoked by vga_switcheroo while vgasr_mutex is held, and
drm_client_dev_acquire_outputs() then acquires dev->clientlist_mutex.

Meanwhile, the hotplug path acquires clientlist_mutex first:

drm_client_dev_hotplug()
  mutex_lock(&dev->clientlist_mutex);

and then eventually takes console_lock and vgasr_mutex (via
vga_switcheroo_client_fb_set() called from register_framebuffer()) deeper in
the call stack.

If a hotplug event and a VGA switcheroo switch execute concurrently, could this
lead to a deadlock?

> +}
> +
>  static const struct vga_switcheroo_client_ops amdgpu_switcheroo_ops = {
>  	.set_gpu_state = amdgpu_switcheroo_set_state,
>  	.reprobe = NULL,
>  	.can_switch = amdgpu_switcheroo_can_switch,
> +	.pre_switch = amdgpu_switcheroo_pre_switch,
>  };

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260707135724.247562-1-tzimmermann@suse.de?part=5

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

* ✓ i915.CI.BAT: success for vga_switcheroo, drm: Push fbcon handling into DRM clients
  2026-07-07 13:38 ` Thomas Zimmermann
                   ` (10 preceding siblings ...)
  (?)
@ 2026-07-07 15:46 ` Patchwork
  -1 siblings, 0 replies; 32+ messages in thread
From: Patchwork @ 2026-07-07 15:46 UTC (permalink / raw)
  To: Thomas Zimmermann; +Cc: intel-gfx

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

== Series Details ==

Series: vga_switcheroo, drm: Push fbcon handling into DRM clients
URL   : https://patchwork.freedesktop.org/series/169933/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_18777 -> Patchwork_169933v1
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

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

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

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

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

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

### IGT changes ###

#### Issues hit ####

  * igt@i915_selftest@live@client:
    - fi-kbl-7567u:       [PASS][1] -> [DMESG-WARN][2] ([i915#13735]) +13 other tests dmesg-warn
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/fi-kbl-7567u/igt@i915_selftest@live@client.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/fi-kbl-7567u/igt@i915_selftest@live@client.html

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


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

  * Linux: CI_DRM_18777 -> Patchwork_169933v1

  CI-20190529: 20190529
  CI_DRM_18777: 7a8782fa5da551a92ada0aca6f7dbadfc4c36da3 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_8991: c5721520bb6611ab8fcbe27db0c120b72d25b99e @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  Patchwork_169933v1: 7a8782fa5da551a92ada0aca6f7dbadfc4c36da3 @ git://anongit.freedesktop.org/gfx-ci/linux

== Logs ==

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

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

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

* Re: [PATCH 05/10] drm/amdgpu: Implement struct vga_switcheroo_client_ops.pre_switch
  2026-07-07 14:22   ` sashiko-bot
@ 2026-07-08  7:38     ` Thomas Zimmermann
  0 siblings, 0 replies; 32+ messages in thread
From: Thomas Zimmermann @ 2026-07-08  7:38 UTC (permalink / raw)
  To: sashiko-reviews; +Cc: dri-devel



Am 07.07.26 um 16:22 schrieb sashiko-bot@kernel.org:
> Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
> - [High] An AB-BA lock inversion is introduced between `vgasr_mutex` and `dev->clientlist_mutex`, leading to a potential deadlock.
> --
>
> --- Patch [5]: [PATCH 05/10] drm/amdgpu: Implement struct vga_switcheroo_client_ops.pre_switch ---
> commit 31dd42c0f56cf03f20324c5c0e3557fa630afd13
> Author: Thomas Zimmermann <tzimmermann@suse.de>
>
> drm/amdgpu: Implement struct vga_switcheroo_client_ops.pre_switch
>
> This commit implements the pre_switch callback for vga_switcheroo_client_ops
> in the amdgpu driver. It calls drm_client_dev_acquire_outputs() to push fbcon
> updates from vga_switcheroo into DRM's fbdev emulation.
>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
>> index 211d30f03d25f..6c80c6f4b07ca 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
>> @@ -1698,10 +1698,18 @@ static bool amdgpu_switcheroo_can_switch(struct pci_dev *pdev)
>>   	return atomic_read(&dev->open_count) == 0;
>>   }
>>   
>> +static void amdgpu_switcheroo_pre_switch(struct pci_dev *pdev)
>> +{
>> +	struct drm_device *dev = pci_get_drvdata(pdev);
>> +
>> +	drm_client_dev_acquire_outputs(dev);
> [Severity: High]
> Can this introduce an AB-BA lock inversion between vgasr_mutex and
> dev->clientlist_mutex?
>
> This callback is invoked by vga_switcheroo while vgasr_mutex is held, and
> drm_client_dev_acquire_outputs() then acquires dev->clientlist_mutex.
>
> Meanwhile, the hotplug path acquires clientlist_mutex first:
>
> drm_client_dev_hotplug()
>    mutex_lock(&dev->clientlist_mutex);
>
> and then eventually takes console_lock and vgasr_mutex (via
> vga_switcheroo_client_fb_set() called from register_framebuffer()) deeper in
> the call stack.

Patch 10 removes calls to vga_switcheroo_client_fb_set() entirely. I 
could try to reorganize the series to avoid the vulnerable intermediate 
states.

>
> If a hotplug event and a VGA switcheroo switch execute concurrently, could this
> lead to a deadlock?
>
>> +}
>> +
>>   static const struct vga_switcheroo_client_ops amdgpu_switcheroo_ops = {
>>   	.set_gpu_state = amdgpu_switcheroo_set_state,
>>   	.reprobe = NULL,
>>   	.can_switch = amdgpu_switcheroo_can_switch,
>> +	.pre_switch = amdgpu_switcheroo_pre_switch,
>>   };

-- 
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstr. 146, 90461 Nürnberg, Germany, www.suse.com
GF: Jochen Jaser, Andrew McDonald, (HRB 36809, AG Nürnberg)



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

* Re: [PATCH 06/10] drm/i915: Implement vga_switcheroo_client_ops.pre_switch
  2026-07-07 14:17   ` sashiko-bot
@ 2026-07-08  7:39     ` Thomas Zimmermann
  0 siblings, 0 replies; 32+ messages in thread
From: Thomas Zimmermann @ 2026-07-08  7:39 UTC (permalink / raw)
  To: sashiko-reviews; +Cc: dri-devel



Am 07.07.26 um 16:17 schrieb sashiko-bot@kernel.org:
> Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
> - [High] AB-BA deadlock between `vgasr_mutex` and `dev->clientlist_mutex` during VGA switcheroo and DRM client hotplug/registration.
> --
>
> --- Patch [6]: [PATCH 06/10] drm/i915: Implement vga_switcheroo_client_ops.pre_switch ---
> commit ca43d8e034e1ee27918b22e1b7a19b8f6a5b4a67
> Author: Thomas Zimmermann <tzimmermann@suse.de>
>
> drm/i915: Implement vga_switcheroo_client_ops.pre_switch
>
> This commit implements the pre_switch callback for vga_switcheroo in the
> i915 driver. It calls drm_client_dev_acquire_outputs() to push fbcon
> updates from vga_switcheroo into DRM's fbdev emulation.
>
>> diff --git a/drivers/gpu/drm/i915/i915_switcheroo.c b/drivers/gpu/drm/i915/i915_switcheroo.c
>> index 7e0791024282e..6b306ece0556a 100644
>> --- a/drivers/gpu/drm/i915/i915_switcheroo.c
>> +++ b/drivers/gpu/drm/i915/i915_switcheroo.c
> [ ... ]
>> @@ -58,10 +59,19 @@ static bool i915_switcheroo_can_switch(struct pci_dev *pdev)
>>   		atomic_read(&i915->drm.open_count) == 0;
>>   }
>>   
>> +static void i915_switcheroo_pre_switch(struct pci_dev *pdev)
>> +{
>> +	struct drm_i915_private *i915 = pdev_to_i915(pdev);
>> +
>> +	if (i915 && intel_display_device_present(i915->display))
>> +		drm_client_dev_acquire_outputs(&i915->drm);
>                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>
> [Severity: High]
> Does this code introduce an AB-BA deadlock between vgasr_mutex and
> dev->clientlist_mutex?
>
> A GPU switch triggered via userspace will acquire vgasr_mutex and eventually
> call this pre_switch callback:
>
> vga_switcheroo_debugfs_write()  [acquires vgasr_mutex]
>    vga_switchto_stage2()
>      i915_switcheroo_pre_switch()
>        drm_client_dev_acquire_outputs()  [acquires dev->clientlist_mutex]
>
> However, a DRM client hotplug event can acquire these locks in the reverse
> order:
>
> drm_client_dev_hotplug()  [acquires dev->clientlist_mutex]
>    drm_fbdev_client_hotplug()
>      register_framebuffer()
>        fbcon_fb_registered()
>          do_fb_registered()
>            vga_switcheroo_client_fb_set()  [acquires vgasr_mutex]
>
> Could this lead to a system hang when a GPU switch races with a display
> hotplug event?

Patch 10 removes calls to vga_switcheroo_client_fb_set() entirely. I 
could try to reorganize the series to avoid the vulnerable intermediate 
states.

>
>> +}
>> +
>>   static const struct vga_switcheroo_client_ops i915_switcheroo_ops = {
>>   	.set_gpu_state = i915_switcheroo_set_state,
>>   	.reprobe = NULL,

-- 
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstr. 146, 90461 Nürnberg, Germany, www.suse.com
GF: Jochen Jaser, Andrew McDonald, (HRB 36809, AG Nürnberg)



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

* Re: [PATCH 07/10] drm/nouveau: Implement vga_switcheroo_client_ops.pre_switch
  2026-07-07 14:18   ` sashiko-bot
@ 2026-07-08  7:41     ` Thomas Zimmermann
  0 siblings, 0 replies; 32+ messages in thread
From: Thomas Zimmermann @ 2026-07-08  7:41 UTC (permalink / raw)
  To: sashiko-reviews; +Cc: dri-devel



Am 07.07.26 um 16:18 schrieb sashiko-bot@kernel.org:
> Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
>
> New issues:
> - [High] New AB-BA deadlock introduced between vgasr_mutex and clientlist_mutex.
>
> Pre-existing issues:
> - [High] Preexisting AB-BA deadlock between vgasr_mutex and console_lock.
> --
>
> --- Patch [7]: [PATCH 07/10] drm/nouveau: Implement vga_switcheroo_client_ops.pre_switch ---
> commit a0ca13a7165f71c977582a84acf58b2f2681a805
> Author: Thomas Zimmermann <tzimmermann@suse.de>
>
> drm/nouveau: Implement vga_switcheroo_client_ops.pre_switch
>
> This patch implements the vga_switcheroo_client_ops.pre_switch callback in
> the nouveau driver. It calls drm_client_dev_acquire_outputs() from the
> pre_switch callback to push fbcon updates from vga_switcheroo into DRM's
> fbdev emulation.
>
>> diff --git a/drivers/gpu/drm/nouveau/nouveau_vga.c b/drivers/gpu/drm/nouveau/nouveau_vga.c
>> index a6c375a241542..2d2d08be8fbe2 100644
>> --- a/drivers/gpu/drm/nouveau/nouveau_vga.c
>> +++ b/drivers/gpu/drm/nouveau/nouveau_vga.c
>> @@ -76,11 +76,20 @@ nouveau_switcheroo_can_switch(struct pci_dev *pdev)
>>   	return atomic_read(&drm->dev->open_count) == 0;
>>   }
>>   
>> +static void
>> +nouveau_switcheroo_pre_switch(struct pci_dev *pdev)
>> +{
>> +	struct nouveau_drm *drm = pci_get_drvdata(pdev);
>> +
>> +	drm_client_dev_acquire_outputs(drm->dev);
>          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>
> [Severity: High]
> Does this introduce an AB-BA deadlock between vgasr_mutex and
> clientlist_mutex?
>
> When drm_client_dev_hotplug() is called, it acquires dev->clientlist_mutex
> and eventually calls register_framebuffer(). This takes the console_lock()
> and then calls vga_switcheroo_client_fb_set(), taking vgasr_mutex. This
> establishes the lock order:
> clientlist_mutex -> console_lock -> vgasr_mutex
>
> However, vga_switcheroo_debugfs_write() acquires vgasr_mutex and calls
> vga_switchto_stage2(), which invokes this new pre_switch callback.
> Calling drm_client_dev_acquire_outputs() here attempts to acquire
> dev->clientlist_mutex, establishing the reverse lock order:
> vgasr_mutex -> clientlist_mutex

Patch 10 removes calls to vga_switcheroo_client_fb_set() entirely. I 
could try to reorganize the series to avoid the vulnerable intermediate 
states.

>
> [Severity: High]
> This is a pre-existing issue, but does this path also trigger a deadlock
> between vgasr_mutex and console_lock?
>
> When register_framebuffer() is called (e.g., during driver probe or
> hotplug), it calls fbcon_fb_registered(), which acquires console_lock()
> and then calls vga_switcheroo_client_fb_set(), taking vgasr_mutex.
>
> Conversely, vga_switcheroo_debugfs_write() acquires vgasr_mutex and calls
> vga_switchto_stage2(). This invokes pre_switch(), which leads to
> drm_client_dev_acquire_outputs() and then fb_switch_outputs(), attempting
> to acquire console_lock(). This creates an exact inversion:
> vgasr_mutex -> console_lock

This would also be resolved by the early removal of 
vga_switcheroo_client_fb_set().

>
>> +}
>> +
>>   static const struct vga_switcheroo_client_ops
>>   nouveau_switcheroo_ops = {
>>   	.set_gpu_state = nouveau_switcheroo_set_state,
>>   	.reprobe = nouveau_switcheroo_reprobe,
>>   	.can_switch = nouveau_switcheroo_can_switch,
>> +	.pre_switch = nouveau_switcheroo_pre_switch,
>>   };
>>   
>>   void

-- 
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstr. 146, 90461 Nürnberg, Germany, www.suse.com
GF: Jochen Jaser, Andrew McDonald, (HRB 36809, AG Nürnberg)



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

* ✗ i915.CI.Full: failure for vga_switcheroo, drm: Push fbcon handling into DRM clients
  2026-07-07 13:38 ` Thomas Zimmermann
                   ` (11 preceding siblings ...)
  (?)
@ 2026-07-08  8:07 ` Patchwork
  -1 siblings, 0 replies; 32+ messages in thread
From: Patchwork @ 2026-07-08  8:07 UTC (permalink / raw)
  To: Thomas Zimmermann; +Cc: intel-gfx

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

== Series Details ==

Series: vga_switcheroo, drm: Push fbcon handling into DRM clients
URL   : https://patchwork.freedesktop.org/series/169933/
State : failure

== Summary ==

CI Bug Log - changes from CI_DRM_18777_full -> Patchwork_169933v1_full
====================================================

Summary
-------

  **FAILURE**

  Serious unknown changes coming with Patchwork_169933v1_full absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in Patchwork_169933v1_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 (11 -> 11)
------------------------------

  No changes in participating hosts

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

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

### IGT changes ###

#### Possible regressions ####

  * igt@kms_pm_rpm@system-suspend-modeset:
    - shard-mtlp:         [PASS][1] -> [DMESG-WARN][2]
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-mtlp-5/igt@kms_pm_rpm@system-suspend-modeset.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-mtlp-5/igt@kms_pm_rpm@system-suspend-modeset.html

  * igt@perf_pmu@most-busy-check-all@vecs0:
    - shard-rkl:          [PASS][3] -> [FAIL][4] +3 other tests fail
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-7/igt@perf_pmu@most-busy-check-all@vecs0.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-5/igt@perf_pmu@most-busy-check-all@vecs0.html

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

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

### IGT changes ###

#### Issues hit ####

  * igt@gem_basic@multigpu-create-close:
    - shard-tglu:         NOTRUN -> [SKIP][5] ([i915#7697])
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-tglu-10/igt@gem_basic@multigpu-create-close.html

  * igt@gem_ccs@suspend-resume:
    - shard-dg2:          NOTRUN -> [INCOMPLETE][6] ([i915#13356] / [i915#16348]) +1 other test incomplete
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-dg2-7/igt@gem_ccs@suspend-resume.html
    - shard-rkl:          NOTRUN -> [SKIP][7] ([i915#9323]) +1 other test skip
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-8/igt@gem_ccs@suspend-resume.html

  * igt@gem_close_race@multigpu-basic-threads:
    - shard-tglu-1:       NOTRUN -> [SKIP][8] ([i915#7697])
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-tglu-1/igt@gem_close_race@multigpu-basic-threads.html

  * igt@gem_ctx_isolation@preservation-s3@bcs0:
    - shard-glk:          NOTRUN -> [INCOMPLETE][9] ([i915#13356] / [i915#16466]) +1 other test incomplete
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-glk2/igt@gem_ctx_isolation@preservation-s3@bcs0.html

  * igt@gem_eio@kms:
    - shard-tglu-1:       NOTRUN -> [DMESG-WARN][10] ([i915#13363])
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-tglu-1/igt@gem_eio@kms.html

  * igt@gem_exec_balancer@bonded-dual:
    - shard-dg2:          NOTRUN -> [SKIP][11] ([i915#4771])
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-dg2-7/igt@gem_exec_balancer@bonded-dual.html

  * igt@gem_exec_balancer@parallel-ordering:
    - shard-tglu-1:       NOTRUN -> [SKIP][12] ([i915#4525])
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-tglu-1/igt@gem_exec_balancer@parallel-ordering.html

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

  * igt@gem_exec_flush@basic-wb-rw-before-default:
    - shard-dg2:          NOTRUN -> [SKIP][14] ([i915#3539] / [i915#4852])
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-dg2-7/igt@gem_exec_flush@basic-wb-rw-before-default.html

  * igt@gem_exec_reloc@basic-gtt-cpu:
    - shard-dg2:          NOTRUN -> [SKIP][15] ([i915#3281])
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-dg2-7/igt@gem_exec_reloc@basic-gtt-cpu.html

  * igt@gem_exec_reloc@basic-gtt-wc-noreloc:
    - shard-rkl:          NOTRUN -> [SKIP][16] ([i915#3281]) +12 other tests skip
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-8/igt@gem_exec_reloc@basic-gtt-wc-noreloc.html

  * igt@gem_exec_schedule@semaphore-power:
    - shard-rkl:          NOTRUN -> [SKIP][17] ([i915#7276])
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-5/igt@gem_exec_schedule@semaphore-power.html

  * igt@gem_exec_suspend@basic-s3:
    - shard-rkl:          NOTRUN -> [ABORT][18] ([i915#15131] / [i915#15542]) +1 other test abort
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-1/igt@gem_exec_suspend@basic-s3.html

  * igt@gem_exec_suspend@basic-s3-devices:
    - shard-rkl:          [PASS][19] -> [ABORT][20] ([i915#15131] / [i915#15542])
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-7/igt@gem_exec_suspend@basic-s3-devices.html
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-1/igt@gem_exec_suspend@basic-s3-devices.html

  * igt@gem_exec_suspend@basic-s3-devices@smem:
    - shard-rkl:          [PASS][21] -> [ABORT][22] ([i915#15542])
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-7/igt@gem_exec_suspend@basic-s3-devices@smem.html
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-1/igt@gem_exec_suspend@basic-s3-devices@smem.html

  * igt@gem_fenced_exec_thrash@no-spare-fences-busy:
    - shard-dg2:          NOTRUN -> [SKIP][23] ([i915#4860])
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-dg2-7/igt@gem_fenced_exec_thrash@no-spare-fences-busy.html

  * igt@gem_lmem_evict@dontneed-evict-race:
    - shard-glk:          NOTRUN -> [SKIP][24] ([i915#4613]) +1 other test skip
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-glk2/igt@gem_lmem_evict@dontneed-evict-race.html

  * igt@gem_lmem_swapping@parallel-random-engines:
    - shard-rkl:          NOTRUN -> [SKIP][25] ([i915#4613]) +1 other test skip
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-5/igt@gem_lmem_swapping@parallel-random-engines.html

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

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

  * igt@gem_mmap_gtt@fault-concurrent-x:
    - shard-dg2:          NOTRUN -> [SKIP][28] ([i915#4077])
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-dg2-7/igt@gem_mmap_gtt@fault-concurrent-x.html

  * igt@gem_mmap_wc@write-gtt-read-wc:
    - shard-dg2:          NOTRUN -> [SKIP][29] ([i915#4083]) +1 other test skip
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-dg2-7/igt@gem_mmap_wc@write-gtt-read-wc.html

  * igt@gem_pread@snoop:
    - shard-rkl:          NOTRUN -> [SKIP][30] ([i915#3282]) +2 other tests skip
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-5/igt@gem_pread@snoop.html

  * igt@gem_render_copy@yf-tiled-to-vebox-y-tiled:
    - shard-dg2:          NOTRUN -> [SKIP][31] ([i915#5190] / [i915#8428]) +1 other test skip
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-dg2-7/igt@gem_render_copy@yf-tiled-to-vebox-y-tiled.html

  * igt@gem_userptr_blits@dmabuf-sync:
    - shard-rkl:          NOTRUN -> [SKIP][32] ([i915#3297] / [i915#3323])
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-5/igt@gem_userptr_blits@dmabuf-sync.html

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

  * igt@gem_userptr_blits@unsync-unmap:
    - shard-tglu-1:       NOTRUN -> [SKIP][34] ([i915#3297]) +1 other test skip
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-tglu-1/igt@gem_userptr_blits@unsync-unmap.html

  * igt@gem_userptr_blits@unsync-unmap-cycles:
    - shard-rkl:          NOTRUN -> [SKIP][35] ([i915#3297])
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-8/igt@gem_userptr_blits@unsync-unmap-cycles.html

  * igt@gem_workarounds@suspend-resume:
    - shard-glk:          [PASS][36] -> [INCOMPLETE][37] ([i915#13356] / [i915#14586])
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-glk3/igt@gem_workarounds@suspend-resume.html
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-glk5/igt@gem_workarounds@suspend-resume.html

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

  * igt@gen9_exec_parse@bb-start-param:
    - shard-tglu:         NOTRUN -> [SKIP][39] ([i915#2527] / [i915#2856])
   [39]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-tglu-10/igt@gen9_exec_parse@bb-start-param.html

  * igt@gen9_exec_parse@secure-batches:
    - shard-rkl:          NOTRUN -> [SKIP][40] ([i915#2527]) +2 other tests skip
   [40]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-1/igt@gen9_exec_parse@secure-batches.html

  * igt@i915_drm_fdinfo@all-busy-check-all:
    - shard-dg2:          NOTRUN -> [SKIP][41] ([i915#14123])
   [41]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-dg2-7/igt@i915_drm_fdinfo@all-busy-check-all.html

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

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

  * igt@i915_pm_rc6_residency@rc6-idle:
    - shard-rkl:          NOTRUN -> [SKIP][44] ([i915#14498])
   [44]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-4/igt@i915_pm_rc6_residency@rc6-idle.html

  * igt@i915_pm_rpm@system-suspend-execbuf:
    - shard-rkl:          [PASS][45] -> [INCOMPLETE][46] ([i915#13356])
   [45]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-8/igt@i915_pm_rpm@system-suspend-execbuf.html
   [46]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-6/igt@i915_pm_rpm@system-suspend-execbuf.html

  * igt@i915_query@query-topology-unsupported:
    - shard-tglu:         NOTRUN -> [SKIP][47] ([i915#16079])
   [47]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-tglu-10/igt@i915_query@query-topology-unsupported.html

  * igt@i915_query@test-query-geometry-subslices:
    - shard-tglu-1:       NOTRUN -> [SKIP][48] ([i915#5723])
   [48]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-tglu-1/igt@i915_query@test-query-geometry-subslices.html

  * igt@i915_suspend@basic-s3-without-i915:
    - shard-tglu:         NOTRUN -> [INCOMPLETE][49] ([i915#4817] / [i915#7443])
   [49]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-tglu-2/igt@i915_suspend@basic-s3-without-i915.html

  * igt@i915_suspend@fence-restore-tiled2untiled:
    - shard-glk:          [PASS][50] -> [INCOMPLETE][51] ([i915#16182] / [i915#4817])
   [50]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-glk1/igt@i915_suspend@fence-restore-tiled2untiled.html
   [51]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-glk3/igt@i915_suspend@fence-restore-tiled2untiled.html

  * igt@i915_suspend@forcewake:
    - shard-glk11:        NOTRUN -> [INCOMPLETE][52] ([i915#16182] / [i915#4817])
   [52]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-glk11/igt@i915_suspend@forcewake.html

  * igt@i915_suspend@sysfs-reader:
    - shard-rkl:          [PASS][53] -> [INCOMPLETE][54] ([i915#4817])
   [53]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-4/igt@i915_suspend@sysfs-reader.html
   [54]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-3/igt@i915_suspend@sysfs-reader.html

  * igt@intel_hwmon@hwmon-read:
    - shard-rkl:          NOTRUN -> [SKIP][55] ([i915#7707])
   [55]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-5/igt@intel_hwmon@hwmon-read.html

  * igt@kms_async_flips@alternate-sync-async-flip-atomic:
    - shard-dg1:          [PASS][56] -> [FAIL][57] ([i915#14888])
   [56]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-dg1-17/igt@kms_async_flips@alternate-sync-async-flip-atomic.html
   [57]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-dg1-14/igt@kms_async_flips@alternate-sync-async-flip-atomic.html

  * igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-a-hdmi-a-1:
    - shard-dg1:          NOTRUN -> [FAIL][58] ([i915#14888])
   [58]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-dg1-14/igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-a-hdmi-a-1.html

  * igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels:
    - shard-rkl:          NOTRUN -> [SKIP][59] ([i915#1769] / [i915#3555]) +1 other test skip
   [59]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-8/igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels.html

  * igt@kms_big_fb@4-tiled-16bpp-rotate-90:
    - shard-dg2:          NOTRUN -> [SKIP][60] +1 other test skip
   [60]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-dg2-7/igt@kms_big_fb@4-tiled-16bpp-rotate-90.html
    - shard-tglu:         NOTRUN -> [SKIP][61] ([i915#5286]) +1 other test skip
   [61]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-tglu-2/igt@kms_big_fb@4-tiled-16bpp-rotate-90.html

  * igt@kms_big_fb@4-tiled-32bpp-rotate-0:
    - shard-rkl:          NOTRUN -> [SKIP][62] ([i915#5286]) +6 other tests skip
   [62]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-5/igt@kms_big_fb@4-tiled-32bpp-rotate-0.html

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

  * igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180-hflip:
    - shard-mtlp:         [PASS][64] -> [FAIL][65] ([i915#15733] / [i915#5138]) +1 other test fail
   [64]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-mtlp-1/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180-hflip.html
   [65]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-mtlp-5/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180-hflip.html

  * igt@kms_big_fb@linear-32bpp-rotate-270:
    - shard-rkl:          NOTRUN -> [SKIP][66] ([i915#3638]) +1 other test skip
   [66]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-4/igt@kms_big_fb@linear-32bpp-rotate-270.html

  * igt@kms_big_fb@linear-max-hw-stride-64bpp-rotate-180-hflip:
    - shard-rkl:          NOTRUN -> [SKIP][67] ([i915#3828]) +1 other test skip
   [67]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-8/igt@kms_big_fb@linear-max-hw-stride-64bpp-rotate-180-hflip.html

  * igt@kms_ccs@bad-pixel-format-y-tiled-gen12-mc-ccs:
    - shard-dg2:          NOTRUN -> [SKIP][68] ([i915#10307] / [i915#6095]) +79 other tests skip
   [68]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-dg2-7/igt@kms_ccs@bad-pixel-format-y-tiled-gen12-mc-ccs.html

  * igt@kms_ccs@ccs-on-another-bo-4-tiled-mtl-mc-ccs@pipe-c-hdmi-a-2:
    - shard-glk:          NOTRUN -> [SKIP][69] +226 other tests skip
   [69]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-glk4/igt@kms_ccs@ccs-on-another-bo-4-tiled-mtl-mc-ccs@pipe-c-hdmi-a-2.html

  * igt@kms_ccs@ccs-on-another-bo-y-tiled-gen12-mc-ccs@pipe-b-hdmi-a-2:
    - shard-rkl:          NOTRUN -> [SKIP][70] ([i915#14544] / [i915#6095]) +7 other tests skip
   [70]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-6/igt@kms_ccs@ccs-on-another-bo-y-tiled-gen12-mc-ccs@pipe-b-hdmi-a-2.html

  * igt@kms_ccs@ccs-on-another-bo-yf-tiled-ccs@pipe-c-hdmi-a-2:
    - shard-rkl:          NOTRUN -> [SKIP][71] ([i915#14098] / [i915#14544] / [i915#6095]) +3 other tests skip
   [71]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-6/igt@kms_ccs@ccs-on-another-bo-yf-tiled-ccs@pipe-c-hdmi-a-2.html

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

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

  * igt@kms_ccs@crc-primary-suspend-y-tiled-ccs@pipe-a-hdmi-a-1:
    - shard-glk:          [PASS][74] -> [INCOMPLETE][75] ([i915#15582])
   [74]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-glk6/igt@kms_ccs@crc-primary-suspend-y-tiled-ccs@pipe-a-hdmi-a-1.html
   [75]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-glk8/igt@kms_ccs@crc-primary-suspend-y-tiled-ccs@pipe-a-hdmi-a-1.html

  * igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-mc-ccs@pipe-d-hdmi-a-1:
    - shard-tglu:         NOTRUN -> [SKIP][76] ([i915#6095]) +24 other tests skip
   [76]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-tglu-10/igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-mc-ccs@pipe-d-hdmi-a-1.html

  * igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-rc-ccs-cc:
    - shard-rkl:          [PASS][77] -> [INCOMPLETE][78] ([i915#15582])
   [77]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-5/igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-rc-ccs-cc.html
   [78]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-6/igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-rc-ccs-cc.html

  * igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-rc-ccs-cc@pipe-a-hdmi-a-2:
    - shard-rkl:          NOTRUN -> [INCOMPLETE][79] ([i915#15582])
   [79]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-6/igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-rc-ccs-cc@pipe-a-hdmi-a-2.html

  * igt@kms_ccs@crc-primary-suspend-yf-tiled-ccs:
    - shard-rkl:          NOTRUN -> [SKIP][80] ([i915#14098] / [i915#6095]) +46 other tests skip
   [80]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-8/igt@kms_ccs@crc-primary-suspend-yf-tiled-ccs.html

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

  * igt@kms_ccs@random-ccs-data-y-tiled-ccs@pipe-b-hdmi-a-1:
    - shard-rkl:          NOTRUN -> [SKIP][82] ([i915#6095]) +77 other tests skip
   [82]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-2/igt@kms_ccs@random-ccs-data-y-tiled-ccs@pipe-b-hdmi-a-1.html

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

  * igt@kms_cdclk@mode-transition-all-outputs:
    - shard-tglu-1:       NOTRUN -> [SKIP][84] ([i915#3742])
   [84]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-tglu-1/igt@kms_cdclk@mode-transition-all-outputs.html

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

  * igt@kms_chamelium_color_pipeline@plane-lut1d:
    - shard-rkl:          NOTRUN -> [SKIP][86] ([i915#16471]) +1 other test skip
   [86]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-1/igt@kms_chamelium_color_pipeline@plane-lut1d.html

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

  * igt@kms_chamelium_edid@dp-mode-timings:
    - shard-tglu:         NOTRUN -> [SKIP][88] ([i915#11151] / [i915#7828]) +2 other tests skip
   [88]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-tglu-10/igt@kms_chamelium_edid@dp-mode-timings.html

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

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

  * igt@kms_content_protection@dp-mst-type-0-suspend-resume:
    - shard-rkl:          NOTRUN -> [SKIP][91] ([i915#15330])
   [91]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-8/igt@kms_content_protection@dp-mst-type-0-suspend-resume.html

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

  * igt@kms_content_protection@lic-type-0:
    - shard-tglu:         NOTRUN -> [SKIP][93] ([i915#15865])
   [93]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-tglu-10/igt@kms_content_protection@lic-type-0.html

  * igt@kms_content_protection@lic-type-1:
    - shard-tglu-1:       NOTRUN -> [SKIP][94] ([i915#15865])
   [94]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-tglu-1/igt@kms_content_protection@lic-type-1.html

  * igt@kms_content_protection@type1:
    - shard-rkl:          NOTRUN -> [SKIP][95] ([i915#15865])
   [95]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-5/igt@kms_content_protection@type1.html

  * igt@kms_cursor_crc@cursor-offscreen-512x512:
    - shard-rkl:          NOTRUN -> [SKIP][96] ([i915#13049])
   [96]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-8/igt@kms_cursor_crc@cursor-offscreen-512x512.html

  * igt@kms_cursor_crc@cursor-onscreen-64x21:
    - shard-rkl:          [PASS][97] -> [FAIL][98] ([i915#13566]) +1 other test fail
   [97]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-4/igt@kms_cursor_crc@cursor-onscreen-64x21.html
   [98]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-3/igt@kms_cursor_crc@cursor-onscreen-64x21.html

  * igt@kms_cursor_crc@cursor-onscreen-64x21@pipe-a-hdmi-a-1:
    - shard-tglu:         [PASS][99] -> [FAIL][100] ([i915#13566]) +1 other test fail
   [99]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-tglu-2/igt@kms_cursor_crc@cursor-onscreen-64x21@pipe-a-hdmi-a-1.html
   [100]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-tglu-6/igt@kms_cursor_crc@cursor-onscreen-64x21@pipe-a-hdmi-a-1.html

  * igt@kms_cursor_crc@cursor-random-256x85@pipe-a-hdmi-a-1:
    - shard-tglu:         NOTRUN -> [FAIL][101] ([i915#13566]) +1 other test fail
   [101]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-tglu-2/igt@kms_cursor_crc@cursor-random-256x85@pipe-a-hdmi-a-1.html

  * igt@kms_cursor_crc@cursor-random-32x10:
    - shard-rkl:          NOTRUN -> [SKIP][102] ([i915#3555]) +2 other tests skip
   [102]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-8/igt@kms_cursor_crc@cursor-random-32x10.html

  * igt@kms_cursor_crc@cursor-random-32x32:
    - shard-tglu-1:       NOTRUN -> [SKIP][103] ([i915#3555]) +4 other tests skip
   [103]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-tglu-1/igt@kms_cursor_crc@cursor-random-32x32.html

  * igt@kms_cursor_crc@cursor-rapid-movement-512x170:
    - shard-tglu-1:       NOTRUN -> [SKIP][104] ([i915#13049])
   [104]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-tglu-1/igt@kms_cursor_crc@cursor-rapid-movement-512x170.html

  * igt@kms_cursor_crc@cursor-sliding-128x42@pipe-a-hdmi-a-1:
    - shard-tglu-1:       NOTRUN -> [FAIL][105] ([i915#13566]) +1 other test fail
   [105]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-tglu-1/igt@kms_cursor_crc@cursor-sliding-128x42@pipe-a-hdmi-a-1.html

  * igt@kms_cursor_crc@cursor-sliding-32x32:
    - shard-tglu:         NOTRUN -> [SKIP][106] ([i915#3555])
   [106]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-tglu-10/igt@kms_cursor_crc@cursor-sliding-32x32.html

  * igt@kms_cursor_crc@cursor-sliding-64x21@pipe-a-hdmi-a-2:
    - shard-rkl:          NOTRUN -> [FAIL][107] ([i915#13566]) +5 other tests fail
   [107]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-1/igt@kms_cursor_crc@cursor-sliding-64x21@pipe-a-hdmi-a-2.html

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

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

  * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy:
    - shard-rkl:          NOTRUN -> [SKIP][110] ([i915#4103])
   [110]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-8/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy.html
    - shard-tglu:         NOTRUN -> [SKIP][111] ([i915#4103])
   [111]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-tglu-2/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy.html
    - shard-dg2:          NOTRUN -> [SKIP][112] ([i915#4103])
   [112]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-dg2-7/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy.html

  * igt@kms_cursor_legacy@cursorb-vs-flipa-atomic-transitions:
    - shard-dg2:          NOTRUN -> [SKIP][113] ([i915#13046] / [i915#5354]) +1 other test skip
   [113]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-dg2-7/igt@kms_cursor_legacy@cursorb-vs-flipa-atomic-transitions.html

  * igt@kms_dirtyfb@drrs-dirtyfb-ioctl:
    - shard-rkl:          NOTRUN -> [SKIP][114] ([i915#9723])
   [114]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-5/igt@kms_dirtyfb@drrs-dirtyfb-ioctl.html

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

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

  * igt@kms_dp_link_training@uhbr-mst:
    - shard-dg2:          NOTRUN -> [SKIP][117] ([i915#13748])
   [117]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-dg2-7/igt@kms_dp_link_training@uhbr-mst.html
    - shard-rkl:          NOTRUN -> [SKIP][118] ([i915#13748])
   [118]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-8/igt@kms_dp_link_training@uhbr-mst.html
    - shard-tglu:         NOTRUN -> [SKIP][119] ([i915#13748])
   [119]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-tglu-2/igt@kms_dp_link_training@uhbr-mst.html

  * igt@kms_draw_crc@draw-method-pwrite:
    - shard-dg1:          [PASS][120] -> [DMESG-WARN][121] ([i915#4423])
   [120]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-dg1-17/igt@kms_draw_crc@draw-method-pwrite.html
   [121]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-dg1-19/igt@kms_draw_crc@draw-method-pwrite.html

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

  * igt@kms_dsc@dsc-with-bpc:
    - shard-tglu:         NOTRUN -> [SKIP][123] ([i915#16361])
   [123]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-tglu-10/igt@kms_dsc@dsc-with-bpc.html

  * igt@kms_dsc@dsc-with-output-formats-with-bpc-ultrajoiner:
    - shard-rkl:          NOTRUN -> [SKIP][124] ([i915#16361]) +3 other tests skip
   [124]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-8/igt@kms_dsc@dsc-with-output-formats-with-bpc-ultrajoiner.html

  * igt@kms_fbcon_fbt@fbc-suspend:
    - shard-glk10:        NOTRUN -> [INCOMPLETE][125] ([i915#9878])
   [125]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-glk10/igt@kms_fbcon_fbt@fbc-suspend.html

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

  * igt@kms_fbcon_fbt@psr-suspend:
    - shard-tglu-1:       NOTRUN -> [SKIP][127] ([i915#3469])
   [127]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-tglu-1/igt@kms_fbcon_fbt@psr-suspend.html

  * igt@kms_feature_discovery@display-3x:
    - shard-rkl:          NOTRUN -> [SKIP][128] ([i915#16081]) +1 other test skip
   [128]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-5/igt@kms_feature_discovery@display-3x.html

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

  * igt@kms_feature_discovery@psr2:
    - shard-rkl:          NOTRUN -> [SKIP][130] ([i915#658])
   [130]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-4/igt@kms_feature_discovery@psr2.html

  * igt@kms_flip@2x-blocking-absolute-wf_vblank:
    - shard-tglu:         NOTRUN -> [SKIP][131] ([i915#3637] / [i915#9934]) +2 other tests skip
   [131]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-tglu-10/igt@kms_flip@2x-blocking-absolute-wf_vblank.html

  * igt@kms_flip@2x-flip-vs-panning-vs-hang:
    - shard-rkl:          NOTRUN -> [SKIP][132] ([i915#9934]) +4 other tests skip
   [132]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-4/igt@kms_flip@2x-flip-vs-panning-vs-hang.html

  * igt@kms_flip@2x-nonexisting-fb:
    - shard-dg2:          NOTRUN -> [SKIP][133] ([i915#9934])
   [133]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-dg2-7/igt@kms_flip@2x-nonexisting-fb.html

  * igt@kms_flip@2x-plain-flip-fb-recreate-interruptible:
    - shard-tglu-1:       NOTRUN -> [SKIP][134] ([i915#3637] / [i915#9934]) +2 other tests skip
   [134]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/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-rkl:          NOTRUN -> [SKIP][135] ([i915#15643]) +1 other test skip
   [135]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-8/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-upscaling.html
    - shard-tglu:         NOTRUN -> [SKIP][136] ([i915#15643]) +1 other test skip
   [136]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-tglu-2/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-upscaling.html

  * igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-16bpp-yftile-downscaling:
    - shard-tglu-1:       NOTRUN -> [SKIP][137] ([i915#15643]) +2 other tests skip
   [137]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-tglu-1/igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-16bpp-yftile-downscaling.html

  * igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-16bpp-ytile-upscaling:
    - shard-dg2:          NOTRUN -> [SKIP][138] ([i915#15643] / [i915#5190])
   [138]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-dg2-7/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-16bpp-ytile-upscaling.html

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-indfb-plflip-blt:
    - shard-rkl:          NOTRUN -> [SKIP][139] +83 other tests skip
   [139]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-1/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-indfb-plflip-blt.html

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-shrfb-draw-mmap-gtt:
    - shard-rkl:          NOTRUN -> [SKIP][140] ([i915#1825]) +6 other tests skip
   [140]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-1/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-shrfb-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@fbchdr-1p-primscrn-spr-indfb-draw-pwrite:
    - shard-tglu:         NOTRUN -> [SKIP][141] ([i915#15989]) +8 other tests skip
   [141]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-tglu-2/igt@kms_frontbuffer_tracking@fbchdr-1p-primscrn-spr-indfb-draw-pwrite.html

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

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-offscreen-pri-indfb-draw-blt:
    - shard-dg2:          NOTRUN -> [SKIP][143] ([i915#15102]) +4 other tests skip
   [143]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-dg2-7/igt@kms_frontbuffer_tracking@fbcpsr-1p-offscreen-pri-indfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-pri-indfb-multidraw:
    - shard-rkl:          NOTRUN -> [SKIP][144] ([i915#15102] / [i915#3023]) +19 other tests skip
   [144]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-8/igt@kms_frontbuffer_tracking@fbcpsr-1p-pri-indfb-multidraw.html

  * igt@kms_frontbuffer_tracking@fbcpsrhdr-1p-offscreen-pri-indfb-draw-blt:
    - shard-rkl:          NOTRUN -> [SKIP][145] ([i915#15102]) +25 other tests skip
   [145]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-4/igt@kms_frontbuffer_tracking@fbcpsrhdr-1p-offscreen-pri-indfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbcpsrhdr-2p-primscrn-cur-indfb-onoff:
    - shard-glk10:        NOTRUN -> [SKIP][146] +120 other tests skip
   [146]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-glk10/igt@kms_frontbuffer_tracking@fbcpsrhdr-2p-primscrn-cur-indfb-onoff.html

  * igt@kms_frontbuffer_tracking@fbcpsrhdr-2p-primscrn-pri-indfb-draw-blt:
    - shard-glk11:        NOTRUN -> [SKIP][147] +127 other tests skip
   [147]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-glk11/igt@kms_frontbuffer_tracking@fbcpsrhdr-2p-primscrn-pri-indfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbcpsrhdr-2p-primscrn-spr-indfb-move:
    - shard-dg2:          NOTRUN -> [SKIP][148] ([i915#15991]) +5 other tests skip
   [148]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-dg2-7/igt@kms_frontbuffer_tracking@fbcpsrhdr-2p-primscrn-spr-indfb-move.html

  * igt@kms_frontbuffer_tracking@fbcpsrhdr-2p-scndscrn-spr-indfb-draw-mmap-wc:
    - shard-tglu-1:       NOTRUN -> [SKIP][149] +46 other tests skip
   [149]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-tglu-1/igt@kms_frontbuffer_tracking@fbcpsrhdr-2p-scndscrn-spr-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@hdr-1p-primscrn-cur-indfb-draw-blt:
    - shard-rkl:          [PASS][150] -> [SKIP][151] ([i915#15989]) +8 other tests skip
   [150]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-6/igt@kms_frontbuffer_tracking@hdr-1p-primscrn-cur-indfb-draw-blt.html
   [151]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-4/igt@kms_frontbuffer_tracking@hdr-1p-primscrn-cur-indfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@hdr-1p-primscrn-pri-shrfb-draw-mmap-cpu:
    - shard-dg2:          NOTRUN -> [SKIP][152] ([i915#15989]) +2 other tests skip
   [152]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-dg2-7/igt@kms_frontbuffer_tracking@hdr-1p-primscrn-pri-shrfb-draw-mmap-cpu.html
    - shard-rkl:          NOTRUN -> [SKIP][153] ([i915#15989]) +14 other tests skip
   [153]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-8/igt@kms_frontbuffer_tracking@hdr-1p-primscrn-pri-shrfb-draw-mmap-cpu.html

  * igt@kms_frontbuffer_tracking@hdr-2p-primscrn-shrfb-plflip-blt:
    - shard-tglu:         NOTRUN -> [SKIP][154] +32 other tests skip
   [154]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-tglu-10/igt@kms_frontbuffer_tracking@hdr-2p-primscrn-shrfb-plflip-blt.html

  * igt@kms_frontbuffer_tracking@hdr-2p-scndscrn-spr-indfb-draw-mmap-gtt:
    - shard-glk:          [PASS][155] -> [SKIP][156] +19 other tests skip
   [155]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-glk8/igt@kms_frontbuffer_tracking@hdr-2p-scndscrn-spr-indfb-draw-mmap-gtt.html
   [156]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-glk6/igt@kms_frontbuffer_tracking@hdr-2p-scndscrn-spr-indfb-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@psr-1p-primscrn-spr-indfb-draw-mmap-cpu:
    - shard-tglu:         NOTRUN -> [SKIP][157] ([i915#15102]) +14 other tests skip
   [157]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-tglu-10/igt@kms_frontbuffer_tracking@psr-1p-primscrn-spr-indfb-draw-mmap-cpu.html

  * igt@kms_frontbuffer_tracking@psr-2p-primscrn-pri-indfb-draw-pwrite:
    - shard-dg2:          NOTRUN -> [SKIP][158] ([i915#15991] / [i915#5354]) +3 other tests skip
   [158]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-dg2-7/igt@kms_frontbuffer_tracking@psr-2p-primscrn-pri-indfb-draw-pwrite.html

  * igt@kms_frontbuffer_tracking@psr-rgb565-draw-mmap-wc:
    - shard-dg2:          NOTRUN -> [SKIP][159] ([i915#15990] / [i915#8708])
   [159]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-dg2-7/igt@kms_frontbuffer_tracking@psr-rgb565-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@psrhdr-1p-offscreen-pri-indfb-draw-mmap-wc:
    - shard-tglu-1:       NOTRUN -> [SKIP][160] ([i915#15102]) +24 other tests skip
   [160]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-tglu-1/igt@kms_frontbuffer_tracking@psrhdr-1p-offscreen-pri-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@psrhdr-1p-offscreen-pri-shrfb-draw-mmap-wc:
    - shard-dg2:          NOTRUN -> [SKIP][161] ([i915#15990])
   [161]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-dg2-7/igt@kms_frontbuffer_tracking@psrhdr-1p-offscreen-pri-shrfb-draw-mmap-wc.html

  * igt@kms_hdr@static-toggle-suspend:
    - shard-rkl:          NOTRUN -> [SKIP][162] ([i915#3555] / [i915#8228])
   [162]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-5/igt@kms_hdr@static-toggle-suspend.html

  * igt@kms_joiner@basic-force-big-joiner:
    - shard-tglu:         NOTRUN -> [SKIP][163] ([i915#15459])
   [163]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-tglu-10/igt@kms_joiner@basic-force-big-joiner.html

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

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

  * igt@kms_plane@pixel-format-4-tiled-lnl-ccs-modifier-source-clamping:
    - shard-rkl:          NOTRUN -> [SKIP][166] ([i915#15709]) +2 other tests skip
   [166]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-8/igt@kms_plane@pixel-format-4-tiled-lnl-ccs-modifier-source-clamping.html

  * igt@kms_plane@pixel-format-4-tiled-mtl-rc-ccs-cc-modifier:
    - shard-dg2:          NOTRUN -> [SKIP][167] ([i915#15709]) +1 other test skip
   [167]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-dg2-7/igt@kms_plane@pixel-format-4-tiled-mtl-rc-ccs-cc-modifier.html

  * igt@kms_plane@pixel-format-y-tiled-ccs-modifier:
    - shard-tglu-1:       NOTRUN -> [SKIP][168] ([i915#15709]) +1 other test skip
   [168]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-tglu-1/igt@kms_plane@pixel-format-y-tiled-ccs-modifier.html

  * igt@kms_plane@pixel-format-y-tiled-gen12-mc-ccs-modifier:
    - shard-tglu:         NOTRUN -> [SKIP][169] ([i915#15709])
   [169]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-tglu-10/igt@kms_plane@pixel-format-y-tiled-gen12-mc-ccs-modifier.html

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

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

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

  * igt@kms_plane_alpha_blend@alpha-basic:
    - shard-glk:          NOTRUN -> [FAIL][173] ([i915#12178])
   [173]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-glk2/igt@kms_plane_alpha_blend@alpha-basic.html

  * igt@kms_plane_alpha_blend@alpha-basic@pipe-a-hdmi-a-1:
    - shard-glk:          NOTRUN -> [FAIL][174] ([i915#7862]) +1 other test fail
   [174]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-glk2/igt@kms_plane_alpha_blend@alpha-basic@pipe-a-hdmi-a-1.html

  * igt@kms_plane_alpha_blend@alpha-opaque-fb:
    - shard-glk10:        NOTRUN -> [FAIL][175] ([i915#10647] / [i915#12169])
   [175]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/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][176] ([i915#10647]) +1 other test fail
   [176]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-glk10/igt@kms_plane_alpha_blend@alpha-opaque-fb@pipe-c-hdmi-a-1.html

  * igt@kms_plane_multiple@2x-tiling-yf:
    - shard-rkl:          NOTRUN -> [SKIP][177] ([i915#13958])
   [177]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-4/igt@kms_plane_multiple@2x-tiling-yf.html

  * igt@kms_plane_multiple@tiling-4:
    - shard-tglu:         NOTRUN -> [SKIP][178] ([i915#14259])
   [178]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-tglu-10/igt@kms_plane_multiple@tiling-4.html

  * igt@kms_plane_scaling@intel-max-src-size:
    - shard-dg2:          NOTRUN -> [SKIP][179] ([i915#6953] / [i915#9423])
   [179]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-dg2-7/igt@kms_plane_scaling@intel-max-src-size.html
    - shard-rkl:          NOTRUN -> [SKIP][180] ([i915#6953])
   [180]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-8/igt@kms_plane_scaling@intel-max-src-size.html

  * igt@kms_plane_scaling@plane-downscale-factor-0-5-with-rotation@pipe-d:
    - shard-tglu-1:       NOTRUN -> [SKIP][181] ([i915#15329]) +4 other tests skip
   [181]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-tglu-1/igt@kms_plane_scaling@plane-downscale-factor-0-5-with-rotation@pipe-d.html

  * igt@kms_pm_backlight@bad-brightness:
    - shard-dg2:          NOTRUN -> [SKIP][182] ([i915#12343] / [i915#5354])
   [182]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-dg2-7/igt@kms_pm_backlight@bad-brightness.html
    - shard-rkl:          NOTRUN -> [SKIP][183] ([i915#12343] / [i915#5354])
   [183]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-8/igt@kms_pm_backlight@bad-brightness.html
    - shard-tglu:         NOTRUN -> [SKIP][184] ([i915#12343] / [i915#9812])
   [184]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-tglu-2/igt@kms_pm_backlight@bad-brightness.html

  * igt@kms_pm_backlight@fade-with-dpms:
    - shard-tglu-1:       NOTRUN -> [SKIP][185] ([i915#12343] / [i915#9812])
   [185]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-tglu-1/igt@kms_pm_backlight@fade-with-dpms.html

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

  * igt@kms_pm_dc@dc9-dpms:
    - shard-rkl:          NOTRUN -> [SKIP][187] ([i915#15739])
   [187]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-8/igt@kms_pm_dc@dc9-dpms.html
    - shard-tglu:         NOTRUN -> [SKIP][188] ([i915#15739])
   [188]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-tglu-2/igt@kms_pm_dc@dc9-dpms.html

  * igt@kms_pm_rpm@dpms-lpsp:
    - shard-rkl:          NOTRUN -> [SKIP][189] ([i915#15073])
   [189]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-4/igt@kms_pm_rpm@dpms-lpsp.html

  * igt@kms_pm_rpm@modeset-lpsp-stress:
    - shard-dg1:          [PASS][190] -> [SKIP][191] ([i915#15073]) +2 other tests skip
   [190]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-dg1-14/igt@kms_pm_rpm@modeset-lpsp-stress.html
   [191]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-dg1-16/igt@kms_pm_rpm@modeset-lpsp-stress.html

  * igt@kms_pm_rpm@modeset-non-lpsp:
    - shard-dg2:          [PASS][192] -> [SKIP][193] ([i915#15073]) +2 other tests skip
   [192]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-dg2-7/igt@kms_pm_rpm@modeset-non-lpsp.html
   [193]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-dg2-4/igt@kms_pm_rpm@modeset-non-lpsp.html
    - shard-rkl:          [PASS][194] -> [SKIP][195] ([i915#15073]) +1 other test skip
   [194]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-7/igt@kms_pm_rpm@modeset-non-lpsp.html
   [195]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-5/igt@kms_pm_rpm@modeset-non-lpsp.html

  * igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait:
    - shard-tglu-1:       NOTRUN -> [SKIP][196] ([i915#15073])
   [196]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-tglu-1/igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait.html

  * igt@kms_prime@basic-crc-hybrid:
    - shard-rkl:          NOTRUN -> [SKIP][197] ([i915#6524])
   [197]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-4/igt@kms_prime@basic-crc-hybrid.html

  * igt@kms_psr2_sf@fbc-pr-overlay-plane-move-continuous-exceed-fully-sf:
    - shard-glk10:        NOTRUN -> [SKIP][198] ([i915#11520]) +2 other tests skip
   [198]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-glk10/igt@kms_psr2_sf@fbc-pr-overlay-plane-move-continuous-exceed-fully-sf.html

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

  * igt@kms_psr2_sf@fbc-psr2-plane-move-sf-dmg-area:
    - shard-tglu:         NOTRUN -> [SKIP][200] ([i915#11520])
   [200]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-tglu-10/igt@kms_psr2_sf@fbc-psr2-plane-move-sf-dmg-area.html

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

  * igt@kms_psr2_sf@psr2-cursor-plane-move-continuous-sf:
    - shard-glk:          NOTRUN -> [SKIP][202] ([i915#11520]) +4 other tests skip
   [202]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-glk2/igt@kms_psr2_sf@psr2-cursor-plane-move-continuous-sf.html

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

  * igt@kms_psr2_su@frontbuffer-xrgb8888:
    - shard-tglu:         NOTRUN -> [SKIP][204] ([i915#9683])
   [204]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-tglu-10/igt@kms_psr2_su@frontbuffer-xrgb8888.html

  * igt@kms_psr2_su@page_flip-nv12:
    - shard-tglu-1:       NOTRUN -> [SKIP][205] ([i915#9683])
   [205]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-tglu-1/igt@kms_psr2_su@page_flip-nv12.html

  * igt@kms_psr2_su@page_flip-xrgb8888:
    - shard-rkl:          NOTRUN -> [SKIP][206] ([i915#9683])
   [206]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-8/igt@kms_psr2_su@page_flip-xrgb8888.html

  * igt@kms_psr@fbc-psr2-cursor-blt:
    - shard-tglu-1:       NOTRUN -> [SKIP][207] ([i915#9732]) +8 other tests skip
   [207]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-tglu-1/igt@kms_psr@fbc-psr2-cursor-blt.html

  * igt@kms_psr@psr-cursor-render:
    - shard-rkl:          NOTRUN -> [SKIP][208] ([i915#1072] / [i915#9732]) +17 other tests skip
   [208]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-8/igt@kms_psr@psr-cursor-render.html

  * igt@kms_psr@psr2-primary-mmap-gtt:
    - shard-dg2:          NOTRUN -> [SKIP][209] ([i915#1072] / [i915#9732]) +2 other tests skip
   [209]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-dg2-7/igt@kms_psr@psr2-primary-mmap-gtt.html
    - shard-tglu:         NOTRUN -> [SKIP][210] ([i915#9732]) +5 other tests skip
   [210]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-tglu-2/igt@kms_psr@psr2-primary-mmap-gtt.html

  * igt@kms_rotation_crc@multiplane-rotation-cropping-top:
    - shard-glk10:        NOTRUN -> [INCOMPLETE][211] ([i915#15492] / [i915#16184])
   [211]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-glk10/igt@kms_rotation_crc@multiplane-rotation-cropping-top.html

  * igt@kms_rotation_crc@primary-yf-tiled-reflect-x-0:
    - shard-rkl:          NOTRUN -> [SKIP][212] ([i915#5289])
   [212]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-8/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-0.html

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

  * igt@kms_selftest@drm_framebuffer:
    - shard-glk:          NOTRUN -> [ABORT][214] ([i915#13179]) +1 other test abort
   [214]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-glk4/igt@kms_selftest@drm_framebuffer.html

  * igt@kms_vblank@ts-continuation-dpms-suspend@pipe-a-hdmi-a-1:
    - shard-glk:          NOTRUN -> [INCOMPLETE][215] ([i915#12276]) +1 other test incomplete
   [215]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-glk6/igt@kms_vblank@ts-continuation-dpms-suspend@pipe-a-hdmi-a-1.html

  * igt@kms_vrr@flip-dpms:
    - shard-rkl:          NOTRUN -> [SKIP][216] ([i915#15243] / [i915#3555])
   [216]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-1/igt@kms_vrr@flip-dpms.html

  * igt@perf@blocking@0-rcs0:
    - shard-tglu:         [PASS][217] -> [FAIL][218] ([i915#10538]) +1 other test fail
   [217]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-tglu-4/igt@perf@blocking@0-rcs0.html
   [218]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-tglu-10/igt@perf@blocking@0-rcs0.html

  * igt@perf@unprivileged-single-ctx-counters:
    - shard-rkl:          NOTRUN -> [SKIP][219] ([i915#2433])
   [219]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-5/igt@perf@unprivileged-single-ctx-counters.html

  * igt@perf_pmu@rc6@other-idle-gt0:
    - shard-tglu:         NOTRUN -> [SKIP][220] ([i915#8516])
   [220]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-tglu-10/igt@perf_pmu@rc6@other-idle-gt0.html

  * igt@prime_udl@share-import-addfb:
    - shard-rkl:          NOTRUN -> [SKIP][221] ([i915#16420])
   [221]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-5/igt@prime_udl@share-import-addfb.html

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

  
#### Possible fixes ####

  * igt@gem_workarounds@suspend-resume-context:
    - shard-rkl:          [INCOMPLETE][223] ([i915#13356]) -> [PASS][224]
   [223]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-3/igt@gem_workarounds@suspend-resume-context.html
   [224]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-8/igt@gem_workarounds@suspend-resume-context.html

  * igt@gen9_exec_parse@allowed-single:
    - shard-glk:          [ABORT][225] ([i915#5566]) -> [PASS][226]
   [225]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-glk2/igt@gen9_exec_parse@allowed-single.html
   [226]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-glk6/igt@gen9_exec_parse@allowed-single.html

  * igt@i915_pm_rpm@system-suspend-execbuf:
    - shard-glk:          [INCOMPLETE][227] ([i915#13356] / [i915#15172]) -> [PASS][228]
   [227]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-glk8/igt@i915_pm_rpm@system-suspend-execbuf.html
   [228]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-glk4/igt@i915_pm_rpm@system-suspend-execbuf.html

  * igt@kms_big_fb@linear-max-hw-stride-64bpp-rotate-180:
    - shard-dg1:          [DMESG-WARN][229] ([i915#4391] / [i915#4423]) -> [PASS][230]
   [229]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-dg1-14/igt@kms_big_fb@linear-max-hw-stride-64bpp-rotate-180.html
   [230]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-dg1-16/igt@kms_big_fb@linear-max-hw-stride-64bpp-rotate-180.html

  * igt@kms_fbcon_fbt@fbc-suspend:
    - shard-rkl:          [INCOMPLETE][231] ([i915#9878]) -> [PASS][232]
   [231]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-4/igt@kms_fbcon_fbt@fbc-suspend.html
   [232]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-8/igt@kms_fbcon_fbt@fbc-suspend.html

  * igt@kms_flip@flip-vs-expired-vblank@c-hdmi-a3:
    - shard-dg2:          [FAIL][233] ([i915#13027]) -> [PASS][234] +1 other test pass
   [233]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-dg2-6/igt@kms_flip@flip-vs-expired-vblank@c-hdmi-a3.html
   [234]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-dg2-1/igt@kms_flip@flip-vs-expired-vblank@c-hdmi-a3.html

  * igt@kms_frontbuffer_tracking@fbchdr-tiling-linear:
    - shard-rkl:          [SKIP][235] ([i915#15989]) -> [PASS][236] +14 other tests pass
   [235]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-7/igt@kms_frontbuffer_tracking@fbchdr-tiling-linear.html
   [236]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-1/igt@kms_frontbuffer_tracking@fbchdr-tiling-linear.html

  * igt@kms_frontbuffer_tracking@hdr-1p-primscrn-shrfb-msflip-blt:
    - shard-glk:          [SKIP][237] -> [PASS][238] +18 other tests pass
   [237]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-glk6/igt@kms_frontbuffer_tracking@hdr-1p-primscrn-shrfb-msflip-blt.html
   [238]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-glk8/igt@kms_frontbuffer_tracking@hdr-1p-primscrn-shrfb-msflip-blt.html

  * igt@kms_frontbuffer_tracking@hdr-shrfb-scaledprimary:
    - shard-dg2:          [SKIP][239] ([i915#15989]) -> [PASS][240] +6 other tests pass
   [239]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-dg2-5/igt@kms_frontbuffer_tracking@hdr-shrfb-scaledprimary.html
   [240]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-dg2-10/igt@kms_frontbuffer_tracking@hdr-shrfb-scaledprimary.html

  * igt@kms_plane@plane-panning-bottom-right-suspend@pipe-a:
    - shard-rkl:          [INCOMPLETE][241] ([i915#14412]) -> [PASS][242] +1 other test pass
   [241]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-3/igt@kms_plane@plane-panning-bottom-right-suspend@pipe-a.html
   [242]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-5/igt@kms_plane@plane-panning-bottom-right-suspend@pipe-a.html

  * igt@kms_pm_lpsp@kms-lpsp:
    - shard-dg2:          [SKIP][243] ([i915#9340]) -> [PASS][244]
   [243]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-dg2-7/igt@kms_pm_lpsp@kms-lpsp.html
   [244]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-dg2-4/igt@kms_pm_lpsp@kms-lpsp.html

  * igt@kms_pm_rpm@i2c:
    - shard-dg1:          [DMESG-WARN][245] ([i915#4423]) -> [PASS][246] +1 other test pass
   [245]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-dg1-16/igt@kms_pm_rpm@i2c.html
   [246]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-dg1-15/igt@kms_pm_rpm@i2c.html

  * igt@kms_pm_rpm@modeset-lpsp-stress:
    - shard-rkl:          [SKIP][247] ([i915#15073]) -> [PASS][248] +1 other test pass
   [247]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-4/igt@kms_pm_rpm@modeset-lpsp-stress.html
   [248]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-8/igt@kms_pm_rpm@modeset-lpsp-stress.html

  * igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait:
    - shard-dg1:          [SKIP][249] ([i915#15073]) -> [PASS][250] +1 other test pass
   [249]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-dg1-15/igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait.html
   [250]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-dg1-12/igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait.html

  * igt@kms_vblank@ts-continuation-dpms-suspend:
    - shard-rkl:          [INCOMPLETE][251] ([i915#12276]) -> [PASS][252] +1 other test pass
   [251]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-6/igt@kms_vblank@ts-continuation-dpms-suspend.html
   [252]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-4/igt@kms_vblank@ts-continuation-dpms-suspend.html

  * igt@perf_pmu@busy-double-start@rcs0:
    - shard-mtlp:         [FAIL][253] ([i915#4349]) -> [PASS][254]
   [253]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-mtlp-4/igt@perf_pmu@busy-double-start@rcs0.html
   [254]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-mtlp-8/igt@perf_pmu@busy-double-start@rcs0.html

  
#### Warnings ####

  * igt@gem_close_race@multigpu-basic-threads:
    - shard-rkl:          [SKIP][255] ([i915#14544] / [i915#7697]) -> [SKIP][256] ([i915#7697])
   [255]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-6/igt@gem_close_race@multigpu-basic-threads.html
   [256]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-7/igt@gem_close_race@multigpu-basic-threads.html

  * igt@gem_ctx_sseu@engines:
    - shard-rkl:          [SKIP][257] ([i915#280]) -> [SKIP][258] ([i915#14544] / [i915#280])
   [257]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-8/igt@gem_ctx_sseu@engines.html
   [258]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-6/igt@gem_ctx_sseu@engines.html

  * igt@gem_exec_balancer@parallel-ordering:
    - shard-rkl:          [SKIP][259] ([i915#14544] / [i915#4525]) -> [SKIP][260] ([i915#4525])
   [259]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-6/igt@gem_exec_balancer@parallel-ordering.html
   [260]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-7/igt@gem_exec_balancer@parallel-ordering.html

  * igt@gem_exec_reloc@basic-wc-gtt:
    - shard-rkl:          [SKIP][261] ([i915#3281]) -> [SKIP][262] ([i915#14544] / [i915#3281]) +1 other test skip
   [261]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-5/igt@gem_exec_reloc@basic-wc-gtt.html
   [262]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-6/igt@gem_exec_reloc@basic-wc-gtt.html

  * igt@gem_exec_reloc@basic-wc-gtt-active:
    - shard-rkl:          [SKIP][263] ([i915#14544] / [i915#3281]) -> [SKIP][264] ([i915#3281]) +1 other test skip
   [263]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-6/igt@gem_exec_reloc@basic-wc-gtt-active.html
   [264]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-7/igt@gem_exec_reloc@basic-wc-gtt-active.html

  * igt@gem_lmem_swapping@heavy-verify-multi-ccs:
    - shard-rkl:          [SKIP][265] ([i915#14544] / [i915#4613]) -> [SKIP][266] ([i915#4613])
   [265]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-6/igt@gem_lmem_swapping@heavy-verify-multi-ccs.html
   [266]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-7/igt@gem_lmem_swapping@heavy-verify-multi-ccs.html

  * igt@gem_set_tiling_vs_pwrite:
    - shard-rkl:          [SKIP][267] ([i915#3282]) -> [SKIP][268] ([i915#14544] / [i915#3282]) +2 other tests skip
   [267]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-5/igt@gem_set_tiling_vs_pwrite.html
   [268]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-6/igt@gem_set_tiling_vs_pwrite.html

  * igt@gem_userptr_blits@access-control:
    - shard-rkl:          [SKIP][269] ([i915#14544] / [i915#3297]) -> [SKIP][270] ([i915#3297])
   [269]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-6/igt@gem_userptr_blits@access-control.html
   [270]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-7/igt@gem_userptr_blits@access-control.html

  * igt@gen9_exec_parse@batch-invalid-length:
    - shard-rkl:          [SKIP][271] ([i915#2527]) -> [SKIP][272] ([i915#14544] / [i915#2527])
   [271]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-8/igt@gen9_exec_parse@batch-invalid-length.html
   [272]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-6/igt@gen9_exec_parse@batch-invalid-length.html

  * igt@gen9_exec_parse@batch-without-end:
    - shard-rkl:          [SKIP][273] ([i915#14544] / [i915#2527]) -> [SKIP][274] ([i915#2527])
   [273]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-6/igt@gen9_exec_parse@batch-without-end.html
   [274]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-7/igt@gen9_exec_parse@batch-without-end.html

  * igt@i915_pm_freq_api@freq-reset-multiple:
    - shard-rkl:          [SKIP][275] ([i915#14544] / [i915#8399]) -> [SKIP][276] ([i915#8399])
   [275]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-6/igt@i915_pm_freq_api@freq-reset-multiple.html
   [276]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-7/igt@i915_pm_freq_api@freq-reset-multiple.html

  * igt@i915_pm_freq_api@freq-suspend:
    - shard-rkl:          [SKIP][277] ([i915#8399]) -> [SKIP][278] ([i915#14544] / [i915#8399])
   [277]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-8/igt@i915_pm_freq_api@freq-suspend.html
   [278]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-6/igt@i915_pm_freq_api@freq-suspend.html

  * igt@kms_big_fb@4-tiled-16bpp-rotate-0:
    - shard-rkl:          [SKIP][279] ([i915#5286]) -> [SKIP][280] ([i915#14544] / [i915#5286]) +1 other test skip
   [279]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-8/igt@kms_big_fb@4-tiled-16bpp-rotate-0.html
   [280]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-6/igt@kms_big_fb@4-tiled-16bpp-rotate-0.html

  * igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-async-flip:
    - shard-rkl:          [SKIP][281] ([i915#14544] / [i915#5286]) -> [SKIP][282] ([i915#5286])
   [281]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-6/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-async-flip.html
   [282]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-7/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-async-flip.html

  * igt@kms_big_fb@linear-8bpp-rotate-270:
    - shard-rkl:          [SKIP][283] ([i915#14544] / [i915#3638]) -> [SKIP][284] ([i915#3638]) +1 other test skip
   [283]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-6/igt@kms_big_fb@linear-8bpp-rotate-270.html
   [284]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-7/igt@kms_big_fb@linear-8bpp-rotate-270.html

  * igt@kms_ccs@bad-aux-stride-4-tiled-mtl-mc-ccs@pipe-a-hdmi-a-2:
    - shard-rkl:          [SKIP][285] ([i915#14544] / [i915#6095]) -> [SKIP][286] ([i915#6095]) +12 other tests skip
   [285]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-6/igt@kms_ccs@bad-aux-stride-4-tiled-mtl-mc-ccs@pipe-a-hdmi-a-2.html
   [286]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-7/igt@kms_ccs@bad-aux-stride-4-tiled-mtl-mc-ccs@pipe-a-hdmi-a-2.html

  * igt@kms_ccs@crc-sprite-planes-basic-4-tiled-mtl-mc-ccs:
    - shard-rkl:          [SKIP][287] ([i915#14098] / [i915#14544] / [i915#6095]) -> [SKIP][288] ([i915#14098] / [i915#6095]) +13 other tests skip
   [287]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-6/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-mtl-mc-ccs.html
   [288]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-7/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-mtl-mc-ccs.html

  * igt@kms_ccs@missing-ccs-buffer-y-tiled-ccs:
    - shard-rkl:          [SKIP][289] ([i915#14098] / [i915#6095]) -> [SKIP][290] ([i915#14098] / [i915#14544] / [i915#6095]) +3 other tests skip
   [289]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-5/igt@kms_ccs@missing-ccs-buffer-y-tiled-ccs.html
   [290]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-6/igt@kms_ccs@missing-ccs-buffer-y-tiled-ccs.html

  * igt@kms_cdclk@mode-transition-all-outputs:
    - shard-rkl:          [SKIP][291] ([i915#14544] / [i915#3742]) -> [SKIP][292] ([i915#3742])
   [291]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-6/igt@kms_cdclk@mode-transition-all-outputs.html
   [292]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-7/igt@kms_cdclk@mode-transition-all-outputs.html

  * igt@kms_chamelium_color_pipeline@plane-lut1d-lut1d:
    - shard-rkl:          [SKIP][293] ([i915#14544] / [i915#16471]) -> [SKIP][294] ([i915#16471])
   [293]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-6/igt@kms_chamelium_color_pipeline@plane-lut1d-lut1d.html
   [294]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-7/igt@kms_chamelium_color_pipeline@plane-lut1d-lut1d.html

  * igt@kms_chamelium_frames@dp-frame-dump:
    - shard-rkl:          [SKIP][295] ([i915#11151] / [i915#7828]) -> [SKIP][296] ([i915#11151] / [i915#14544] / [i915#7828])
   [295]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-8/igt@kms_chamelium_frames@dp-frame-dump.html
   [296]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-6/igt@kms_chamelium_frames@dp-frame-dump.html

  * igt@kms_chamelium_hpd@hdmi-hpd-for-each-pipe:
    - shard-rkl:          [SKIP][297] ([i915#11151] / [i915#14544] / [i915#7828]) -> [SKIP][298] ([i915#11151] / [i915#7828])
   [297]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-6/igt@kms_chamelium_hpd@hdmi-hpd-for-each-pipe.html
   [298]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-7/igt@kms_chamelium_hpd@hdmi-hpd-for-each-pipe.html

  * igt@kms_content_protection@dp-mst-lic-type-1:
    - shard-rkl:          [SKIP][299] ([i915#15330] / [i915#3116]) -> [SKIP][300] ([i915#14544] / [i915#15330] / [i915#3116])
   [299]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-8/igt@kms_content_protection@dp-mst-lic-type-1.html
   [300]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-6/igt@kms_content_protection@dp-mst-lic-type-1.html

  * igt@kms_content_protection@dp-mst-type-0-hdcp14:
    - shard-rkl:          [SKIP][301] ([i915#14544] / [i915#15330]) -> [SKIP][302] ([i915#15330])
   [301]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-6/igt@kms_content_protection@dp-mst-type-0-hdcp14.html
   [302]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-4/igt@kms_content_protection@dp-mst-type-0-hdcp14.html

  * igt@kms_cursor_crc@cursor-rapid-movement-512x170:
    - shard-rkl:          [SKIP][303] ([i915#13049] / [i915#14544]) -> [SKIP][304] ([i915#13049])
   [303]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-6/igt@kms_cursor_crc@cursor-rapid-movement-512x170.html
   [304]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-7/igt@kms_cursor_crc@cursor-rapid-movement-512x170.html

  * igt@kms_cursor_crc@cursor-rapid-movement-512x512:
    - shard-dg2:          [SKIP][305] ([i915#13049]) -> [SKIP][306] ([i915#13049] / [i915#3359])
   [305]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-dg2-5/igt@kms_cursor_crc@cursor-rapid-movement-512x512.html
   [306]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-dg2-10/igt@kms_cursor_crc@cursor-rapid-movement-512x512.html

  * igt@kms_cursor_legacy@2x-flip-vs-cursor-legacy:
    - shard-rkl:          [SKIP][307] ([i915#14544]) -> [SKIP][308] +22 other tests skip
   [307]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-6/igt@kms_cursor_legacy@2x-flip-vs-cursor-legacy.html
   [308]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-7/igt@kms_cursor_legacy@2x-flip-vs-cursor-legacy.html

  * igt@kms_cursor_legacy@modeset-atomic-cursor-hotspot:
    - shard-rkl:          [SKIP][309] ([i915#9067]) -> [SKIP][310] ([i915#14544] / [i915#9067])
   [309]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-5/igt@kms_cursor_legacy@modeset-atomic-cursor-hotspot.html
   [310]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-6/igt@kms_cursor_legacy@modeset-atomic-cursor-hotspot.html

  * igt@kms_fbcon_fbt@psr-suspend:
    - shard-rkl:          [SKIP][311] ([i915#14544] / [i915#3955]) -> [SKIP][312] ([i915#3955])
   [311]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-6/igt@kms_fbcon_fbt@psr-suspend.html
   [312]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-7/igt@kms_fbcon_fbt@psr-suspend.html

  * igt@kms_feature_discovery@dp-mst:
    - shard-rkl:          [SKIP][313] ([i915#14544] / [i915#9337]) -> [SKIP][314] ([i915#9337])
   [313]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-6/igt@kms_feature_discovery@dp-mst.html
   [314]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-7/igt@kms_feature_discovery@dp-mst.html

  * igt@kms_flip@2x-flip-vs-fences-interruptible:
    - shard-rkl:          [SKIP][315] ([i915#14544] / [i915#9934]) -> [SKIP][316] ([i915#9934]) +1 other test skip
   [315]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-6/igt@kms_flip@2x-flip-vs-fences-interruptible.html
   [316]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-7/igt@kms_flip@2x-flip-vs-fences-interruptible.html

  * igt@kms_flip@2x-plain-flip-ts-check:
    - shard-rkl:          [SKIP][317] ([i915#9934]) -> [SKIP][318] ([i915#14544] / [i915#9934]) +1 other test skip
   [317]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-8/igt@kms_flip@2x-plain-flip-ts-check.html
   [318]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-6/igt@kms_flip@2x-plain-flip-ts-check.html

  * igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-16bpp-4tile-upscaling:
    - shard-rkl:          [SKIP][319] ([i915#14544] / [i915#15643]) -> [SKIP][320] ([i915#15643]) +2 other tests skip
   [319]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-6/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-16bpp-4tile-upscaling.html
   [320]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-4/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-16bpp-4tile-upscaling.html

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-draw-mmap-wc:
    - shard-rkl:          [SKIP][321] ([i915#1825]) -> [SKIP][322] ([i915#14544] / [i915#1825])
   [321]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-5/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-draw-mmap-wc.html
   [322]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-6/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-offscreen-pri-indfb-draw-mmap-gtt:
    - shard-rkl:          [SKIP][323] ([i915#15102]) -> [SKIP][324] ([i915#14544] / [i915#15102]) +9 other tests skip
   [323]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-8/igt@kms_frontbuffer_tracking@fbcpsr-1p-offscreen-pri-indfb-draw-mmap-gtt.html
   [324]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-6/igt@kms_frontbuffer_tracking@fbcpsr-1p-offscreen-pri-indfb-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-pri-shrfb-draw-mmap-gtt:
    - shard-rkl:          [SKIP][325] ([i915#14544] / [i915#1825]) -> [SKIP][326] ([i915#1825]) +1 other test skip
   [325]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-6/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-pri-shrfb-draw-mmap-gtt.html
   [326]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-7/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-pri-shrfb-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-rgb101010-draw-mmap-gtt:
    - shard-dg1:          [SKIP][327] ([i915#15990] / [i915#8708]) -> [SKIP][328] ([i915#15990] / [i915#4423] / [i915#8708])
   [327]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-dg1-18/igt@kms_frontbuffer_tracking@fbcpsr-rgb101010-draw-mmap-gtt.html
   [328]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-dg1-19/igt@kms_frontbuffer_tracking@fbcpsr-rgb101010-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-suspend:
    - shard-dg2:          [SKIP][329] ([i915#15102]) -> [SKIP][330] ([i915#10433] / [i915#15102]) +4 other tests skip
   [329]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-dg2-7/igt@kms_frontbuffer_tracking@fbcpsr-suspend.html
   [330]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-dg2-4/igt@kms_frontbuffer_tracking@fbcpsr-suspend.html

  * igt@kms_frontbuffer_tracking@fbcpsrhdr-2p-scndscrn-pri-indfb-draw-mmap-cpu:
    - shard-rkl:          [SKIP][331] -> [SKIP][332] ([i915#14544]) +19 other tests skip
   [331]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-5/igt@kms_frontbuffer_tracking@fbcpsrhdr-2p-scndscrn-pri-indfb-draw-mmap-cpu.html
   [332]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-6/igt@kms_frontbuffer_tracking@fbcpsrhdr-2p-scndscrn-pri-indfb-draw-mmap-cpu.html

  * igt@kms_frontbuffer_tracking@hdr-suspend:
    - shard-glk:          [INCOMPLETE][333] ([i915#16056]) -> [SKIP][334]
   [333]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-glk8/igt@kms_frontbuffer_tracking@hdr-suspend.html
   [334]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-glk6/igt@kms_frontbuffer_tracking@hdr-suspend.html

  * igt@kms_frontbuffer_tracking@psr-modesetfrombusy:
    - shard-rkl:          [SKIP][335] ([i915#15102] / [i915#3023]) -> [SKIP][336] ([i915#14544] / [i915#15102] / [i915#3023]) +2 other tests skip
   [335]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-8/igt@kms_frontbuffer_tracking@psr-modesetfrombusy.html
   [336]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-6/igt@kms_frontbuffer_tracking@psr-modesetfrombusy.html

  * igt@kms_frontbuffer_tracking@psr-rgb101010-draw-render:
    - shard-rkl:          [SKIP][337] ([i915#14544] / [i915#15102] / [i915#3023]) -> [SKIP][338] ([i915#15102] / [i915#3023]) +6 other tests skip
   [337]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-6/igt@kms_frontbuffer_tracking@psr-rgb101010-draw-render.html
   [338]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-7/igt@kms_frontbuffer_tracking@psr-rgb101010-draw-render.html

  * igt@kms_frontbuffer_tracking@psrhdr-1p-primscrn-shrfb-msflip-blt:
    - shard-rkl:          [SKIP][339] ([i915#14544] / [i915#15102]) -> [SKIP][340] ([i915#15102]) +6 other tests skip
   [339]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-6/igt@kms_frontbuffer_tracking@psrhdr-1p-primscrn-shrfb-msflip-blt.html
   [340]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-7/igt@kms_frontbuffer_tracking@psrhdr-1p-primscrn-shrfb-msflip-blt.html

  * igt@kms_mst@mst-suspend-read-crc:
    - shard-rkl:          [SKIP][341] ([i915#14544] / [i915#16451]) -> [SKIP][342] ([i915#16451])
   [341]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-6/igt@kms_mst@mst-suspend-read-crc.html
   [342]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-7/igt@kms_mst@mst-suspend-read-crc.html

  * igt@kms_plane@pixel-format-4-tiled-bmg-ccs-modifier:
    - shard-rkl:          [SKIP][343] ([i915#14544] / [i915#15709]) -> [SKIP][344] ([i915#15709])
   [343]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-6/igt@kms_plane@pixel-format-4-tiled-bmg-ccs-modifier.html
   [344]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-7/igt@kms_plane@pixel-format-4-tiled-bmg-ccs-modifier.html

  * igt@kms_pm_backlight@fade-with-dpms:
    - shard-rkl:          [SKIP][345] ([i915#12343] / [i915#14544] / [i915#5354]) -> [SKIP][346] ([i915#12343] / [i915#5354])
   [345]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-6/igt@kms_pm_backlight@fade-with-dpms.html
   [346]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-7/igt@kms_pm_backlight@fade-with-dpms.html

  * igt@kms_pm_lpsp@kms-lpsp:
    - shard-rkl:          [SKIP][347] ([i915#9340]) -> [SKIP][348] ([i915#3828])
   [347]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-7/igt@kms_pm_lpsp@kms-lpsp.html
   [348]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-5/igt@kms_pm_lpsp@kms-lpsp.html
    - shard-dg1:          [SKIP][349] ([i915#9340]) -> [SKIP][350] ([i915#3828])
   [349]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-dg1-16/igt@kms_pm_lpsp@kms-lpsp.html
   [350]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-dg1-14/igt@kms_pm_lpsp@kms-lpsp.html

  * igt@kms_prime@basic-modeset-hybrid:
    - shard-rkl:          [SKIP][351] ([i915#6524]) -> [SKIP][352] ([i915#14544] / [i915#6524])
   [351]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-8/igt@kms_prime@basic-modeset-hybrid.html
   [352]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-6/igt@kms_prime@basic-modeset-hybrid.html

  * igt@kms_psr2_sf@fbc-pr-plane-move-sf-dmg-area:
    - shard-rkl:          [SKIP][353] ([i915#11520]) -> [SKIP][354] ([i915#11520] / [i915#14544])
   [353]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-8/igt@kms_psr2_sf@fbc-pr-plane-move-sf-dmg-area.html
   [354]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-6/igt@kms_psr2_sf@fbc-pr-plane-move-sf-dmg-area.html

  * igt@kms_psr2_sf@pr-plane-move-sf-dmg-area:
    - shard-rkl:          [SKIP][355] ([i915#11520] / [i915#14544]) -> [SKIP][356] ([i915#11520]) +1 other test skip
   [355]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-6/igt@kms_psr2_sf@pr-plane-move-sf-dmg-area.html
   [356]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-7/igt@kms_psr2_sf@pr-plane-move-sf-dmg-area.html

  * igt@kms_psr2_su@page_flip-nv12:
    - shard-rkl:          [SKIP][357] ([i915#14544] / [i915#9683]) -> [SKIP][358] ([i915#9683])
   [357]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-6/igt@kms_psr2_su@page_flip-nv12.html
   [358]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-7/igt@kms_psr2_su@page_flip-nv12.html

  * igt@kms_psr@psr-sprite-plane-move:
    - shard-rkl:          [SKIP][359] ([i915#1072] / [i915#9732]) -> [SKIP][360] ([i915#1072] / [i915#14544] / [i915#9732]) +2 other tests skip
   [359]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-8/igt@kms_psr@psr-sprite-plane-move.html
   [360]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-6/igt@kms_psr@psr-sprite-plane-move.html

  * igt@kms_psr@psr2-sprite-mmap-cpu:
    - shard-rkl:          [SKIP][361] ([i915#1072] / [i915#14544] / [i915#9732]) -> [SKIP][362] ([i915#1072] / [i915#9732]) +5 other tests skip
   [361]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-6/igt@kms_psr@psr2-sprite-mmap-cpu.html
   [362]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-7/igt@kms_psr@psr2-sprite-mmap-cpu.html

  * igt@kms_psr@psr2-sprite-plane-move:
    - shard-dg1:          [SKIP][363] ([i915#1072] / [i915#9732]) -> [SKIP][364] ([i915#1072] / [i915#4423] / [i915#9732])
   [363]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-dg1-17/igt@kms_psr@psr2-sprite-plane-move.html
   [364]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-dg1-19/igt@kms_psr@psr2-sprite-plane-move.html

  * igt@kms_rotation_crc@bad-tiling:
    - shard-dg2:          [SKIP][365] ([i915#12755] / [i915#15867]) -> [SKIP][366] ([i915#15867])
   [365]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-dg2-5/igt@kms_rotation_crc@bad-tiling.html
   [366]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-dg2-10/igt@kms_rotation_crc@bad-tiling.html

  * igt@kms_rotation_crc@primary-yf-tiled-reflect-x-180:
    - shard-rkl:          [SKIP][367] ([i915#14544] / [i915#5289]) -> [SKIP][368] ([i915#5289])
   [367]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-6/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-180.html
   [368]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-7/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-180.html

  * igt@kms_setmode@basic-clone-single-crtc:
    - shard-rkl:          [SKIP][369] ([i915#3555]) -> [SKIP][370] ([i915#14544] / [i915#3555]) +1 other test skip
   [369]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-8/igt@kms_setmode@basic-clone-single-crtc.html
   [370]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-6/igt@kms_setmode@basic-clone-single-crtc.html

  * igt@kms_setmode@clone-exclusive-crtc:
    - shard-rkl:          [SKIP][371] ([i915#14544] / [i915#3555]) -> [SKIP][372] ([i915#3555]) +1 other test skip
   [371]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-6/igt@kms_setmode@clone-exclusive-crtc.html
   [372]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-7/igt@kms_setmode@clone-exclusive-crtc.html

  * igt@kms_vrr@flip-basic-fastset:
    - shard-rkl:          [SKIP][373] ([i915#9906]) -> [SKIP][374] ([i915#14544] / [i915#9906])
   [373]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-8/igt@kms_vrr@flip-basic-fastset.html
   [374]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-6/igt@kms_vrr@flip-basic-fastset.html

  * igt@perf@mi-rpc:
    - shard-rkl:          [SKIP][375] ([i915#14544] / [i915#2434]) -> [SKIP][376] ([i915#2434])
   [375]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18777/shard-rkl-6/igt@perf@mi-rpc.html
   [376]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_169933v1/shard-rkl-7/igt@perf@mi-rpc.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#10538]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10538
  [i915#10647]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10647
  [i915#1072]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1072
  [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#12178]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12178
  [i915#12276]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12276
  [i915#12343]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12343
  [i915#12358]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12358
  [i915#12755]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12755
  [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#13179]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13179
  [i915#13356]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13356
  [i915#13363]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13363
  [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#13958]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13958
  [i915#14098]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14098
  [i915#14123]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14123
  [i915#14152]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14152
  [i915#14259]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14259
  [i915#14412]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14412
  [i915#14498]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14498
  [i915#14544]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14544
  [i915#14586]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14586
  [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#15172]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15172
  [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#15459]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15459
  [i915#15492]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15492
  [i915#15542]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15542
  [i915#15582]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15582
  [i915#15643]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15643
  [i915#15709]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15709
  [i915#15733]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15733
  [i915#15739]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15739
  [i915#15865]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15865
  [i915#15867]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15867
  [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#16056]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16056
  [i915#16079]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16079
  [i915#16081]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16081
  [i915#16112]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16112
  [i915#16182]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16182
  [i915#16184]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16184
  [i915#16348]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16348
  [i915#16361]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16361
  [i915#16386]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16386
  [i915#16420]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16420
  [i915#16451]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16451
  [i915#16466]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16466
  [i915#16471]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16471
  [i915#1769]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1769
  [i915#1825]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1825
  [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#3297]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3297
  [i915#3299]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3299
  [i915#3323]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3323
  [i915#3359]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3359
  [i915#3469]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3469
  [i915#3539]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3539
  [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#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#4391]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4391
  [i915#4423]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4423
  [i915#4525]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4525
  [i915#4613]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4613
  [i915#4771]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4771
  [i915#4817]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4817
  [i915#4852]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4852
  [i915#4860]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4860
  [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#5566]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5566
  [i915#5723]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5723
  [i915#6095]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6095
  [i915#6334]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6334
  [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#7276]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7276
  [i915#7443]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7443
  [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#7862]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7862
  [i915#7882]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7882
  [i915#8228]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8228
  [i915#8399]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8399
  [i915#8428]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8428
  [i915#8516]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8516
  [i915#8708]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8708
  [i915#9067]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9067
  [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#9423]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9423
  [i915#9683]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9683
  [i915#9723]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9723
  [i915#9732]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9732
  [i915#9812]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9812
  [i915#9878]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9878
  [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_18777 -> Patchwork_169933v1

  CI-20190529: 20190529
  CI_DRM_18777: 7a8782fa5da551a92ada0aca6f7dbadfc4c36da3 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_8991: c5721520bb6611ab8fcbe27db0c120b72d25b99e @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  Patchwork_169933v1: 7a8782fa5da551a92ada0aca6f7dbadfc4c36da3 @ 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_169933v1/index.html

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

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

* Re: [PATCH 00/10] vga_switcheroo, drm: Push fbcon handling into DRM clients
  2026-07-07 13:38 ` Thomas Zimmermann
                   ` (12 preceding siblings ...)
  (?)
@ 2026-07-08 21:56 ` lyude
  -1 siblings, 0 replies; 32+ messages in thread
From: lyude @ 2026-07-08 21:56 UTC (permalink / raw)
  To: Thomas Zimmermann, lukas, jfalempe, alexander.deucher,
	christian.koenig, airlied, simona, maarten.lankhorst, mripard,
	jani.nikula, joonas.lahtinen, rodrigo.vivi, tursulin, dakr,
	deller
  Cc: dri-devel, amd-gfx, intel-gfx, nouveau, linux-fbdev,
	sashiko-reviews

For both nouveau patches:

Reviewed-by: Lyude Paul <lyude@redhat.com>

On Tue, 2026-07-07 at 15:38 +0200, Thomas Zimmermann wrote:
> Vga_switcheroo currently invokes fb_switch_outputs() to inform fbcon
> about switching of the physical outputs among framebuffer devices.
> But
> new DRM clients to not use fbdev/fbcon and might require their own
> vga_switcheroo support. Let's strictly separate them from each other.
> 
> Remove fbdev/fbcon from vga_switcheroo. Introduce a pre_switch
> callback
> for vga_switcheroo clients to do the fbcon update. Allows for
> removing
> all direct interactions between vga_switcheroo and fbdev/fbcon.
> 
> Also replace the existing reprobe hook with post_switch for symetry.
> 
> At the same time, push the fbcon update into DRM's client for fbdev
> emulation. Do this with the new DRM client callback acquire_outputs,
> so that other clients can have their own handling of vga_switcheroo.
> 
> There are only four drivers that support vga_switcheroo: amdgpu,
> radeon, i915 and nouveau. Update each of them with the new callbacks.
> When vga_switcheroo now invokes pre_switch, each DRM driver forwards
> to aquire_outputs and lets the DRM clients handle the new outputs.
> 
> Tested with radeon on a notebook with Radeon HD 4225 and HD 5430.
> 
> Thomas Zimmermann (10):
>   drm/edid: Include <linux/fb.h>
>   drm/client: Add acquire_outputs callback; implement for fbdev
>     emulation
>   vga_switcheroo: Add pre_switch callback to client ops
>   vga_switcheroo: Add post_switch callback to client ops
>   drm/amdgpu: Implement struct vga_switcheroo_client_ops.pre_switch
>   drm/i915: Implement vga_switcheroo_client_ops.pre_switch
>   drm/nouveau: Implement vga_switcheroo_client_ops.pre_switch
>   drm/nouveau: Implement vga_switcheroo_client_ops.post_switch
>   drm/radeon: Implement struct vga_switcheroo_client_ops.pre_switch
>   vga-switcheroo: Remove unused interfaces
> 
>  drivers/gpu/drm/amd/amdgpu/amdgpu_device.c |  9 ++++-
>  drivers/gpu/drm/clients/drm_fbdev_client.c | 23 ++++++++----
>  drivers/gpu/drm/drm_client_event.c         | 18 ++++++++++
>  drivers/gpu/drm/drm_edid.c                 |  1 +
>  drivers/gpu/drm/i915/i915_switcheroo.c     | 11 +++++-
>  drivers/gpu/drm/nouveau/nouveau_vga.c      | 28 +++++++++------
>  drivers/gpu/drm/radeon/radeon_device.c     |  9 ++++-
>  drivers/gpu/vga/vga_switcheroo.c           | 41 +++++---------------
> --
>  drivers/video/fbdev/core/fbcon.c           |  8 -----
>  include/drm/drm_client.h                   | 14 ++++++++
>  include/drm/drm_client_event.h             |  3 ++
>  include/linux/vga_switcheroo.h             | 30 +++++++++-------
>  12 files changed, 122 insertions(+), 73 deletions(-)
> 
> 
> base-commit: cd8abe2554ec7eba16c1d48ab508732bf93534eb


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

end of thread, other threads:[~2026-07-08 21:56 UTC | newest]

Thread overview: 32+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-07 13:38 [PATCH 00/10] vga_switcheroo, drm: Push fbcon handling into DRM clients Thomas Zimmermann
2026-07-07 13:38 ` Thomas Zimmermann
2026-07-07 13:38 ` [PATCH 01/10] drm/edid: Include <linux/fb.h> Thomas Zimmermann
2026-07-07 13:38   ` Thomas Zimmermann
2026-07-07 13:38 ` [PATCH 02/10] drm/client: Add acquire_outputs callback; implement for fbdev emulation Thomas Zimmermann
2026-07-07 13:38   ` Thomas Zimmermann
2026-07-07 13:38 ` [PATCH 03/10] vga_switcheroo: Add pre_switch callback to client ops Thomas Zimmermann
2026-07-07 13:38   ` Thomas Zimmermann
2026-07-07 14:12   ` sashiko-bot
2026-07-07 13:38 ` [PATCH 04/10] vga_switcheroo: Add post_switch " Thomas Zimmermann
2026-07-07 13:38   ` Thomas Zimmermann
2026-07-07 13:38 ` [PATCH 05/10] drm/amdgpu: Implement struct vga_switcheroo_client_ops.pre_switch Thomas Zimmermann
2026-07-07 13:38   ` Thomas Zimmermann
2026-07-07 14:22   ` sashiko-bot
2026-07-08  7:38     ` Thomas Zimmermann
2026-07-07 13:38 ` [PATCH 06/10] drm/i915: Implement vga_switcheroo_client_ops.pre_switch Thomas Zimmermann
2026-07-07 13:38   ` Thomas Zimmermann
2026-07-07 14:17   ` sashiko-bot
2026-07-08  7:39     ` Thomas Zimmermann
2026-07-07 13:38 ` [PATCH 07/10] drm/nouveau: " Thomas Zimmermann
2026-07-07 13:38   ` Thomas Zimmermann
2026-07-07 14:18   ` sashiko-bot
2026-07-08  7:41     ` Thomas Zimmermann
2026-07-07 13:38 ` [PATCH 08/10] drm/nouveau: Implement vga_switcheroo_client_ops.post_switch Thomas Zimmermann
2026-07-07 13:38   ` Thomas Zimmermann
2026-07-07 13:38 ` [PATCH 09/10] drm/radeon: Implement struct vga_switcheroo_client_ops.pre_switch Thomas Zimmermann
2026-07-07 13:38   ` Thomas Zimmermann
2026-07-07 13:38 ` [PATCH 10/10] vga-switcheroo: Remove unused interfaces Thomas Zimmermann
2026-07-07 13:38   ` Thomas Zimmermann
2026-07-07 15:46 ` ✓ i915.CI.BAT: success for vga_switcheroo, drm: Push fbcon handling into DRM clients Patchwork
2026-07-08  8:07 ` ✗ i915.CI.Full: failure " Patchwork
2026-07-08 21:56 ` [PATCH 00/10] " lyude

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.