public inbox for intel-gfx@lists.freedesktop.org
 help / color / mirror / Atom feed
* [PATCH 0/5] drm/{i915,xe}: move bo stuff to parent interface
@ 2026-03-11 14:18 Jani Nikula
  2026-03-11 14:18 ` [PATCH 1/5] drm/i915: move i915 specific bo implementation to i915 Jani Nikula
                   ` (6 more replies)
  0 siblings, 7 replies; 17+ messages in thread
From: Jani Nikula @ 2026-03-11 14:18 UTC (permalink / raw)
  To: intel-gfx, intel-xe; +Cc: jani.nikula


Jani Nikula (5):
  drm/i915: move i915 specific bo implementation to i915
  drm/xe: rename intel_bo.c to xe_display_bo.c
  drm/{i915,xe}/bo: move display bo calls to parent interface
  drm/i915/fb: make intel_fb_bo.c less dependent on display
  drm/{i915,xe}: move framebuffer bo to parent interface

 drivers/gpu/drm/i915/Makefile                 |   2 +-
 drivers/gpu/drm/i915/display/intel_bo.c       |  66 ++++++--
 drivers/gpu/drm/i915/display/intel_bo.h       |   9 +
 drivers/gpu/drm/i915/display/intel_fb.c       |  12 +-
 drivers/gpu/drm/i915/display/intel_fb_bo.c    | 101 ------------
 drivers/gpu/drm/i915/display/intel_fb_bo.h    |  25 ---
 drivers/gpu/drm/i915/i915_bo.c                | 156 ++++++++++++++++++
 drivers/gpu/drm/i915/i915_bo.h                |   9 +
 drivers/gpu/drm/i915/i915_driver.c            |   2 +
 drivers/gpu/drm/xe/Makefile                   |   4 +-
 drivers/gpu/drm/xe/display/intel_bo.c         |  53 ------
 drivers/gpu/drm/xe/display/xe_display.c       |   2 +
 .../{intel_fb_bo.c => xe_display_bo.c}        |  63 ++++---
 drivers/gpu/drm/xe/display/xe_display_bo.h    |   9 +
 include/drm/intel/display_parent_interface.h  |  22 +++
 15 files changed, 311 insertions(+), 224 deletions(-)
 delete mode 100644 drivers/gpu/drm/i915/display/intel_fb_bo.c
 delete mode 100644 drivers/gpu/drm/i915/display/intel_fb_bo.h
 create mode 100644 drivers/gpu/drm/i915/i915_bo.c
 create mode 100644 drivers/gpu/drm/i915/i915_bo.h
 delete mode 100644 drivers/gpu/drm/xe/display/intel_bo.c
 rename drivers/gpu/drm/xe/display/{intel_fb_bo.c => xe_display_bo.c} (57%)
 create mode 100644 drivers/gpu/drm/xe/display/xe_display_bo.h

-- 
2.47.3


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

* [PATCH 1/5] drm/i915: move i915 specific bo implementation to i915
  2026-03-11 14:18 [PATCH 0/5] drm/{i915,xe}: move bo stuff to parent interface Jani Nikula
@ 2026-03-11 14:18 ` Jani Nikula
  2026-03-12  3:39   ` Kandpal, Suraj
  2026-03-11 14:18 ` [PATCH 2/5] drm/xe: rename intel_bo.c to xe_display_bo.c Jani Nikula
                   ` (5 subsequent siblings)
  6 siblings, 1 reply; 17+ messages in thread
From: Jani Nikula @ 2026-03-11 14:18 UTC (permalink / raw)
  To: intel-gfx, intel-xe; +Cc: jani.nikula

The bo interface implementation is different for both i915 and xe. Move
the i915 specific implementation from display to i915 core.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/i915/Makefile                          | 2 +-
 drivers/gpu/drm/i915/{display/intel_bo.c => i915_bo.c} | 3 ++-
 2 files changed, 3 insertions(+), 2 deletions(-)
 rename drivers/gpu/drm/i915/{display/intel_bo.c => i915_bo.c} (97%)

diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile
index 7e9d9b666511..52a82608b8b1 100644
--- a/drivers/gpu/drm/i915/Makefile
+++ b/drivers/gpu/drm/i915/Makefile
@@ -76,6 +76,7 @@ i915-$(CONFIG_PERF_EVENTS) += \
 
 # core display adaptation
 i915-y += \
+	i915_bo.o \
 	i915_display_pc8.o \
 	i915_dpt.o \
 	i915_dsb_buffer.o \
@@ -239,7 +240,6 @@ i915-y += \
 	display/intel_atomic.o \
 	display/intel_audio.o \
 	display/intel_bios.o \
-	display/intel_bo.o \
 	display/intel_bw.o \
 	display/intel_casf.o \
 	display/intel_cdclk.o \
diff --git a/drivers/gpu/drm/i915/display/intel_bo.c b/drivers/gpu/drm/i915/i915_bo.c
similarity index 97%
rename from drivers/gpu/drm/i915/display/intel_bo.c
rename to drivers/gpu/drm/i915/i915_bo.c
index 2b6eaec351d8..21a4533ba341 100644
--- a/drivers/gpu/drm/i915/display/intel_bo.c
+++ b/drivers/gpu/drm/i915/i915_bo.c
@@ -3,12 +3,13 @@
 
 #include <drm/drm_panic.h>
 
+#include "display/intel_bo.h"
+
 #include "gem/i915_gem_mman.h"
 #include "gem/i915_gem_object.h"
 #include "gem/i915_gem_object_frontbuffer.h"
 #include "pxp/intel_pxp.h"
 #include "i915_debugfs.h"
-#include "intel_bo.h"
 
 bool intel_bo_is_tiled(struct drm_gem_object *obj)
 {
-- 
2.47.3


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

* [PATCH 2/5] drm/xe: rename intel_bo.c to xe_display_bo.c
  2026-03-11 14:18 [PATCH 0/5] drm/{i915,xe}: move bo stuff to parent interface Jani Nikula
  2026-03-11 14:18 ` [PATCH 1/5] drm/i915: move i915 specific bo implementation to i915 Jani Nikula
@ 2026-03-11 14:18 ` Jani Nikula
  2026-03-12  3:40   ` Kandpal, Suraj
  2026-03-11 14:18 ` [PATCH 3/5] drm/{i915, xe}/bo: move display bo calls to parent interface Jani Nikula
                   ` (4 subsequent siblings)
  6 siblings, 1 reply; 17+ messages in thread
From: Jani Nikula @ 2026-03-11 14:18 UTC (permalink / raw)
  To: intel-gfx, intel-xe; +Cc: jani.nikula

Follow the xe_ prefixed file naming in xe. With xe_bo.[ch] already being
a thing in xe core, use xe_display_bo.c.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/xe/Makefile                                | 2 +-
 drivers/gpu/drm/xe/display/{intel_bo.c => xe_display_bo.c} | 0
 2 files changed, 1 insertion(+), 1 deletion(-)
 rename drivers/gpu/drm/xe/display/{intel_bo.c => xe_display_bo.c} (100%)

diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
index 50608312bc66..aeede4423680 100644
--- a/drivers/gpu/drm/xe/Makefile
+++ b/drivers/gpu/drm/xe/Makefile
@@ -211,10 +211,10 @@ $(obj)/i915-display/%.o: $(srctree)/drivers/gpu/drm/i915/display/%.c FORCE
 
 # Display code specific to xe
 xe-$(CONFIG_DRM_XE_DISPLAY) += \
-	display/intel_bo.o \
 	display/intel_fb_bo.o \
 	display/intel_fbdev_fb.o \
 	display/xe_display.o \
+	display/xe_display_bo.o \
 	display/xe_display_pcode.o \
 	display/xe_display_rpm.o \
 	display/xe_display_wa.o \
diff --git a/drivers/gpu/drm/xe/display/intel_bo.c b/drivers/gpu/drm/xe/display/xe_display_bo.c
similarity index 100%
rename from drivers/gpu/drm/xe/display/intel_bo.c
rename to drivers/gpu/drm/xe/display/xe_display_bo.c
-- 
2.47.3


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

* [PATCH 3/5] drm/{i915, xe}/bo: move display bo calls to parent interface
  2026-03-11 14:18 [PATCH 0/5] drm/{i915,xe}: move bo stuff to parent interface Jani Nikula
  2026-03-11 14:18 ` [PATCH 1/5] drm/i915: move i915 specific bo implementation to i915 Jani Nikula
  2026-03-11 14:18 ` [PATCH 2/5] drm/xe: rename intel_bo.c to xe_display_bo.c Jani Nikula
@ 2026-03-11 14:18 ` Jani Nikula
  2026-03-12  3:47   ` Kandpal, Suraj
  2026-03-11 14:18 ` [PATCH 4/5] drm/i915/fb: make intel_fb_bo.c less dependent on display Jani Nikula
                   ` (3 subsequent siblings)
  6 siblings, 1 reply; 17+ messages in thread
From: Jani Nikula @ 2026-03-11 14:18 UTC (permalink / raw)
  To: intel-gfx, intel-xe; +Cc: jani.nikula

Continue i915 and xe separation from display by moving the bo calls to
the display parent interface. Instead of adding all these functions to
intel_parent.[ch], reuse the now vacated intel_bo.[ch], and avoid mass
renames to calls of these functions. This is similar to
intel_display_rpm.[ch].

Make many of the hooks optional to avoid having to implement dummy
functions in xe. Indeed now we can remove many of the existing dummy
functions.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/i915/Makefile                |  1 +
 drivers/gpu/drm/i915/display/intel_bo.c      | 66 ++++++++++++++++++++
 drivers/gpu/drm/i915/i915_bo.c               | 32 +++++++---
 drivers/gpu/drm/i915/i915_bo.h               |  9 +++
 drivers/gpu/drm/i915/i915_driver.c           |  2 +
 drivers/gpu/drm/xe/Makefile                  |  1 +
 drivers/gpu/drm/xe/display/xe_display.c      |  2 +
 drivers/gpu/drm/xe/display/xe_display_bo.c   | 45 +++----------
 drivers/gpu/drm/xe/display/xe_display_bo.h   |  9 +++
 include/drm/intel/display_parent_interface.h | 16 +++++
 10 files changed, 138 insertions(+), 45 deletions(-)
 create mode 100644 drivers/gpu/drm/i915/display/intel_bo.c
 create mode 100644 drivers/gpu/drm/i915/i915_bo.h
 create mode 100644 drivers/gpu/drm/xe/display/xe_display_bo.h

diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile
index 52a82608b8b1..425933fb26a5 100644
--- a/drivers/gpu/drm/i915/Makefile
+++ b/drivers/gpu/drm/i915/Makefile
@@ -240,6 +240,7 @@ i915-y += \
 	display/intel_atomic.o \
 	display/intel_audio.o \
 	display/intel_bios.o \
+	display/intel_bo.o \
 	display/intel_bw.o \
 	display/intel_casf.o \
 	display/intel_cdclk.o \
diff --git a/drivers/gpu/drm/i915/display/intel_bo.c b/drivers/gpu/drm/i915/display/intel_bo.c
new file mode 100644
index 000000000000..e356ab4e0640
--- /dev/null
+++ b/drivers/gpu/drm/i915/display/intel_bo.c
@@ -0,0 +1,66 @@
+// SPDX-License-Identifier: MIT
+/* Copyright © 2026 Intel Corporation */
+
+#include <drm/drm_gem.h>
+#include <drm/intel/display_parent_interface.h>
+
+#include "intel_bo.h"
+#include "intel_display_core.h"
+#include "intel_display_types.h"
+
+bool intel_bo_is_tiled(struct drm_gem_object *obj)
+{
+	struct intel_display *display = to_intel_display(obj->dev);
+
+	return display->parent->bo->is_tiled && display->parent->bo->is_tiled(obj);
+}
+
+bool intel_bo_is_userptr(struct drm_gem_object *obj)
+{
+	struct intel_display *display = to_intel_display(obj->dev);
+
+	return display->parent->bo->is_userptr && display->parent->bo->is_userptr(obj);
+}
+
+bool intel_bo_is_shmem(struct drm_gem_object *obj)
+{
+	struct intel_display *display = to_intel_display(obj->dev);
+
+	return display->parent->bo->is_shmem && display->parent->bo->is_shmem(obj);
+}
+
+bool intel_bo_is_protected(struct drm_gem_object *obj)
+{
+	struct intel_display *display = to_intel_display(obj->dev);
+
+	return display->parent->bo->is_protected(obj);
+}
+
+int intel_bo_key_check(struct drm_gem_object *obj)
+{
+	struct intel_display *display = to_intel_display(obj->dev);
+
+	return display->parent->bo->key_check(obj);
+}
+
+int intel_bo_fb_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma)
+{
+	struct intel_display *display = to_intel_display(obj->dev);
+
+	return display->parent->bo->fb_mmap(obj, vma);
+}
+
+int intel_bo_read_from_page(struct drm_gem_object *obj, u64 offset, void *dst, int size)
+{
+	struct intel_display *display = to_intel_display(obj->dev);
+
+	return display->parent->bo->read_from_page(obj, offset, dst, size);
+}
+
+void intel_bo_describe(struct seq_file *m, struct drm_gem_object *obj)
+{
+	struct intel_display *display = to_intel_display(obj->dev);
+
+	if (display->parent->bo->describe)
+		display->parent->bo->describe(m, obj);
+}
diff --git a/drivers/gpu/drm/i915/i915_bo.c b/drivers/gpu/drm/i915/i915_bo.c
index 21a4533ba341..04fc0e3b7ef6 100644
--- a/drivers/gpu/drm/i915/i915_bo.c
+++ b/drivers/gpu/drm/i915/i915_bo.c
@@ -2,51 +2,63 @@
 /* Copyright © 2024 Intel Corporation */
 
 #include <drm/drm_panic.h>
-
-#include "display/intel_bo.h"
+#include <drm/intel/display_parent_interface.h>
 
 #include "gem/i915_gem_mman.h"
 #include "gem/i915_gem_object.h"
 #include "gem/i915_gem_object_frontbuffer.h"
 #include "pxp/intel_pxp.h"
+
+#include "i915_bo.h"
 #include "i915_debugfs.h"
 
-bool intel_bo_is_tiled(struct drm_gem_object *obj)
+static bool i915_bo_is_tiled(struct drm_gem_object *obj)
 {
 	return i915_gem_object_is_tiled(to_intel_bo(obj));
 }
 
-bool intel_bo_is_userptr(struct drm_gem_object *obj)
+static bool i915_bo_is_userptr(struct drm_gem_object *obj)
 {
 	return i915_gem_object_is_userptr(to_intel_bo(obj));
 }
 
-bool intel_bo_is_shmem(struct drm_gem_object *obj)
+static bool i915_bo_is_shmem(struct drm_gem_object *obj)
 {
 	return i915_gem_object_is_shmem(to_intel_bo(obj));
 }
 
-bool intel_bo_is_protected(struct drm_gem_object *obj)
+static bool i915_bo_is_protected(struct drm_gem_object *obj)
 {
 	return i915_gem_object_is_protected(to_intel_bo(obj));
 }
 
-int intel_bo_key_check(struct drm_gem_object *obj)
+static int i915_bo_key_check(struct drm_gem_object *obj)
 {
 	return intel_pxp_key_check(obj, false);
 }
 
-int intel_bo_fb_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma)
+static int i915_bo_fb_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma)
 {
 	return i915_gem_fb_mmap(to_intel_bo(obj), vma);
 }
 
-int intel_bo_read_from_page(struct drm_gem_object *obj, u64 offset, void *dst, int size)
+static int i915_bo_read_from_page(struct drm_gem_object *obj, u64 offset, void *dst, int size)
 {
 	return i915_gem_object_read_from_page(to_intel_bo(obj), offset, dst, size);
 }
 
-void intel_bo_describe(struct seq_file *m, struct drm_gem_object *obj)
+static void i915_bo_describe(struct seq_file *m, struct drm_gem_object *obj)
 {
 	i915_debugfs_describe_obj(m, to_intel_bo(obj));
 }
+
+const struct intel_display_bo_interface i915_display_bo_interface = {
+	.is_tiled = i915_bo_is_tiled,
+	.is_userptr = i915_bo_is_userptr,
+	.is_shmem = i915_bo_is_shmem,
+	.is_protected = i915_bo_is_protected,
+	.key_check = i915_bo_key_check,
+	.fb_mmap = i915_bo_fb_mmap,
+	.read_from_page = i915_bo_read_from_page,
+	.describe = i915_bo_describe,
+};
diff --git a/drivers/gpu/drm/i915/i915_bo.h b/drivers/gpu/drm/i915/i915_bo.h
new file mode 100644
index 000000000000..57255d052dd9
--- /dev/null
+++ b/drivers/gpu/drm/i915/i915_bo.h
@@ -0,0 +1,9 @@
+/* SPDX-License-Identifier: MIT */
+/* Copyright © 2026 Intel Corporation */
+
+#ifndef __I915_BO_H__
+#define __I915_BO_H__
+
+extern const struct intel_display_bo_interface i915_display_bo_interface;
+
+#endif /* __I915_BO_H__ */
diff --git a/drivers/gpu/drm/i915/i915_driver.c b/drivers/gpu/drm/i915/i915_driver.c
index 7a8c59a8c865..385a634c3ed0 100644
--- a/drivers/gpu/drm/i915/i915_driver.c
+++ b/drivers/gpu/drm/i915/i915_driver.c
@@ -90,6 +90,7 @@
 #include "pxp/intel_pxp_debugfs.h"
 #include "pxp/intel_pxp_pm.h"
 
+#include "i915_bo.h"
 #include "i915_debugfs.h"
 #include "i915_display_pc8.h"
 #include "i915_dpt.h"
@@ -765,6 +766,7 @@ static bool vgpu_active(struct drm_device *drm)
 }
 
 static const struct intel_display_parent_interface parent = {
+	.bo = &i915_display_bo_interface,
 	.dpt = &i915_display_dpt_interface,
 	.dsb = &i915_display_dsb_interface,
 	.frontbuffer = &i915_display_frontbuffer_interface,
diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
index aeede4423680..b16ed1ce2a85 100644
--- a/drivers/gpu/drm/xe/Makefile
+++ b/drivers/gpu/drm/xe/Makefile
@@ -235,6 +235,7 @@ xe-$(CONFIG_DRM_XE_DISPLAY) += \
 	i915-display/intel_audio.o \
 	i915-display/intel_backlight.o \
 	i915-display/intel_bios.o \
+	i915-display/intel_bo.o \
 	i915-display/intel_bw.o \
 	i915-display/intel_casf.o \
 	i915-display/intel_cdclk.o \
diff --git a/drivers/gpu/drm/xe/display/xe_display.c b/drivers/gpu/drm/xe/display/xe_display.c
index f1e1889a52d3..49b6f98e7391 100644
--- a/drivers/gpu/drm/xe/display/xe_display.c
+++ b/drivers/gpu/drm/xe/display/xe_display.c
@@ -35,6 +35,7 @@
 #include "intel_hotplug.h"
 #include "intel_opregion.h"
 #include "skl_watermark.h"
+#include "xe_display_bo.h"
 #include "xe_display_pcode.h"
 #include "xe_display_rpm.h"
 #include "xe_dsb_buffer.h"
@@ -541,6 +542,7 @@ static const struct intel_display_irq_interface xe_display_irq_interface = {
 };
 
 static const struct intel_display_parent_interface parent = {
+	.bo = &xe_display_bo_interface,
 	.dsb = &xe_display_dsb_interface,
 	.frontbuffer = &xe_display_frontbuffer_interface,
 	.hdcp = &xe_display_hdcp_interface,
diff --git a/drivers/gpu/drm/xe/display/xe_display_bo.c b/drivers/gpu/drm/xe/display/xe_display_bo.c
index fa1f2c796b81..a53ba3f247ec 100644
--- a/drivers/gpu/drm/xe/display/xe_display_bo.c
+++ b/drivers/gpu/drm/xe/display/xe_display_bo.c
@@ -2,52 +2,27 @@
 /* Copyright © 2024 Intel Corporation */
 
 #include <drm/drm_gem.h>
+#include <drm/intel/display_parent_interface.h>
 
-#include "intel_bo.h"
-#include "intel_frontbuffer.h"
 #include "xe_bo.h"
+#include "xe_display_bo.h"
 #include "xe_pxp.h"
 
-bool intel_bo_is_tiled(struct drm_gem_object *obj)
-{
-	/* legacy tiling is unused */
-	return false;
-}
-
-bool intel_bo_is_userptr(struct drm_gem_object *obj)
-{
-	/* xe does not have userptr bos */
-	return false;
-}
-
-bool intel_bo_is_shmem(struct drm_gem_object *obj)
-{
-	return false;
-}
-
-bool intel_bo_is_protected(struct drm_gem_object *obj)
+static bool xe_display_bo_is_protected(struct drm_gem_object *obj)
 {
 	return xe_bo_is_protected(gem_to_xe_bo(obj));
 }
 
-int intel_bo_key_check(struct drm_gem_object *obj)
-{
-	return xe_pxp_obj_key_check(obj);
-}
-
-int intel_bo_fb_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma)
-{
-	return drm_gem_prime_mmap(obj, vma);
-}
-
-int intel_bo_read_from_page(struct drm_gem_object *obj, u64 offset, void *dst, int size)
+static int xe_display_bo_read_from_page(struct drm_gem_object *obj, u64 offset, void *dst, int size)
 {
 	struct xe_bo *bo = gem_to_xe_bo(obj);
 
 	return xe_bo_read(bo, offset, dst, size);
 }
 
-void intel_bo_describe(struct seq_file *m, struct drm_gem_object *obj)
-{
-	/* FIXME */
-}
+const struct intel_display_bo_interface xe_display_bo_interface = {
+	.is_protected = xe_display_bo_is_protected,
+	.key_check = xe_pxp_obj_key_check,
+	.fb_mmap = drm_gem_prime_mmap,
+	.read_from_page = xe_display_bo_read_from_page,
+};
diff --git a/drivers/gpu/drm/xe/display/xe_display_bo.h b/drivers/gpu/drm/xe/display/xe_display_bo.h
new file mode 100644
index 000000000000..6879c104b0b1
--- /dev/null
+++ b/drivers/gpu/drm/xe/display/xe_display_bo.h
@@ -0,0 +1,9 @@
+/* SPDX-License-Identifier: MIT */
+/* Copyright © 2026 Intel Corporation */
+
+#ifndef __XE_DISPLAY_BO_H__
+#define __XE_DISPLAY_BO_H__
+
+extern const struct intel_display_bo_interface xe_display_bo_interface;
+
+#endif
diff --git a/include/drm/intel/display_parent_interface.h b/include/drm/intel/display_parent_interface.h
index c044472b9400..2b53d12b0e0a 100644
--- a/include/drm/intel/display_parent_interface.h
+++ b/include/drm/intel/display_parent_interface.h
@@ -23,9 +23,22 @@ struct intel_initial_plane_config;
 struct intel_panic;
 struct intel_stolen_node;
 struct ref_tracker;
+struct seq_file;
+struct vm_area_struct;
 
 /* Keep struct definitions sorted */
 
+struct intel_display_bo_interface {
+	bool (*is_tiled)(struct drm_gem_object *obj); /* Optional */
+	bool (*is_userptr)(struct drm_gem_object *obj); /* Optional */
+	bool (*is_shmem)(struct drm_gem_object *obj); /* Optional */
+	bool (*is_protected)(struct drm_gem_object *obj);
+	int (*key_check)(struct drm_gem_object *obj);
+	int (*fb_mmap)(struct drm_gem_object *obj, struct vm_area_struct *vma);
+	int (*read_from_page)(struct drm_gem_object *obj, u64 offset, void *dst, int size);
+	void (*describe)(struct seq_file *m, struct drm_gem_object *obj); /* Optional */
+};
+
 struct intel_display_dpt_interface {
 	struct intel_dpt *(*create)(struct drm_gem_object *obj, size_t size);
 	void (*destroy)(struct intel_dpt *dpt);
@@ -174,6 +187,9 @@ struct intel_display_vma_interface {
  * check the optional pointers.
  */
 struct intel_display_parent_interface {
+	/** @bo: BO interface */
+	const struct intel_display_bo_interface *bo;
+
 	/** @dpt: DPT interface. Optional. */
 	const struct intel_display_dpt_interface *dpt;
 
-- 
2.47.3


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

* [PATCH 4/5] drm/i915/fb: make intel_fb_bo.c less dependent on display
  2026-03-11 14:18 [PATCH 0/5] drm/{i915,xe}: move bo stuff to parent interface Jani Nikula
                   ` (2 preceding siblings ...)
  2026-03-11 14:18 ` [PATCH 3/5] drm/{i915, xe}/bo: move display bo calls to parent interface Jani Nikula
@ 2026-03-11 14:18 ` Jani Nikula
  2026-03-12  3:51   ` Kandpal, Suraj
  2026-03-11 14:18 ` [PATCH 5/5] drm/{i915,xe}: move framebuffer bo to parent interface Jani Nikula
                   ` (2 subsequent siblings)
  6 siblings, 1 reply; 17+ messages in thread
From: Jani Nikula @ 2026-03-11 14:18 UTC (permalink / raw)
  To: intel-gfx, intel-xe; +Cc: jani.nikula

intel_fb_bo.c is i915 core specific code, and should use struct
drm_i915_private instead of struct intel_display.

Switch one DISPLAY_VER() to GRAPHICS_VER(). The check is for < 4, where
they're effectively the same thing.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/i915/display/intel_fb_bo.c | 14 ++++++--------
 1 file changed, 6 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_fb_bo.c b/drivers/gpu/drm/i915/display/intel_fb_bo.c
index bfecd73d5fa0..a4d49ef450d9 100644
--- a/drivers/gpu/drm/i915/display/intel_fb_bo.c
+++ b/drivers/gpu/drm/i915/display/intel_fb_bo.c
@@ -9,8 +9,6 @@
 #include "gem/i915_gem_object.h"
 
 #include "i915_drv.h"
-#include "intel_display_core.h"
-#include "intel_display_types.h"
 #include "intel_fb.h"
 #include "intel_fb_bo.h"
 
@@ -23,7 +21,7 @@ int intel_fb_bo_framebuffer_init(struct drm_gem_object *_obj,
 				 struct drm_mode_fb_cmd2 *mode_cmd)
 {
 	struct drm_i915_gem_object *obj = to_intel_bo(_obj);
-	struct intel_display *display = to_intel_display(obj->base.dev);
+	struct drm_i915_private *i915 = to_i915(obj->base.dev);
 	unsigned int tiling, stride;
 
 	i915_gem_object_lock(obj, NULL);
@@ -38,7 +36,7 @@ int intel_fb_bo_framebuffer_init(struct drm_gem_object *_obj,
 		 */
 		if (tiling != I915_TILING_NONE &&
 		    tiling != intel_fb_modifier_to_tiling(mode_cmd->modifier[0])) {
-			drm_dbg_kms(display->drm,
+			drm_dbg_kms(&i915->drm,
 				    "tiling_mode doesn't match fb modifier\n");
 			return -EINVAL;
 		}
@@ -46,7 +44,7 @@ int intel_fb_bo_framebuffer_init(struct drm_gem_object *_obj,
 		if (tiling == I915_TILING_X) {
 			mode_cmd->modifier[0] = I915_FORMAT_MOD_X_TILED;
 		} else if (tiling == I915_TILING_Y) {
-			drm_dbg_kms(display->drm,
+			drm_dbg_kms(&i915->drm,
 				    "No Y tiling for legacy addfb\n");
 			return -EINVAL;
 		}
@@ -56,9 +54,9 @@ int intel_fb_bo_framebuffer_init(struct drm_gem_object *_obj,
 	 * gen2/3 display engine uses the fence if present,
 	 * so the tiling mode must match the fb modifier exactly.
 	 */
-	if (DISPLAY_VER(display) < 4 &&
+	if (GRAPHICS_VER(i915) < 4 &&
 	    tiling != intel_fb_modifier_to_tiling(mode_cmd->modifier[0])) {
-		drm_dbg_kms(display->drm,
+		drm_dbg_kms(&i915->drm,
 			    "tiling_mode must match fb modifier exactly on gen2/3\n");
 		return -EINVAL;
 	}
@@ -68,7 +66,7 @@ int intel_fb_bo_framebuffer_init(struct drm_gem_object *_obj,
 	 * the fb pitch and fence stride match.
 	 */
 	if (tiling != I915_TILING_NONE && mode_cmd->pitches[0] != stride) {
-		drm_dbg_kms(display->drm,
+		drm_dbg_kms(&i915->drm,
 			    "pitch (%d) must match tiling stride (%d)\n",
 			    mode_cmd->pitches[0], stride);
 		return -EINVAL;
-- 
2.47.3


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

* [PATCH 5/5] drm/{i915,xe}: move framebuffer bo to parent interface
  2026-03-11 14:18 [PATCH 0/5] drm/{i915,xe}: move bo stuff to parent interface Jani Nikula
                   ` (3 preceding siblings ...)
  2026-03-11 14:18 ` [PATCH 4/5] drm/i915/fb: make intel_fb_bo.c less dependent on display Jani Nikula
@ 2026-03-11 14:18 ` Jani Nikula
  2026-03-12  4:25   ` Kandpal, Suraj
  2026-03-11 15:33 ` ✓ i915.CI.BAT: success for drm/{i915,xe}: move bo stuff " Patchwork
  2026-03-12  6:37 ` ✓ i915.CI.Full: " Patchwork
  6 siblings, 1 reply; 17+ messages in thread
From: Jani Nikula @ 2026-03-11 14:18 UTC (permalink / raw)
  To: intel-gfx, intel-xe; +Cc: jani.nikula

Add .framebuffer_init, .framebuffer_fini and .framebuffer_lookup to the
bo parent interface. While they're about framebuffers, they're
specifically about framebuffer objects, so the bo interface is a good
enough fit, and there's no need to add another interface struct.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/i915/Makefile                |  1 -
 drivers/gpu/drm/i915/display/intel_bo.c      | 21 +++++
 drivers/gpu/drm/i915/display/intel_bo.h      |  9 ++
 drivers/gpu/drm/i915/display/intel_fb.c      | 12 +--
 drivers/gpu/drm/i915/display/intel_fb_bo.c   | 99 --------------------
 drivers/gpu/drm/i915/display/intel_fb_bo.h   | 25 -----
 drivers/gpu/drm/i915/i915_bo.c               | 92 ++++++++++++++++++
 drivers/gpu/drm/xe/Makefile                  |  1 -
 drivers/gpu/drm/xe/display/intel_fb_bo.c     | 91 ------------------
 drivers/gpu/drm/xe/display/xe_display_bo.c   | 84 +++++++++++++++++
 include/drm/intel/display_parent_interface.h |  6 ++
 11 files changed, 218 insertions(+), 223 deletions(-)
 delete mode 100644 drivers/gpu/drm/i915/display/intel_fb_bo.c
 delete mode 100644 drivers/gpu/drm/i915/display/intel_fb_bo.h
 delete mode 100644 drivers/gpu/drm/xe/display/intel_fb_bo.c

diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile
index 425933fb26a5..be976a90c5a6 100644
--- a/drivers/gpu/drm/i915/Makefile
+++ b/drivers/gpu/drm/i915/Makefile
@@ -278,7 +278,6 @@ i915-y += \
 	display/intel_drrs.o \
 	display/intel_dsb.o \
 	display/intel_fb.o \
-	display/intel_fb_bo.o \
 	display/intel_fb_pin.o \
 	display/intel_fbc.o \
 	display/intel_fdi.o \
diff --git a/drivers/gpu/drm/i915/display/intel_bo.c b/drivers/gpu/drm/i915/display/intel_bo.c
index e356ab4e0640..3b82d38a0504 100644
--- a/drivers/gpu/drm/i915/display/intel_bo.c
+++ b/drivers/gpu/drm/i915/display/intel_bo.c
@@ -64,3 +64,24 @@ void intel_bo_describe(struct seq_file *m, struct drm_gem_object *obj)
 	if (display->parent->bo->describe)
 		display->parent->bo->describe(m, obj);
 }
+
+int intel_bo_framebuffer_init(struct drm_gem_object *obj, struct drm_mode_fb_cmd2 *mode_cmd)
+{
+	struct intel_display *display = to_intel_display(obj->dev);
+
+	return display->parent->bo->framebuffer_init(obj, mode_cmd);
+}
+
+void intel_bo_framebuffer_fini(struct drm_gem_object *obj)
+{
+	struct intel_display *display = to_intel_display(obj->dev);
+
+	display->parent->bo->framebuffer_fini(obj);
+}
+
+struct drm_gem_object *intel_bo_framebuffer_lookup(struct intel_display *display,
+						   struct drm_file *filp,
+						   const struct drm_mode_fb_cmd2 *user_mode_cmd)
+{
+	return display->parent->bo->framebuffer_lookup(display->drm, filp, user_mode_cmd);
+}
diff --git a/drivers/gpu/drm/i915/display/intel_bo.h b/drivers/gpu/drm/i915/display/intel_bo.h
index 40390ed92ceb..aec188c706c2 100644
--- a/drivers/gpu/drm/i915/display/intel_bo.h
+++ b/drivers/gpu/drm/i915/display/intel_bo.h
@@ -6,8 +6,11 @@
 
 #include <linux/types.h>
 
+struct drm_file;
 struct drm_gem_object;
+struct drm_mode_fb_cmd2;
 struct drm_scanout_buffer;
+struct intel_display;
 struct intel_framebuffer;
 struct seq_file;
 struct vm_area_struct;
@@ -22,4 +25,10 @@ int intel_bo_read_from_page(struct drm_gem_object *obj, u64 offset, void *dst, i
 
 void intel_bo_describe(struct seq_file *m, struct drm_gem_object *obj);
 
+void intel_bo_framebuffer_fini(struct drm_gem_object *obj);
+int intel_bo_framebuffer_init(struct drm_gem_object *obj, struct drm_mode_fb_cmd2 *mode_cmd);
+struct drm_gem_object *intel_bo_framebuffer_lookup(struct intel_display *display,
+						   struct drm_file *filp,
+						   const struct drm_mode_fb_cmd2 *user_mode_cmd);
+
 #endif /* __INTEL_BO__ */
diff --git a/drivers/gpu/drm/i915/display/intel_fb.c b/drivers/gpu/drm/i915/display/intel_fb.c
index 49c6ca9d94c6..5768619f840f 100644
--- a/drivers/gpu/drm/i915/display/intel_fb.c
+++ b/drivers/gpu/drm/i915/display/intel_fb.c
@@ -17,7 +17,6 @@
 #include "intel_display_types.h"
 #include "intel_display_utils.h"
 #include "intel_fb.h"
-#include "intel_fb_bo.h"
 #include "intel_frontbuffer.h"
 #include "intel_parent.h"
 #include "intel_plane.h"
@@ -2111,7 +2110,7 @@ static void intel_user_framebuffer_destroy(struct drm_framebuffer *fb)
 	if (intel_fb_uses_dpt(fb))
 		intel_parent_dpt_destroy(display, intel_fb->dpt);
 
-	intel_fb_bo_framebuffer_fini(intel_fb_bo(fb));
+	intel_bo_framebuffer_fini(intel_fb_bo(fb));
 
 	intel_parent_frontbuffer_put(display, intel_fb->frontbuffer);
 
@@ -2222,7 +2221,7 @@ int intel_framebuffer_init(struct intel_framebuffer *intel_fb,
 
 	/*
 	 * intel_parent_frontbuffer_get() must be done before
-	 * intel_fb_bo_framebuffer_init() to avoid set_tiling vs. addfb race.
+	 * intel_bo_framebuffer_init() to avoid set_tiling vs. addfb race.
 	 */
 	intel_fb->frontbuffer = intel_parent_frontbuffer_get(display, obj);
 	if (!intel_fb->frontbuffer) {
@@ -2230,7 +2229,7 @@ int intel_framebuffer_init(struct intel_framebuffer *intel_fb,
 		goto err_free_panic;
 	}
 
-	ret = intel_fb_bo_framebuffer_init(obj, mode_cmd);
+	ret = intel_bo_framebuffer_init(obj, mode_cmd);
 	if (ret)
 		goto err_frontbuffer_put;
 
@@ -2333,7 +2332,7 @@ int intel_framebuffer_init(struct intel_framebuffer *intel_fb,
 	if (intel_fb_uses_dpt(fb))
 		intel_parent_dpt_destroy(display, intel_fb->dpt);
 err_bo_framebuffer_fini:
-	intel_fb_bo_framebuffer_fini(obj);
+	intel_bo_framebuffer_fini(obj);
 err_frontbuffer_put:
 	intel_parent_frontbuffer_put(display, intel_fb->frontbuffer);
 err_free_panic:
@@ -2348,11 +2347,12 @@ intel_user_framebuffer_create(struct drm_device *dev,
 			      const struct drm_format_info *info,
 			      const struct drm_mode_fb_cmd2 *user_mode_cmd)
 {
+	struct intel_display *display = to_intel_display(dev);
 	struct drm_framebuffer *fb;
 	struct drm_gem_object *obj;
 	struct drm_mode_fb_cmd2 mode_cmd = *user_mode_cmd;
 
-	obj = intel_fb_bo_lookup_valid_bo(dev, filp, &mode_cmd);
+	obj = intel_bo_framebuffer_lookup(display, filp, &mode_cmd);
 	if (IS_ERR(obj))
 		return ERR_CAST(obj);
 
diff --git a/drivers/gpu/drm/i915/display/intel_fb_bo.c b/drivers/gpu/drm/i915/display/intel_fb_bo.c
deleted file mode 100644
index a4d49ef450d9..000000000000
--- a/drivers/gpu/drm/i915/display/intel_fb_bo.c
+++ /dev/null
@@ -1,99 +0,0 @@
-/* SPDX-License-Identifier: MIT */
-/*
- * Copyright © 2021 Intel Corporation
- */
-
-#include <drm/drm_framebuffer.h>
-#include <drm/drm_print.h>
-
-#include "gem/i915_gem_object.h"
-
-#include "i915_drv.h"
-#include "intel_fb.h"
-#include "intel_fb_bo.h"
-
-void intel_fb_bo_framebuffer_fini(struct drm_gem_object *obj)
-{
-	/* Nothing to do for i915 */
-}
-
-int intel_fb_bo_framebuffer_init(struct drm_gem_object *_obj,
-				 struct drm_mode_fb_cmd2 *mode_cmd)
-{
-	struct drm_i915_gem_object *obj = to_intel_bo(_obj);
-	struct drm_i915_private *i915 = to_i915(obj->base.dev);
-	unsigned int tiling, stride;
-
-	i915_gem_object_lock(obj, NULL);
-	tiling = i915_gem_object_get_tiling(obj);
-	stride = i915_gem_object_get_stride(obj);
-	i915_gem_object_unlock(obj);
-
-	if (mode_cmd->flags & DRM_MODE_FB_MODIFIERS) {
-		/*
-		 * If there's a fence, enforce that
-		 * the fb modifier and tiling mode match.
-		 */
-		if (tiling != I915_TILING_NONE &&
-		    tiling != intel_fb_modifier_to_tiling(mode_cmd->modifier[0])) {
-			drm_dbg_kms(&i915->drm,
-				    "tiling_mode doesn't match fb modifier\n");
-			return -EINVAL;
-		}
-	} else {
-		if (tiling == I915_TILING_X) {
-			mode_cmd->modifier[0] = I915_FORMAT_MOD_X_TILED;
-		} else if (tiling == I915_TILING_Y) {
-			drm_dbg_kms(&i915->drm,
-				    "No Y tiling for legacy addfb\n");
-			return -EINVAL;
-		}
-	}
-
-	/*
-	 * gen2/3 display engine uses the fence if present,
-	 * so the tiling mode must match the fb modifier exactly.
-	 */
-	if (GRAPHICS_VER(i915) < 4 &&
-	    tiling != intel_fb_modifier_to_tiling(mode_cmd->modifier[0])) {
-		drm_dbg_kms(&i915->drm,
-			    "tiling_mode must match fb modifier exactly on gen2/3\n");
-		return -EINVAL;
-	}
-
-	/*
-	 * If there's a fence, enforce that
-	 * the fb pitch and fence stride match.
-	 */
-	if (tiling != I915_TILING_NONE && mode_cmd->pitches[0] != stride) {
-		drm_dbg_kms(&i915->drm,
-			    "pitch (%d) must match tiling stride (%d)\n",
-			    mode_cmd->pitches[0], stride);
-		return -EINVAL;
-	}
-
-	return 0;
-}
-
-struct drm_gem_object *
-intel_fb_bo_lookup_valid_bo(struct drm_device *drm,
-			    struct drm_file *filp,
-			    const struct drm_mode_fb_cmd2 *mode_cmd)
-{
-	struct drm_i915_private *i915 = to_i915(drm);
-	struct drm_i915_gem_object *obj;
-
-	obj = i915_gem_object_lookup(filp, mode_cmd->handles[0]);
-	if (!obj)
-		return ERR_PTR(-ENOENT);
-
-	/* object is backed with LMEM for discrete */
-	if (HAS_LMEM(i915) && !i915_gem_object_can_migrate(obj, INTEL_REGION_LMEM_0)) {
-		/* object is "remote", not in local memory */
-		i915_gem_object_put(obj);
-		drm_dbg_kms(&i915->drm, "framebuffer must reside in local memory\n");
-		return ERR_PTR(-EREMOTE);
-	}
-
-	return intel_bo_to_drm_bo(obj);
-}
diff --git a/drivers/gpu/drm/i915/display/intel_fb_bo.h b/drivers/gpu/drm/i915/display/intel_fb_bo.h
deleted file mode 100644
index d775773c6c03..000000000000
--- a/drivers/gpu/drm/i915/display/intel_fb_bo.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/* SPDX-License-Identifier: MIT */
-/*
- * Copyright © 2021 Intel Corporation
- */
-
-#ifndef __INTEL_FB_BO_H__
-#define __INTEL_FB_BO_H__
-
-struct drm_device;
-struct drm_file;
-struct drm_framebuffer;
-struct drm_gem_object;
-struct drm_mode_fb_cmd2;
-
-void intel_fb_bo_framebuffer_fini(struct drm_gem_object *obj);
-
-int intel_fb_bo_framebuffer_init(struct drm_gem_object *obj,
-				 struct drm_mode_fb_cmd2 *mode_cmd);
-
-struct drm_gem_object *
-intel_fb_bo_lookup_valid_bo(struct drm_device *drm,
-			    struct drm_file *filp,
-			    const struct drm_mode_fb_cmd2 *user_mode_cmd);
-
-#endif
diff --git a/drivers/gpu/drm/i915/i915_bo.c b/drivers/gpu/drm/i915/i915_bo.c
index 04fc0e3b7ef6..1789f7cab05c 100644
--- a/drivers/gpu/drm/i915/i915_bo.c
+++ b/drivers/gpu/drm/i915/i915_bo.c
@@ -2,8 +2,10 @@
 /* Copyright © 2024 Intel Corporation */
 
 #include <drm/drm_panic.h>
+#include <drm/drm_print.h>
 #include <drm/intel/display_parent_interface.h>
 
+#include "display/intel_fb.h"
 #include "gem/i915_gem_mman.h"
 #include "gem/i915_gem_object.h"
 #include "gem/i915_gem_object_frontbuffer.h"
@@ -11,6 +13,7 @@
 
 #include "i915_bo.h"
 #include "i915_debugfs.h"
+#include "i915_drv.h"
 
 static bool i915_bo_is_tiled(struct drm_gem_object *obj)
 {
@@ -52,6 +55,92 @@ static void i915_bo_describe(struct seq_file *m, struct drm_gem_object *obj)
 	i915_debugfs_describe_obj(m, to_intel_bo(obj));
 }
 
+static int i915_bo_framebuffer_init(struct drm_gem_object *_obj,
+				    struct drm_mode_fb_cmd2 *mode_cmd)
+{
+	struct drm_i915_gem_object *obj = to_intel_bo(_obj);
+	struct drm_i915_private *i915 = to_i915(obj->base.dev);
+	unsigned int tiling, stride;
+
+	i915_gem_object_lock(obj, NULL);
+	tiling = i915_gem_object_get_tiling(obj);
+	stride = i915_gem_object_get_stride(obj);
+	i915_gem_object_unlock(obj);
+
+	if (mode_cmd->flags & DRM_MODE_FB_MODIFIERS) {
+		/*
+		 * If there's a fence, enforce that
+		 * the fb modifier and tiling mode match.
+		 */
+		if (tiling != I915_TILING_NONE &&
+		    tiling != intel_fb_modifier_to_tiling(mode_cmd->modifier[0])) {
+			drm_dbg_kms(&i915->drm,
+				    "tiling_mode doesn't match fb modifier\n");
+			return -EINVAL;
+		}
+	} else {
+		if (tiling == I915_TILING_X) {
+			mode_cmd->modifier[0] = I915_FORMAT_MOD_X_TILED;
+		} else if (tiling == I915_TILING_Y) {
+			drm_dbg_kms(&i915->drm,
+				    "No Y tiling for legacy addfb\n");
+			return -EINVAL;
+		}
+	}
+
+	/*
+	 * gen2/3 display engine uses the fence if present,
+	 * so the tiling mode must match the fb modifier exactly.
+	 */
+	if (GRAPHICS_VER(i915) < 4 &&
+	    tiling != intel_fb_modifier_to_tiling(mode_cmd->modifier[0])) {
+		drm_dbg_kms(&i915->drm,
+			    "tiling_mode must match fb modifier exactly on gen2/3\n");
+		return -EINVAL;
+	}
+
+	/*
+	 * If there's a fence, enforce that
+	 * the fb pitch and fence stride match.
+	 */
+	if (tiling != I915_TILING_NONE && mode_cmd->pitches[0] != stride) {
+		drm_dbg_kms(&i915->drm,
+			    "pitch (%d) must match tiling stride (%d)\n",
+			    mode_cmd->pitches[0], stride);
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
+static void i915_bo_framebuffer_fini(struct drm_gem_object *obj)
+{
+	/* Nothing to do for i915 */
+}
+
+static struct drm_gem_object *
+i915_bo_framebuffer_lookup(struct drm_device *drm,
+			   struct drm_file *filp,
+			   const struct drm_mode_fb_cmd2 *mode_cmd)
+{
+	struct drm_i915_private *i915 = to_i915(drm);
+	struct drm_i915_gem_object *obj;
+
+	obj = i915_gem_object_lookup(filp, mode_cmd->handles[0]);
+	if (!obj)
+		return ERR_PTR(-ENOENT);
+
+	/* object is backed with LMEM for discrete */
+	if (HAS_LMEM(i915) && !i915_gem_object_can_migrate(obj, INTEL_REGION_LMEM_0)) {
+		/* object is "remote", not in local memory */
+		i915_gem_object_put(obj);
+		drm_dbg_kms(&i915->drm, "framebuffer must reside in local memory\n");
+		return ERR_PTR(-EREMOTE);
+	}
+
+	return intel_bo_to_drm_bo(obj);
+}
+
 const struct intel_display_bo_interface i915_display_bo_interface = {
 	.is_tiled = i915_bo_is_tiled,
 	.is_userptr = i915_bo_is_userptr,
@@ -61,4 +150,7 @@ const struct intel_display_bo_interface i915_display_bo_interface = {
 	.fb_mmap = i915_bo_fb_mmap,
 	.read_from_page = i915_bo_read_from_page,
 	.describe = i915_bo_describe,
+	.framebuffer_init = i915_bo_framebuffer_init,
+	.framebuffer_fini = i915_bo_framebuffer_fini,
+	.framebuffer_lookup = i915_bo_framebuffer_lookup,
 };
diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
index b16ed1ce2a85..dab979287a96 100644
--- a/drivers/gpu/drm/xe/Makefile
+++ b/drivers/gpu/drm/xe/Makefile
@@ -211,7 +211,6 @@ $(obj)/i915-display/%.o: $(srctree)/drivers/gpu/drm/i915/display/%.c FORCE
 
 # Display code specific to xe
 xe-$(CONFIG_DRM_XE_DISPLAY) += \
-	display/intel_fb_bo.o \
 	display/intel_fbdev_fb.o \
 	display/xe_display.o \
 	display/xe_display_bo.o \
diff --git a/drivers/gpu/drm/xe/display/intel_fb_bo.c b/drivers/gpu/drm/xe/display/intel_fb_bo.c
deleted file mode 100644
index db8b1a27b4de..000000000000
--- a/drivers/gpu/drm/xe/display/intel_fb_bo.c
+++ /dev/null
@@ -1,91 +0,0 @@
-/* SPDX-License-Identifier: MIT */
-/*
- * Copyright © 2021 Intel Corporation
- */
-
-#include <drm/drm_modeset_helper.h>
-#include <drm/ttm/ttm_bo.h>
-
-#include "intel_display_types.h"
-#include "intel_fb.h"
-#include "intel_fb_bo.h"
-#include "xe_bo.h"
-
-void intel_fb_bo_framebuffer_fini(struct drm_gem_object *obj)
-{
-	struct xe_bo *bo = gem_to_xe_bo(obj);
-
-	if (bo->flags & XE_BO_FLAG_PINNED) {
-		/* Unpin our kernel fb first */
-		xe_bo_lock(bo, false);
-		xe_bo_unpin(bo);
-		xe_bo_unlock(bo);
-	}
-	xe_bo_put(bo);
-}
-
-int intel_fb_bo_framebuffer_init(struct drm_gem_object *obj,
-				 struct drm_mode_fb_cmd2 *mode_cmd)
-{
-	struct xe_bo *bo = gem_to_xe_bo(obj);
-	struct xe_device *xe = to_xe_device(bo->ttm.base.dev);
-	int ret;
-
-	/*
-	 * Some modifiers require physical alignment of 64KiB VRAM pages;
-	 * require that the BO in those cases is created correctly.
-	 */
-	if (XE_IOCTL_DBG(xe, intel_fb_needs_64k_phys(mode_cmd->modifier[0]) &&
-			     !(bo->flags & XE_BO_FLAG_NEEDS_64K)))
-		return -EINVAL;
-
-	xe_bo_get(bo);
-
-	ret = ttm_bo_reserve(&bo->ttm, true, false, NULL);
-	if (ret)
-		goto err;
-
-	if (!(bo->flags & XE_BO_FLAG_SCANOUT)) {
-		/*
-		 * XE_BO_FLAG_SCANOUT should ideally be set at creation, or is
-		 * automatically set when creating FB. We cannot change caching
-		 * mode when the bo is VM_BINDed, so we can only set
-		 * coherency with display when unbound.
-		 */
-		if (XE_IOCTL_DBG(xe, xe_bo_is_vm_bound(bo))) {
-			ttm_bo_unreserve(&bo->ttm);
-			ret = -EINVAL;
-			goto err;
-		}
-		bo->flags |= XE_BO_FLAG_SCANOUT;
-	}
-	ttm_bo_unreserve(&bo->ttm);
-	return 0;
-
-err:
-	xe_bo_put(bo);
-	return ret;
-}
-
-struct drm_gem_object *intel_fb_bo_lookup_valid_bo(struct drm_device *drm,
-						   struct drm_file *filp,
-						   const struct drm_mode_fb_cmd2 *mode_cmd)
-{
-	struct xe_device *xe = to_xe_device(drm);
-	struct xe_bo *bo;
-	struct drm_gem_object *gem = drm_gem_object_lookup(filp, mode_cmd->handles[0]);
-
-	if (!gem)
-		return ERR_PTR(-ENOENT);
-
-	bo = gem_to_xe_bo(gem);
-	/* Require vram placement or dma-buf import */
-	if (IS_DGFX(xe) &&
-	    !xe_bo_can_migrate(bo, XE_PL_VRAM0) &&
-	    bo->ttm.type != ttm_bo_type_sg) {
-		drm_gem_object_put(gem);
-		return ERR_PTR(-EREMOTE);
-	}
-
-	return gem;
-}
diff --git a/drivers/gpu/drm/xe/display/xe_display_bo.c b/drivers/gpu/drm/xe/display/xe_display_bo.c
index a53ba3f247ec..a689f71e7b14 100644
--- a/drivers/gpu/drm/xe/display/xe_display_bo.c
+++ b/drivers/gpu/drm/xe/display/xe_display_bo.c
@@ -4,6 +4,7 @@
 #include <drm/drm_gem.h>
 #include <drm/intel/display_parent_interface.h>
 
+#include "intel_fb.h"
 #include "xe_bo.h"
 #include "xe_display_bo.h"
 #include "xe_pxp.h"
@@ -20,9 +21,92 @@ static int xe_display_bo_read_from_page(struct drm_gem_object *obj, u64 offset,
 	return xe_bo_read(bo, offset, dst, size);
 }
 
+static int xe_display_bo_framebuffer_init(struct drm_gem_object *obj,
+					  struct drm_mode_fb_cmd2 *mode_cmd)
+{
+	struct xe_bo *bo = gem_to_xe_bo(obj);
+	struct xe_device *xe = to_xe_device(bo->ttm.base.dev);
+	int ret;
+
+	/*
+	 * Some modifiers require physical alignment of 64KiB VRAM pages;
+	 * require that the BO in those cases is created correctly.
+	 */
+	if (XE_IOCTL_DBG(xe, intel_fb_needs_64k_phys(mode_cmd->modifier[0]) &&
+			     !(bo->flags & XE_BO_FLAG_NEEDS_64K)))
+		return -EINVAL;
+
+	xe_bo_get(bo);
+
+	ret = ttm_bo_reserve(&bo->ttm, true, false, NULL);
+	if (ret)
+		goto err;
+
+	if (!(bo->flags & XE_BO_FLAG_SCANOUT)) {
+		/*
+		 * XE_BO_FLAG_SCANOUT should ideally be set at creation, or is
+		 * automatically set when creating FB. We cannot change caching
+		 * mode when the bo is VM_BINDed, so we can only set
+		 * coherency with display when unbound.
+		 */
+		if (XE_IOCTL_DBG(xe, xe_bo_is_vm_bound(bo))) {
+			ttm_bo_unreserve(&bo->ttm);
+			ret = -EINVAL;
+			goto err;
+		}
+		bo->flags |= XE_BO_FLAG_SCANOUT;
+	}
+	ttm_bo_unreserve(&bo->ttm);
+	return 0;
+
+err:
+	xe_bo_put(bo);
+	return ret;
+}
+
+static void xe_display_bo_framebuffer_fini(struct drm_gem_object *obj)
+{
+	struct xe_bo *bo = gem_to_xe_bo(obj);
+
+	if (bo->flags & XE_BO_FLAG_PINNED) {
+		/* Unpin our kernel fb first */
+		xe_bo_lock(bo, false);
+		xe_bo_unpin(bo);
+		xe_bo_unlock(bo);
+	}
+	xe_bo_put(bo);
+}
+
+static struct drm_gem_object *
+xe_display_bo_framebuffer_lookup(struct drm_device *drm,
+				 struct drm_file *filp,
+				 const struct drm_mode_fb_cmd2 *mode_cmd)
+{
+	struct xe_device *xe = to_xe_device(drm);
+	struct xe_bo *bo;
+	struct drm_gem_object *gem = drm_gem_object_lookup(filp, mode_cmd->handles[0]);
+
+	if (!gem)
+		return ERR_PTR(-ENOENT);
+
+	bo = gem_to_xe_bo(gem);
+	/* Require vram placement or dma-buf import */
+	if (IS_DGFX(xe) &&
+	    !xe_bo_can_migrate(bo, XE_PL_VRAM0) &&
+	    bo->ttm.type != ttm_bo_type_sg) {
+		drm_gem_object_put(gem);
+		return ERR_PTR(-EREMOTE);
+	}
+
+	return gem;
+}
+
 const struct intel_display_bo_interface xe_display_bo_interface = {
 	.is_protected = xe_display_bo_is_protected,
 	.key_check = xe_pxp_obj_key_check,
 	.fb_mmap = drm_gem_prime_mmap,
 	.read_from_page = xe_display_bo_read_from_page,
+	.framebuffer_init = xe_display_bo_framebuffer_init,
+	.framebuffer_fini = xe_display_bo_framebuffer_fini,
+	.framebuffer_lookup = xe_display_bo_framebuffer_lookup,
 };
diff --git a/include/drm/intel/display_parent_interface.h b/include/drm/intel/display_parent_interface.h
index 2b53d12b0e0a..97ec94a2e749 100644
--- a/include/drm/intel/display_parent_interface.h
+++ b/include/drm/intel/display_parent_interface.h
@@ -12,6 +12,7 @@ struct drm_device;
 struct drm_file;
 struct drm_framebuffer;
 struct drm_gem_object;
+struct drm_mode_fb_cmd2;
 struct drm_plane_state;
 struct drm_scanout_buffer;
 struct i915_vma;
@@ -37,6 +38,11 @@ struct intel_display_bo_interface {
 	int (*fb_mmap)(struct drm_gem_object *obj, struct vm_area_struct *vma);
 	int (*read_from_page)(struct drm_gem_object *obj, u64 offset, void *dst, int size);
 	void (*describe)(struct seq_file *m, struct drm_gem_object *obj); /* Optional */
+	int (*framebuffer_init)(struct drm_gem_object *obj, struct drm_mode_fb_cmd2 *mode_cmd);
+	void (*framebuffer_fini)(struct drm_gem_object *obj);
+	struct drm_gem_object *(*framebuffer_lookup)(struct drm_device *drm,
+						     struct drm_file *filp,
+						     const struct drm_mode_fb_cmd2 *user_mode_cmd);
 };
 
 struct intel_display_dpt_interface {
-- 
2.47.3


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

* ✓ i915.CI.BAT: success for drm/{i915,xe}: move bo stuff to parent interface
  2026-03-11 14:18 [PATCH 0/5] drm/{i915,xe}: move bo stuff to parent interface Jani Nikula
                   ` (4 preceding siblings ...)
  2026-03-11 14:18 ` [PATCH 5/5] drm/{i915,xe}: move framebuffer bo to parent interface Jani Nikula
@ 2026-03-11 15:33 ` Patchwork
  2026-03-12  6:37 ` ✓ i915.CI.Full: " Patchwork
  6 siblings, 0 replies; 17+ messages in thread
From: Patchwork @ 2026-03-11 15:33 UTC (permalink / raw)
  To: Jani Nikula; +Cc: intel-gfx

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

== Series Details ==

Series: drm/{i915,xe}: move bo stuff to parent interface
URL   : https://patchwork.freedesktop.org/series/163033/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_18130 -> Patchwork_163033v1
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

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

Participating hosts (39 -> 39)
------------------------------

  Additional (2): bat-adlp-6 bat-adls-6 
  Missing    (2): bat-dg2-13 fi-snb-2520m 

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

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

### IGT changes ###

#### Issues hit ####

  * igt@gem_lmem_swapping@parallel-random-engines:
    - bat-adls-6:         NOTRUN -> [SKIP][1] ([i915#4613]) +3 other tests skip
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/bat-adls-6/igt@gem_lmem_swapping@parallel-random-engines.html

  * igt@gem_lmem_swapping@random-engines:
    - bat-adlp-6:         NOTRUN -> [SKIP][2] ([i915#4613]) +3 other tests skip
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/bat-adlp-6/igt@gem_lmem_swapping@random-engines.html

  * igt@gem_tiled_pread_basic@basic:
    - bat-adlp-6:         NOTRUN -> [SKIP][3] ([i915#15656])
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/bat-adlp-6/igt@gem_tiled_pread_basic@basic.html
    - bat-adls-6:         NOTRUN -> [SKIP][4] ([i915#15656])
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/bat-adls-6/igt@gem_tiled_pread_basic@basic.html

  * igt@i915_pm_rps@basic-api:
    - bat-adlp-6:         NOTRUN -> [SKIP][5] ([i915#6621])
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/bat-adlp-6/igt@i915_pm_rps@basic-api.html

  * igt@i915_selftest@live@workarounds:
    - bat-arlh-2:         [PASS][6] -> [DMESG-FAIL][7] ([i915#12061]) +1 other test dmesg-fail
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/bat-arlh-2/igt@i915_selftest@live@workarounds.html
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/bat-arlh-2/igt@i915_selftest@live@workarounds.html

  * igt@intel_hwmon@hwmon-read:
    - bat-adls-6:         NOTRUN -> [SKIP][8] ([i915#7707]) +1 other test skip
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/bat-adls-6/igt@intel_hwmon@hwmon-read.html
    - bat-adlp-6:         NOTRUN -> [SKIP][9] ([i915#7707]) +1 other test skip
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/bat-adlp-6/igt@intel_hwmon@hwmon-read.html

  * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy:
    - bat-adls-6:         NOTRUN -> [SKIP][10] ([i915#4103]) +1 other test skip
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/bat-adls-6/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy.html
    - bat-adlp-6:         NOTRUN -> [SKIP][11] ([i915#4103]) +1 other test skip
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/bat-adlp-6/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy.html

  * igt@kms_dsc@dsc-basic:
    - bat-adls-6:         NOTRUN -> [SKIP][12] ([i915#3555] / [i915#3840])
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/bat-adls-6/igt@kms_dsc@dsc-basic.html

  * igt@kms_force_connector_basic@force-load-detect:
    - bat-adls-6:         NOTRUN -> [SKIP][13]
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/bat-adls-6/igt@kms_force_connector_basic@force-load-detect.html
    - bat-adlp-6:         NOTRUN -> [SKIP][14]
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/bat-adlp-6/igt@kms_force_connector_basic@force-load-detect.html

  * igt@kms_pm_backlight@basic-brightness:
    - bat-adls-6:         NOTRUN -> [SKIP][15] ([i915#5354])
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/bat-adls-6/igt@kms_pm_backlight@basic-brightness.html

  * igt@kms_psr@psr-primary-mmap-gtt:
    - bat-adls-6:         NOTRUN -> [SKIP][16] ([i915#1072] / [i915#9732]) +3 other tests skip
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/bat-adls-6/igt@kms_psr@psr-primary-mmap-gtt.html

  * igt@kms_setmode@basic-clone-single-crtc:
    - bat-adlp-6:         NOTRUN -> [SKIP][17] ([i915#3555])
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/bat-adlp-6/igt@kms_setmode@basic-clone-single-crtc.html
    - bat-adls-6:         NOTRUN -> [SKIP][18] ([i915#3555])
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/bat-adls-6/igt@kms_setmode@basic-clone-single-crtc.html

  * igt@prime_vgem@basic-fence-read:
    - bat-adls-6:         NOTRUN -> [SKIP][19] ([i915#3291]) +2 other tests skip
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/bat-adls-6/igt@prime_vgem@basic-fence-read.html

  * igt@prime_vgem@basic-write:
    - bat-adlp-6:         NOTRUN -> [SKIP][20] ([i915#3291] / [i915#3708]) +2 other tests skip
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/bat-adlp-6/igt@prime_vgem@basic-write.html

  
#### Possible fixes ####

  * igt@i915_selftest@live@workarounds:
    - bat-arls-6:         [DMESG-FAIL][21] ([i915#12061]) -> [PASS][22] +1 other test pass
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/bat-arls-6/igt@i915_selftest@live@workarounds.html
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/bat-arls-6/igt@i915_selftest@live@workarounds.html

  
  [i915#1072]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1072
  [i915#12061]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12061
  [i915#15656]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15656
  [i915#3291]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3291
  [i915#3555]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3555
  [i915#3708]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3708
  [i915#3840]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3840
  [i915#4103]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4103
  [i915#4613]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4613
  [i915#5354]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5354
  [i915#6621]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6621
  [i915#7707]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7707
  [i915#9732]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9732


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

  * Linux: CI_DRM_18130 -> Patchwork_163033v1

  CI-20190529: 20190529
  CI_DRM_18130: 4a30f5fa0fe382b3915a8208a483d0044c40b9eb @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_8793: c623172fdd4dd92bb23dbc55b3930c40266c3e59 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  Patchwork_163033v1: 4a30f5fa0fe382b3915a8208a483d0044c40b9eb @ git://anongit.freedesktop.org/gfx-ci/linux

== Logs ==

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

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

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

* RE: [PATCH 1/5] drm/i915: move i915 specific bo implementation to i915
  2026-03-11 14:18 ` [PATCH 1/5] drm/i915: move i915 specific bo implementation to i915 Jani Nikula
@ 2026-03-12  3:39   ` Kandpal, Suraj
  2026-03-12  3:52     ` Kandpal, Suraj
  0 siblings, 1 reply; 17+ messages in thread
From: Kandpal, Suraj @ 2026-03-12  3:39 UTC (permalink / raw)
  To: Nikula, Jani, intel-gfx@lists.freedesktop.org,
	intel-xe@lists.freedesktop.org
  Cc: Nikula, Jani

> Subject: [PATCH 1/5] drm/i915: move i915 specific bo implementation to i915
> 
> The bo interface implementation is different for both i915 and xe. Move the
> i915 specific implementation from display to i915 core.
> 
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>

LGTM,
Reviewed-by : Suraj Kandpal <suraj.kandpal@intel.com>

> ---
>  drivers/gpu/drm/i915/Makefile                          | 2 +-
>  drivers/gpu/drm/i915/{display/intel_bo.c => i915_bo.c} | 3 ++-
>  2 files changed, 3 insertions(+), 2 deletions(-)  rename
> drivers/gpu/drm/i915/{display/intel_bo.c => i915_bo.c} (97%)
> 
> diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile
> index 7e9d9b666511..52a82608b8b1 100644
> --- a/drivers/gpu/drm/i915/Makefile
> +++ b/drivers/gpu/drm/i915/Makefile
> @@ -76,6 +76,7 @@ i915-$(CONFIG_PERF_EVENTS) += \
> 
>  # core display adaptation
>  i915-y += \
> +	i915_bo.o \
>  	i915_display_pc8.o \
>  	i915_dpt.o \
>  	i915_dsb_buffer.o \
> @@ -239,7 +240,6 @@ i915-y += \
>  	display/intel_atomic.o \
>  	display/intel_audio.o \
>  	display/intel_bios.o \
> -	display/intel_bo.o \
>  	display/intel_bw.o \
>  	display/intel_casf.o \
>  	display/intel_cdclk.o \
> diff --git a/drivers/gpu/drm/i915/display/intel_bo.c
> b/drivers/gpu/drm/i915/i915_bo.c similarity index 97% rename from
> drivers/gpu/drm/i915/display/intel_bo.c
> rename to drivers/gpu/drm/i915/i915_bo.c index
> 2b6eaec351d8..21a4533ba341 100644
> --- a/drivers/gpu/drm/i915/display/intel_bo.c
> +++ b/drivers/gpu/drm/i915/i915_bo.c
> @@ -3,12 +3,13 @@
> 
>  #include <drm/drm_panic.h>
> 
> +#include "display/intel_bo.h"
> +
>  #include "gem/i915_gem_mman.h"
>  #include "gem/i915_gem_object.h"
>  #include "gem/i915_gem_object_frontbuffer.h"
>  #include "pxp/intel_pxp.h"
>  #include "i915_debugfs.h"
> -#include "intel_bo.h"
> 
>  bool intel_bo_is_tiled(struct drm_gem_object *obj)  {
> --
> 2.47.3


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

* RE: [PATCH 2/5] drm/xe: rename intel_bo.c to xe_display_bo.c
  2026-03-11 14:18 ` [PATCH 2/5] drm/xe: rename intel_bo.c to xe_display_bo.c Jani Nikula
@ 2026-03-12  3:40   ` Kandpal, Suraj
  0 siblings, 0 replies; 17+ messages in thread
From: Kandpal, Suraj @ 2026-03-12  3:40 UTC (permalink / raw)
  To: Nikula, Jani, intel-gfx@lists.freedesktop.org,
	intel-xe@lists.freedesktop.org
  Cc: Nikula, Jani

> Subject: [PATCH 2/5] drm/xe: rename intel_bo.c to xe_display_bo.c
> 
> Follow the xe_ prefixed file naming in xe. With xe_bo.[ch] already being a
> thing in xe core, use xe_display_bo.c.
> 
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>

LGTM,
Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>

> ---
>  drivers/gpu/drm/xe/Makefile                                | 2 +-
>  drivers/gpu/drm/xe/display/{intel_bo.c => xe_display_bo.c} | 0
>  2 files changed, 1 insertion(+), 1 deletion(-)  rename
> drivers/gpu/drm/xe/display/{intel_bo.c => xe_display_bo.c} (100%)
> 
> diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
> index 50608312bc66..aeede4423680 100644
> --- a/drivers/gpu/drm/xe/Makefile
> +++ b/drivers/gpu/drm/xe/Makefile
> @@ -211,10 +211,10 @@ $(obj)/i915-display/%.o:
> $(srctree)/drivers/gpu/drm/i915/display/%.c FORCE
> 
>  # Display code specific to xe
>  xe-$(CONFIG_DRM_XE_DISPLAY) += \
> -	display/intel_bo.o \
>  	display/intel_fb_bo.o \
>  	display/intel_fbdev_fb.o \
>  	display/xe_display.o \
> +	display/xe_display_bo.o \
>  	display/xe_display_pcode.o \
>  	display/xe_display_rpm.o \
>  	display/xe_display_wa.o \
> diff --git a/drivers/gpu/drm/xe/display/intel_bo.c
> b/drivers/gpu/drm/xe/display/xe_display_bo.c
> similarity index 100%
> rename from drivers/gpu/drm/xe/display/intel_bo.c
> rename to drivers/gpu/drm/xe/display/xe_display_bo.c
> --
> 2.47.3


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

* RE: [PATCH 3/5] drm/{i915, xe}/bo: move display bo calls to parent interface
  2026-03-11 14:18 ` [PATCH 3/5] drm/{i915, xe}/bo: move display bo calls to parent interface Jani Nikula
@ 2026-03-12  3:47   ` Kandpal, Suraj
  2026-03-12  4:27     ` Kandpal, Suraj
  0 siblings, 1 reply; 17+ messages in thread
From: Kandpal, Suraj @ 2026-03-12  3:47 UTC (permalink / raw)
  To: Nikula, Jani, intel-gfx@lists.freedesktop.org,
	intel-xe@lists.freedesktop.org
  Cc: Nikula, Jani

> Subject: [PATCH 3/5] drm/{i915, xe}/bo: move display bo calls to parent
> interface
> 
> Continue i915 and xe separation from display by moving the bo calls to the
> display parent interface. Instead of adding all these functions to
> intel_parent.[ch], reuse the now vacated intel_bo.[ch], and avoid mass
> renames to calls of these functions. This is similar to intel_display_rpm.[ch].
> 
> Make many of the hooks optional to avoid having to implement dummy
> functions in xe. Indeed now we can remove many of the existing dummy
> functions.
> 
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> ---
>  drivers/gpu/drm/i915/Makefile                |  1 +
>  drivers/gpu/drm/i915/display/intel_bo.c      | 66 ++++++++++++++++++++
>  drivers/gpu/drm/i915/i915_bo.c               | 32 +++++++---
>  drivers/gpu/drm/i915/i915_bo.h               |  9 +++
>  drivers/gpu/drm/i915/i915_driver.c           |  2 +
>  drivers/gpu/drm/xe/Makefile                  |  1 +
>  drivers/gpu/drm/xe/display/xe_display.c      |  2 +
>  drivers/gpu/drm/xe/display/xe_display_bo.c   | 45 +++----------
>  drivers/gpu/drm/xe/display/xe_display_bo.h   |  9 +++
>  include/drm/intel/display_parent_interface.h | 16 +++++
>  10 files changed, 138 insertions(+), 45 deletions(-)  create mode 100644
> drivers/gpu/drm/i915/display/intel_bo.c
>  create mode 100644 drivers/gpu/drm/i915/i915_bo.h  create mode 100644
> drivers/gpu/drm/xe/display/xe_display_bo.h
> 
> diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile
> index 52a82608b8b1..425933fb26a5 100644
> --- a/drivers/gpu/drm/i915/Makefile
> +++ b/drivers/gpu/drm/i915/Makefile
> @@ -240,6 +240,7 @@ i915-y += \
>  	display/intel_atomic.o \
>  	display/intel_audio.o \
>  	display/intel_bios.o \
> +	display/intel_bo.o \
>  	display/intel_bw.o \
>  	display/intel_casf.o \
>  	display/intel_cdclk.o \
> diff --git a/drivers/gpu/drm/i915/display/intel_bo.c
> b/drivers/gpu/drm/i915/display/intel_bo.c
> new file mode 100644
> index 000000000000..e356ab4e0640
> --- /dev/null
> +++ b/drivers/gpu/drm/i915/display/intel_bo.c
> @@ -0,0 +1,66 @@
> +// SPDX-License-Identifier: MIT
> +/* Copyright © 2026 Intel Corporation */
> +
> +#include <drm/drm_gem.h>
> +#include <drm/intel/display_parent_interface.h>
> +
> +#include "intel_bo.h"
> +#include "intel_display_core.h"
> +#include "intel_display_types.h"
> +
> +bool intel_bo_is_tiled(struct drm_gem_object *obj) {
> +	struct intel_display *display = to_intel_display(obj->dev);
> +
> +	return display->parent->bo->is_tiled &&
> +display->parent->bo->is_tiled(obj);
> +}
> +
> +bool intel_bo_is_userptr(struct drm_gem_object *obj) {
> +	struct intel_display *display = to_intel_display(obj->dev);
> +
> +	return display->parent->bo->is_userptr &&
> +display->parent->bo->is_userptr(obj);
> +}
> +
> +bool intel_bo_is_shmem(struct drm_gem_object *obj) {
> +	struct intel_display *display = to_intel_display(obj->dev);
> +
> +	return display->parent->bo->is_shmem &&
> +display->parent->bo->is_shmem(obj);
> +}
> +
> +bool intel_bo_is_protected(struct drm_gem_object *obj) {
> +	struct intel_display *display = to_intel_display(obj->dev);
> +
> +	return display->parent->bo->is_protected(obj);
> +}
> +
> +int intel_bo_key_check(struct drm_gem_object *obj) {
> +	struct intel_display *display = to_intel_display(obj->dev);
> +
> +	return display->parent->bo->key_check(obj);
> +}
> +
> +int intel_bo_fb_mmap(struct drm_gem_object *obj, struct vm_area_struct
> +*vma) {
> +	struct intel_display *display = to_intel_display(obj->dev);
> +
> +	return display->parent->bo->fb_mmap(obj, vma); }
> +
> +int intel_bo_read_from_page(struct drm_gem_object *obj, u64 offset,
> +void *dst, int size) {
> +	struct intel_display *display = to_intel_display(obj->dev);
> +
> +	return display->parent->bo->read_from_page(obj, offset, dst, size); }
> +
> +void intel_bo_describe(struct seq_file *m, struct drm_gem_object *obj)
> +{
> +	struct intel_display *display = to_intel_display(obj->dev);
> +
> +	if (display->parent->bo->describe)
> +		display->parent->bo->describe(m, obj); 

Nit: Why not follow the same way of making this optional the way you have done on top
Would look consistent.
	return display->parent->bo->describe && display->parent->bo->describe(m, obj);

Otherwise LGTM,
Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>

> diff --git a/drivers/gpu/drm/i915/i915_bo.c
> b/drivers/gpu/drm/i915/i915_bo.c index 21a4533ba341..04fc0e3b7ef6
> 100644
> --- a/drivers/gpu/drm/i915/i915_bo.c
> +++ b/drivers/gpu/drm/i915/i915_bo.c
> @@ -2,51 +2,63 @@
>  /* Copyright © 2024 Intel Corporation */
> 
>  #include <drm/drm_panic.h>
> -
> -#include "display/intel_bo.h"
> +#include <drm/intel/display_parent_interface.h>
> 
>  #include "gem/i915_gem_mman.h"
>  #include "gem/i915_gem_object.h"
>  #include "gem/i915_gem_object_frontbuffer.h"
>  #include "pxp/intel_pxp.h"
> +
> +#include "i915_bo.h"
>  #include "i915_debugfs.h"
> 
> -bool intel_bo_is_tiled(struct drm_gem_object *obj)
> +static bool i915_bo_is_tiled(struct drm_gem_object *obj)
>  {
>  	return i915_gem_object_is_tiled(to_intel_bo(obj));
>  }
> 
> -bool intel_bo_is_userptr(struct drm_gem_object *obj)
> +static bool i915_bo_is_userptr(struct drm_gem_object *obj)
>  {
>  	return i915_gem_object_is_userptr(to_intel_bo(obj));
>  }
> 
> -bool intel_bo_is_shmem(struct drm_gem_object *obj)
> +static bool i915_bo_is_shmem(struct drm_gem_object *obj)
>  {
>  	return i915_gem_object_is_shmem(to_intel_bo(obj));
>  }
> 
> -bool intel_bo_is_protected(struct drm_gem_object *obj)
> +static bool i915_bo_is_protected(struct drm_gem_object *obj)
>  {
>  	return i915_gem_object_is_protected(to_intel_bo(obj));
>  }
> 
> -int intel_bo_key_check(struct drm_gem_object *obj)
> +static int i915_bo_key_check(struct drm_gem_object *obj)
>  {
>  	return intel_pxp_key_check(obj, false);  }
> 
> -int intel_bo_fb_mmap(struct drm_gem_object *obj, struct vm_area_struct
> *vma)
> +static int i915_bo_fb_mmap(struct drm_gem_object *obj, struct
> +vm_area_struct *vma)
>  {
>  	return i915_gem_fb_mmap(to_intel_bo(obj), vma);  }
> 
> -int intel_bo_read_from_page(struct drm_gem_object *obj, u64 offset, void
> *dst, int size)
> +static int i915_bo_read_from_page(struct drm_gem_object *obj, u64
> +offset, void *dst, int size)
>  {
>  	return i915_gem_object_read_from_page(to_intel_bo(obj), offset,
> dst, size);  }
> 
> -void intel_bo_describe(struct seq_file *m, struct drm_gem_object *obj)
> +static void i915_bo_describe(struct seq_file *m, struct drm_gem_object
> +*obj)
>  {
>  	i915_debugfs_describe_obj(m, to_intel_bo(obj));  }
> +
> +const struct intel_display_bo_interface i915_display_bo_interface = {
> +	.is_tiled = i915_bo_is_tiled,
> +	.is_userptr = i915_bo_is_userptr,
> +	.is_shmem = i915_bo_is_shmem,
> +	.is_protected = i915_bo_is_protected,
> +	.key_check = i915_bo_key_check,
> +	.fb_mmap = i915_bo_fb_mmap,
> +	.read_from_page = i915_bo_read_from_page,
> +	.describe = i915_bo_describe,
> +};
> diff --git a/drivers/gpu/drm/i915/i915_bo.h
> b/drivers/gpu/drm/i915/i915_bo.h new file mode 100644 index
> 000000000000..57255d052dd9
> --- /dev/null
> +++ b/drivers/gpu/drm/i915/i915_bo.h
> @@ -0,0 +1,9 @@
> +/* SPDX-License-Identifier: MIT */
> +/* Copyright © 2026 Intel Corporation */
> +
> +#ifndef __I915_BO_H__
> +#define __I915_BO_H__
> +
> +extern const struct intel_display_bo_interface
> +i915_display_bo_interface;
> +
> +#endif /* __I915_BO_H__ */
> diff --git a/drivers/gpu/drm/i915/i915_driver.c
> b/drivers/gpu/drm/i915/i915_driver.c
> index 7a8c59a8c865..385a634c3ed0 100644
> --- a/drivers/gpu/drm/i915/i915_driver.c
> +++ b/drivers/gpu/drm/i915/i915_driver.c
> @@ -90,6 +90,7 @@
>  #include "pxp/intel_pxp_debugfs.h"
>  #include "pxp/intel_pxp_pm.h"
> 
> +#include "i915_bo.h"
>  #include "i915_debugfs.h"
>  #include "i915_display_pc8.h"
>  #include "i915_dpt.h"
> @@ -765,6 +766,7 @@ static bool vgpu_active(struct drm_device *drm)  }
> 
>  static const struct intel_display_parent_interface parent = {
> +	.bo = &i915_display_bo_interface,
>  	.dpt = &i915_display_dpt_interface,
>  	.dsb = &i915_display_dsb_interface,
>  	.frontbuffer = &i915_display_frontbuffer_interface,
> diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
> index aeede4423680..b16ed1ce2a85 100644
> --- a/drivers/gpu/drm/xe/Makefile
> +++ b/drivers/gpu/drm/xe/Makefile
> @@ -235,6 +235,7 @@ xe-$(CONFIG_DRM_XE_DISPLAY) += \
>  	i915-display/intel_audio.o \
>  	i915-display/intel_backlight.o \
>  	i915-display/intel_bios.o \
> +	i915-display/intel_bo.o \
>  	i915-display/intel_bw.o \
>  	i915-display/intel_casf.o \
>  	i915-display/intel_cdclk.o \
> diff --git a/drivers/gpu/drm/xe/display/xe_display.c
> b/drivers/gpu/drm/xe/display/xe_display.c
> index f1e1889a52d3..49b6f98e7391 100644
> --- a/drivers/gpu/drm/xe/display/xe_display.c
> +++ b/drivers/gpu/drm/xe/display/xe_display.c
> @@ -35,6 +35,7 @@
>  #include "intel_hotplug.h"
>  #include "intel_opregion.h"
>  #include "skl_watermark.h"
> +#include "xe_display_bo.h"
>  #include "xe_display_pcode.h"
>  #include "xe_display_rpm.h"
>  #include "xe_dsb_buffer.h"
> @@ -541,6 +542,7 @@ static const struct intel_display_irq_interface
> xe_display_irq_interface = {  };
> 
>  static const struct intel_display_parent_interface parent = {
> +	.bo = &xe_display_bo_interface,
>  	.dsb = &xe_display_dsb_interface,
>  	.frontbuffer = &xe_display_frontbuffer_interface,
>  	.hdcp = &xe_display_hdcp_interface,
> diff --git a/drivers/gpu/drm/xe/display/xe_display_bo.c
> b/drivers/gpu/drm/xe/display/xe_display_bo.c
> index fa1f2c796b81..a53ba3f247ec 100644
> --- a/drivers/gpu/drm/xe/display/xe_display_bo.c
> +++ b/drivers/gpu/drm/xe/display/xe_display_bo.c
> @@ -2,52 +2,27 @@
>  /* Copyright © 2024 Intel Corporation */
> 
>  #include <drm/drm_gem.h>
> +#include <drm/intel/display_parent_interface.h>
> 
> -#include "intel_bo.h"
> -#include "intel_frontbuffer.h"
>  #include "xe_bo.h"
> +#include "xe_display_bo.h"
>  #include "xe_pxp.h"
> 
> -bool intel_bo_is_tiled(struct drm_gem_object *obj) -{
> -	/* legacy tiling is unused */
> -	return false;
> -}
> -
> -bool intel_bo_is_userptr(struct drm_gem_object *obj) -{
> -	/* xe does not have userptr bos */
> -	return false;
> -}
> -
> -bool intel_bo_is_shmem(struct drm_gem_object *obj) -{
> -	return false;
> -}
> -
> -bool intel_bo_is_protected(struct drm_gem_object *obj)
> +static bool xe_display_bo_is_protected(struct drm_gem_object *obj)
>  {
>  	return xe_bo_is_protected(gem_to_xe_bo(obj));
>  }
> 
> -int intel_bo_key_check(struct drm_gem_object *obj) -{
> -	return xe_pxp_obj_key_check(obj);
> -}
> -
> -int intel_bo_fb_mmap(struct drm_gem_object *obj, struct vm_area_struct
> *vma) -{
> -	return drm_gem_prime_mmap(obj, vma);
> -}
> -
> -int intel_bo_read_from_page(struct drm_gem_object *obj, u64 offset, void
> *dst, int size)
> +static int xe_display_bo_read_from_page(struct drm_gem_object *obj, u64
> +offset, void *dst, int size)
>  {
>  	struct xe_bo *bo = gem_to_xe_bo(obj);
> 
>  	return xe_bo_read(bo, offset, dst, size);  }
> 
> -void intel_bo_describe(struct seq_file *m, struct drm_gem_object *obj) -{
> -	/* FIXME */
> -}
> +const struct intel_display_bo_interface xe_display_bo_interface = {
> +	.is_protected = xe_display_bo_is_protected,
> +	.key_check = xe_pxp_obj_key_check,
> +	.fb_mmap = drm_gem_prime_mmap,
> +	.read_from_page = xe_display_bo_read_from_page, };
> diff --git a/drivers/gpu/drm/xe/display/xe_display_bo.h
> b/drivers/gpu/drm/xe/display/xe_display_bo.h
> new file mode 100644
> index 000000000000..6879c104b0b1
> --- /dev/null
> +++ b/drivers/gpu/drm/xe/display/xe_display_bo.h
> @@ -0,0 +1,9 @@
> +/* SPDX-License-Identifier: MIT */
> +/* Copyright © 2026 Intel Corporation */
> +
> +#ifndef __XE_DISPLAY_BO_H__
> +#define __XE_DISPLAY_BO_H__
> +
> +extern const struct intel_display_bo_interface xe_display_bo_interface;
> +
> +#endif
> diff --git a/include/drm/intel/display_parent_interface.h
> b/include/drm/intel/display_parent_interface.h
> index c044472b9400..2b53d12b0e0a 100644
> --- a/include/drm/intel/display_parent_interface.h
> +++ b/include/drm/intel/display_parent_interface.h
> @@ -23,9 +23,22 @@ struct intel_initial_plane_config;  struct intel_panic;
> struct intel_stolen_node;  struct ref_tracker;
> +struct seq_file;
> +struct vm_area_struct;
> 
>  /* Keep struct definitions sorted */
> 
> +struct intel_display_bo_interface {
> +	bool (*is_tiled)(struct drm_gem_object *obj); /* Optional */
> +	bool (*is_userptr)(struct drm_gem_object *obj); /* Optional */
> +	bool (*is_shmem)(struct drm_gem_object *obj); /* Optional */
> +	bool (*is_protected)(struct drm_gem_object *obj);
> +	int (*key_check)(struct drm_gem_object *obj);
> +	int (*fb_mmap)(struct drm_gem_object *obj, struct vm_area_struct
> *vma);
> +	int (*read_from_page)(struct drm_gem_object *obj, u64 offset, void
> *dst, int size);
> +	void (*describe)(struct seq_file *m, struct drm_gem_object *obj); /*
> +Optional */ };
> +
>  struct intel_display_dpt_interface {
>  	struct intel_dpt *(*create)(struct drm_gem_object *obj, size_t size);
>  	void (*destroy)(struct intel_dpt *dpt); @@ -174,6 +187,9 @@ struct
> intel_display_vma_interface {
>   * check the optional pointers.
>   */
>  struct intel_display_parent_interface {
> +	/** @bo: BO interface */
> +	const struct intel_display_bo_interface *bo;
> +
>  	/** @dpt: DPT interface. Optional. */
>  	const struct intel_display_dpt_interface *dpt;
> 
> --
> 2.47.3


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

* RE: [PATCH 4/5] drm/i915/fb: make intel_fb_bo.c less dependent on display
  2026-03-11 14:18 ` [PATCH 4/5] drm/i915/fb: make intel_fb_bo.c less dependent on display Jani Nikula
@ 2026-03-12  3:51   ` Kandpal, Suraj
  0 siblings, 0 replies; 17+ messages in thread
From: Kandpal, Suraj @ 2026-03-12  3:51 UTC (permalink / raw)
  To: Nikula, Jani, intel-gfx@lists.freedesktop.org,
	intel-xe@lists.freedesktop.org
  Cc: Nikula, Jani

> Subject: [PATCH 4/5] drm/i915/fb: make intel_fb_bo.c less dependent on
> display
> 
> intel_fb_bo.c is i915 core specific code, and should use struct
> drm_i915_private instead of struct intel_display.
> 
> Switch one DISPLAY_VER() to GRAPHICS_VER(). The check is for < 4, where
> they're effectively the same thing.
> 
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>

LGTM,
Reviewed-by: Suraj Kandpal@intel.com>

> ---
>  drivers/gpu/drm/i915/display/intel_fb_bo.c | 14 ++++++--------
>  1 file changed, 6 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_fb_bo.c
> b/drivers/gpu/drm/i915/display/intel_fb_bo.c
> index bfecd73d5fa0..a4d49ef450d9 100644
> --- a/drivers/gpu/drm/i915/display/intel_fb_bo.c
> +++ b/drivers/gpu/drm/i915/display/intel_fb_bo.c
> @@ -9,8 +9,6 @@
>  #include "gem/i915_gem_object.h"
> 
>  #include "i915_drv.h"
> -#include "intel_display_core.h"
> -#include "intel_display_types.h"
>  #include "intel_fb.h"
>  #include "intel_fb_bo.h"
> 
> @@ -23,7 +21,7 @@ int intel_fb_bo_framebuffer_init(struct
> drm_gem_object *_obj,
>  				 struct drm_mode_fb_cmd2 *mode_cmd)  {
>  	struct drm_i915_gem_object *obj = to_intel_bo(_obj);
> -	struct intel_display *display = to_intel_display(obj->base.dev);
> +	struct drm_i915_private *i915 = to_i915(obj->base.dev);
>  	unsigned int tiling, stride;
> 
>  	i915_gem_object_lock(obj, NULL);
> @@ -38,7 +36,7 @@ int intel_fb_bo_framebuffer_init(struct
> drm_gem_object *_obj,
>  		 */
>  		if (tiling != I915_TILING_NONE &&
>  		    tiling != intel_fb_modifier_to_tiling(mode_cmd-
> >modifier[0])) {
> -			drm_dbg_kms(display->drm,
> +			drm_dbg_kms(&i915->drm,
>  				    "tiling_mode doesn't match fb modifier\n");
>  			return -EINVAL;
>  		}
> @@ -46,7 +44,7 @@ int intel_fb_bo_framebuffer_init(struct
> drm_gem_object *_obj,
>  		if (tiling == I915_TILING_X) {
>  			mode_cmd->modifier[0] =
> I915_FORMAT_MOD_X_TILED;
>  		} else if (tiling == I915_TILING_Y) {
> -			drm_dbg_kms(display->drm,
> +			drm_dbg_kms(&i915->drm,
>  				    "No Y tiling for legacy addfb\n");
>  			return -EINVAL;
>  		}
> @@ -56,9 +54,9 @@ int intel_fb_bo_framebuffer_init(struct
> drm_gem_object *_obj,
>  	 * gen2/3 display engine uses the fence if present,
>  	 * so the tiling mode must match the fb modifier exactly.
>  	 */
> -	if (DISPLAY_VER(display) < 4 &&
> +	if (GRAPHICS_VER(i915) < 4 &&
>  	    tiling != intel_fb_modifier_to_tiling(mode_cmd->modifier[0])) {
> -		drm_dbg_kms(display->drm,
> +		drm_dbg_kms(&i915->drm,
>  			    "tiling_mode must match fb modifier exactly on
> gen2/3\n");
>  		return -EINVAL;
>  	}
> @@ -68,7 +66,7 @@ int intel_fb_bo_framebuffer_init(struct
> drm_gem_object *_obj,
>  	 * the fb pitch and fence stride match.
>  	 */
>  	if (tiling != I915_TILING_NONE && mode_cmd->pitches[0] != stride) {
> -		drm_dbg_kms(display->drm,
> +		drm_dbg_kms(&i915->drm,
>  			    "pitch (%d) must match tiling stride (%d)\n",
>  			    mode_cmd->pitches[0], stride);
>  		return -EINVAL;
> --
> 2.47.3


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

* RE: [PATCH 1/5] drm/i915: move i915 specific bo implementation to i915
  2026-03-12  3:39   ` Kandpal, Suraj
@ 2026-03-12  3:52     ` Kandpal, Suraj
  0 siblings, 0 replies; 17+ messages in thread
From: Kandpal, Suraj @ 2026-03-12  3:52 UTC (permalink / raw)
  To: Nikula, Jani, intel-gfx@lists.freedesktop.org,
	intel-xe@lists.freedesktop.org
  Cc: Nikula, Jani



> -----Original Message-----
> From: Kandpal, Suraj
> Sent: Thursday, March 12, 2026 9:09 AM
> To: 'Jani Nikula' <jani.nikula@intel.com>; intel-gfx@lists.freedesktop.org;
> intel-xe@lists.freedesktop.org
> Cc: Nikula, Jani <jani.nikula@intel.com>
> Subject: RE: [PATCH 1/5] drm/i915: move i915 specific bo implementation to
> i915
> 
> > Subject: [PATCH 1/5] drm/i915: move i915 specific bo implementation to
> > i915
> >
> > The bo interface implementation is different for both i915 and xe.
> > Move the
> > i915 specific implementation from display to i915 core.
> >
> > Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> 
> 


Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>
> > ---
> >  drivers/gpu/drm/i915/Makefile                          | 2 +-
> >  drivers/gpu/drm/i915/{display/intel_bo.c => i915_bo.c} | 3 ++-
> >  2 files changed, 3 insertions(+), 2 deletions(-)  rename
> > drivers/gpu/drm/i915/{display/intel_bo.c => i915_bo.c} (97%)
> >
> > diff --git a/drivers/gpu/drm/i915/Makefile
> > b/drivers/gpu/drm/i915/Makefile index 7e9d9b666511..52a82608b8b1
> > 100644
> > --- a/drivers/gpu/drm/i915/Makefile
> > +++ b/drivers/gpu/drm/i915/Makefile
> > @@ -76,6 +76,7 @@ i915-$(CONFIG_PERF_EVENTS) += \
> >
> >  # core display adaptation
> >  i915-y += \
> > +	i915_bo.o \
> >  	i915_display_pc8.o \
> >  	i915_dpt.o \
> >  	i915_dsb_buffer.o \
> > @@ -239,7 +240,6 @@ i915-y += \
> >  	display/intel_atomic.o \
> >  	display/intel_audio.o \
> >  	display/intel_bios.o \
> > -	display/intel_bo.o \
> >  	display/intel_bw.o \
> >  	display/intel_casf.o \
> >  	display/intel_cdclk.o \
> > diff --git a/drivers/gpu/drm/i915/display/intel_bo.c
> > b/drivers/gpu/drm/i915/i915_bo.c similarity index 97% rename from
> > drivers/gpu/drm/i915/display/intel_bo.c
> > rename to drivers/gpu/drm/i915/i915_bo.c index
> > 2b6eaec351d8..21a4533ba341 100644
> > --- a/drivers/gpu/drm/i915/display/intel_bo.c
> > +++ b/drivers/gpu/drm/i915/i915_bo.c
> > @@ -3,12 +3,13 @@
> >
> >  #include <drm/drm_panic.h>
> >
> > +#include "display/intel_bo.h"
> > +
> >  #include "gem/i915_gem_mman.h"
> >  #include "gem/i915_gem_object.h"
> >  #include "gem/i915_gem_object_frontbuffer.h"
> >  #include "pxp/intel_pxp.h"
> >  #include "i915_debugfs.h"
> > -#include "intel_bo.h"
> >
> >  bool intel_bo_is_tiled(struct drm_gem_object *obj)  {
> > --
> > 2.47.3


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

* RE: [PATCH 5/5] drm/{i915,xe}: move framebuffer bo to parent interface
  2026-03-11 14:18 ` [PATCH 5/5] drm/{i915,xe}: move framebuffer bo to parent interface Jani Nikula
@ 2026-03-12  4:25   ` Kandpal, Suraj
  2026-03-12  9:00     ` [PATCH 5/5] drm/{i915, xe}: " Jani Nikula
  0 siblings, 1 reply; 17+ messages in thread
From: Kandpal, Suraj @ 2026-03-12  4:25 UTC (permalink / raw)
  To: Nikula, Jani, intel-gfx@lists.freedesktop.org,
	intel-xe@lists.freedesktop.org
  Cc: Nikula, Jani


> Subject: [PATCH 5/5] drm/{i915,xe}: move framebuffer bo to parent interface
> 
> Add .framebuffer_init, .framebuffer_fini and .framebuffer_lookup to the bo
> parent interface. While they're about framebuffers, they're specifically about
> framebuffer objects, so the bo interface is a good enough fit, and there's no
> need to add another interface struct.

Maybe it can also be mentioned that since we move all the functions from
Intel_fb_bo to i915_bo.c we can safely remove it.


> 
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> ---
>  drivers/gpu/drm/i915/Makefile                |  1 -
>  drivers/gpu/drm/i915/display/intel_bo.c      | 21 +++++
>  drivers/gpu/drm/i915/display/intel_bo.h      |  9 ++
>  drivers/gpu/drm/i915/display/intel_fb.c      | 12 +--
>  drivers/gpu/drm/i915/display/intel_fb_bo.c   | 99 --------------------
>  drivers/gpu/drm/i915/display/intel_fb_bo.h   | 25 -----
>  drivers/gpu/drm/i915/i915_bo.c               | 92 ++++++++++++++++++
>  drivers/gpu/drm/xe/Makefile                  |  1 -
>  drivers/gpu/drm/xe/display/intel_fb_bo.c     | 91 ------------------
>  drivers/gpu/drm/xe/display/xe_display_bo.c   | 84 +++++++++++++++++
>  include/drm/intel/display_parent_interface.h |  6 ++
>  11 files changed, 218 insertions(+), 223 deletions(-)  delete mode 100644
> drivers/gpu/drm/i915/display/intel_fb_bo.c
>  delete mode 100644 drivers/gpu/drm/i915/display/intel_fb_bo.h
>  delete mode 100644 drivers/gpu/drm/xe/display/intel_fb_bo.c
> 
> diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile
> index 425933fb26a5..be976a90c5a6 100644
> --- a/drivers/gpu/drm/i915/Makefile
> +++ b/drivers/gpu/drm/i915/Makefile
> @@ -278,7 +278,6 @@ i915-y += \
>  	display/intel_drrs.o \
>  	display/intel_dsb.o \
>  	display/intel_fb.o \
> -	display/intel_fb_bo.o \
>  	display/intel_fb_pin.o \
>  	display/intel_fbc.o \
>  	display/intel_fdi.o \
> diff --git a/drivers/gpu/drm/i915/display/intel_bo.c
> b/drivers/gpu/drm/i915/display/intel_bo.c
> index e356ab4e0640..3b82d38a0504 100644
> --- a/drivers/gpu/drm/i915/display/intel_bo.c
> +++ b/drivers/gpu/drm/i915/display/intel_bo.c
> @@ -64,3 +64,24 @@ void intel_bo_describe(struct seq_file *m, struct
> drm_gem_object *obj)
>  	if (display->parent->bo->describe)
>  		display->parent->bo->describe(m, obj);  }
> +
> +int intel_bo_framebuffer_init(struct drm_gem_object *obj, struct
> +drm_mode_fb_cmd2 *mode_cmd) {
> +	struct intel_display *display = to_intel_display(obj->dev);
> +
> +	return display->parent->bo->framebuffer_init(obj, mode_cmd); }
> +
> +void intel_bo_framebuffer_fini(struct drm_gem_object *obj) {
> +	struct intel_display *display = to_intel_display(obj->dev);
> +
> +	display->parent->bo->framebuffer_fini(obj);

Should we be making this optional . This will help avoid creating dummy functions
for fini like you have done previously.

Regards,
Suraj Kandpal

> +}
> +
> +struct drm_gem_object *intel_bo_framebuffer_lookup(struct intel_display
> *display,
> +						   struct drm_file *filp,
> +						   const struct
> drm_mode_fb_cmd2 *user_mode_cmd) {
> +	return display->parent->bo->framebuffer_lookup(display->drm, filp,
> +user_mode_cmd); }
> diff --git a/drivers/gpu/drm/i915/display/intel_bo.h
> b/drivers/gpu/drm/i915/display/intel_bo.h
> index 40390ed92ceb..aec188c706c2 100644
> --- a/drivers/gpu/drm/i915/display/intel_bo.h
> +++ b/drivers/gpu/drm/i915/display/intel_bo.h
> @@ -6,8 +6,11 @@
> 
>  #include <linux/types.h>
> 
> +struct drm_file;
>  struct drm_gem_object;
> +struct drm_mode_fb_cmd2;
>  struct drm_scanout_buffer;
> +struct intel_display;
>  struct intel_framebuffer;
>  struct seq_file;
>  struct vm_area_struct;
> @@ -22,4 +25,10 @@ int intel_bo_read_from_page(struct drm_gem_object
> *obj, u64 offset, void *dst, i
> 
>  void intel_bo_describe(struct seq_file *m, struct drm_gem_object *obj);
> 
> +void intel_bo_framebuffer_fini(struct drm_gem_object *obj); int
> +intel_bo_framebuffer_init(struct drm_gem_object *obj, struct
> +drm_mode_fb_cmd2 *mode_cmd); struct drm_gem_object
> *intel_bo_framebuffer_lookup(struct intel_display *display,
> +						   struct drm_file *filp,
> +						   const struct
> drm_mode_fb_cmd2 *user_mode_cmd);
> +
>  #endif /* __INTEL_BO__ */
> diff --git a/drivers/gpu/drm/i915/display/intel_fb.c
> b/drivers/gpu/drm/i915/display/intel_fb.c
> index 49c6ca9d94c6..5768619f840f 100644
> --- a/drivers/gpu/drm/i915/display/intel_fb.c
> +++ b/drivers/gpu/drm/i915/display/intel_fb.c
> @@ -17,7 +17,6 @@
>  #include "intel_display_types.h"
>  #include "intel_display_utils.h"
>  #include "intel_fb.h"
> -#include "intel_fb_bo.h"
>  #include "intel_frontbuffer.h"
>  #include "intel_parent.h"
>  #include "intel_plane.h"
> @@ -2111,7 +2110,7 @@ static void intel_user_framebuffer_destroy(struct
> drm_framebuffer *fb)
>  	if (intel_fb_uses_dpt(fb))
>  		intel_parent_dpt_destroy(display, intel_fb->dpt);
> 
> -	intel_fb_bo_framebuffer_fini(intel_fb_bo(fb));
> +	intel_bo_framebuffer_fini(intel_fb_bo(fb));
> 
>  	intel_parent_frontbuffer_put(display, intel_fb->frontbuffer);
> 
> @@ -2222,7 +2221,7 @@ int intel_framebuffer_init(struct intel_framebuffer
> *intel_fb,
> 
>  	/*
>  	 * intel_parent_frontbuffer_get() must be done before
> -	 * intel_fb_bo_framebuffer_init() to avoid set_tiling vs. addfb race.
> +	 * intel_bo_framebuffer_init() to avoid set_tiling vs. addfb race.
>  	 */
>  	intel_fb->frontbuffer = intel_parent_frontbuffer_get(display, obj);
>  	if (!intel_fb->frontbuffer) {
> @@ -2230,7 +2229,7 @@ int intel_framebuffer_init(struct intel_framebuffer
> *intel_fb,
>  		goto err_free_panic;
>  	}
> 
> -	ret = intel_fb_bo_framebuffer_init(obj, mode_cmd);
> +	ret = intel_bo_framebuffer_init(obj, mode_cmd);
>  	if (ret)
>  		goto err_frontbuffer_put;
> 
> @@ -2333,7 +2332,7 @@ int intel_framebuffer_init(struct intel_framebuffer
> *intel_fb,
>  	if (intel_fb_uses_dpt(fb))
>  		intel_parent_dpt_destroy(display, intel_fb->dpt);
>  err_bo_framebuffer_fini:
> -	intel_fb_bo_framebuffer_fini(obj);
> +	intel_bo_framebuffer_fini(obj);
>  err_frontbuffer_put:
>  	intel_parent_frontbuffer_put(display, intel_fb->frontbuffer);
>  err_free_panic:
> @@ -2348,11 +2347,12 @@ intel_user_framebuffer_create(struct
> drm_device *dev,
>  			      const struct drm_format_info *info,
>  			      const struct drm_mode_fb_cmd2
> *user_mode_cmd)  {
> +	struct intel_display *display = to_intel_display(dev);
>  	struct drm_framebuffer *fb;
>  	struct drm_gem_object *obj;
>  	struct drm_mode_fb_cmd2 mode_cmd = *user_mode_cmd;
> 
> -	obj = intel_fb_bo_lookup_valid_bo(dev, filp, &mode_cmd);
> +	obj = intel_bo_framebuffer_lookup(display, filp, &mode_cmd);
>  	if (IS_ERR(obj))
>  		return ERR_CAST(obj);
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_fb_bo.c
> b/drivers/gpu/drm/i915/display/intel_fb_bo.c
> deleted file mode 100644
> index a4d49ef450d9..000000000000
> --- a/drivers/gpu/drm/i915/display/intel_fb_bo.c
> +++ /dev/null
> @@ -1,99 +0,0 @@
> -/* SPDX-License-Identifier: MIT */
> -/*
> - * Copyright © 2021 Intel Corporation
> - */
> -
> -#include <drm/drm_framebuffer.h>
> -#include <drm/drm_print.h>
> -
> -#include "gem/i915_gem_object.h"
> -
> -#include "i915_drv.h"
> -#include "intel_fb.h"
> -#include "intel_fb_bo.h"
> -
> -void intel_fb_bo_framebuffer_fini(struct drm_gem_object *obj) -{
> -	/* Nothing to do for i915 */
> -}
> -
> -int intel_fb_bo_framebuffer_init(struct drm_gem_object *_obj,
> -				 struct drm_mode_fb_cmd2 *mode_cmd)
> -{
> -	struct drm_i915_gem_object *obj = to_intel_bo(_obj);
> -	struct drm_i915_private *i915 = to_i915(obj->base.dev);
> -	unsigned int tiling, stride;
> -
> -	i915_gem_object_lock(obj, NULL);
> -	tiling = i915_gem_object_get_tiling(obj);
> -	stride = i915_gem_object_get_stride(obj);
> -	i915_gem_object_unlock(obj);
> -
> -	if (mode_cmd->flags & DRM_MODE_FB_MODIFIERS) {
> -		/*
> -		 * If there's a fence, enforce that
> -		 * the fb modifier and tiling mode match.
> -		 */
> -		if (tiling != I915_TILING_NONE &&
> -		    tiling != intel_fb_modifier_to_tiling(mode_cmd-
> >modifier[0])) {
> -			drm_dbg_kms(&i915->drm,
> -				    "tiling_mode doesn't match fb modifier\n");
> -			return -EINVAL;
> -		}
> -	} else {
> -		if (tiling == I915_TILING_X) {
> -			mode_cmd->modifier[0] =
> I915_FORMAT_MOD_X_TILED;
> -		} else if (tiling == I915_TILING_Y) {
> -			drm_dbg_kms(&i915->drm,
> -				    "No Y tiling for legacy addfb\n");
> -			return -EINVAL;
> -		}
> -	}
> -
> -	/*
> -	 * gen2/3 display engine uses the fence if present,
> -	 * so the tiling mode must match the fb modifier exactly.
> -	 */
> -	if (GRAPHICS_VER(i915) < 4 &&
> -	    tiling != intel_fb_modifier_to_tiling(mode_cmd->modifier[0])) {
> -		drm_dbg_kms(&i915->drm,
> -			    "tiling_mode must match fb modifier exactly on
> gen2/3\n");
> -		return -EINVAL;
> -	}
> -
> -	/*
> -	 * If there's a fence, enforce that
> -	 * the fb pitch and fence stride match.
> -	 */
> -	if (tiling != I915_TILING_NONE && mode_cmd->pitches[0] != stride) {
> -		drm_dbg_kms(&i915->drm,
> -			    "pitch (%d) must match tiling stride (%d)\n",
> -			    mode_cmd->pitches[0], stride);
> -		return -EINVAL;
> -	}
> -
> -	return 0;
> -}
> -
> -struct drm_gem_object *
> -intel_fb_bo_lookup_valid_bo(struct drm_device *drm,
> -			    struct drm_file *filp,
> -			    const struct drm_mode_fb_cmd2 *mode_cmd)
> -{
> -	struct drm_i915_private *i915 = to_i915(drm);
> -	struct drm_i915_gem_object *obj;
> -
> -	obj = i915_gem_object_lookup(filp, mode_cmd->handles[0]);
> -	if (!obj)
> -		return ERR_PTR(-ENOENT);
> -
> -	/* object is backed with LMEM for discrete */
> -	if (HAS_LMEM(i915) && !i915_gem_object_can_migrate(obj,
> INTEL_REGION_LMEM_0)) {
> -		/* object is "remote", not in local memory */
> -		i915_gem_object_put(obj);
> -		drm_dbg_kms(&i915->drm, "framebuffer must reside in local
> memory\n");
> -		return ERR_PTR(-EREMOTE);
> -	}
> -
> -	return intel_bo_to_drm_bo(obj);
> -}
> diff --git a/drivers/gpu/drm/i915/display/intel_fb_bo.h
> b/drivers/gpu/drm/i915/display/intel_fb_bo.h
> deleted file mode 100644
> index d775773c6c03..000000000000
> --- a/drivers/gpu/drm/i915/display/intel_fb_bo.h
> +++ /dev/null
> @@ -1,25 +0,0 @@
> -/* SPDX-License-Identifier: MIT */
> -/*
> - * Copyright © 2021 Intel Corporation
> - */
> -
> -#ifndef __INTEL_FB_BO_H__
> -#define __INTEL_FB_BO_H__
> -
> -struct drm_device;
> -struct drm_file;
> -struct drm_framebuffer;
> -struct drm_gem_object;
> -struct drm_mode_fb_cmd2;
> -
> -void intel_fb_bo_framebuffer_fini(struct drm_gem_object *obj);
> -
> -int intel_fb_bo_framebuffer_init(struct drm_gem_object *obj,
> -				 struct drm_mode_fb_cmd2 *mode_cmd);
> -
> -struct drm_gem_object *
> -intel_fb_bo_lookup_valid_bo(struct drm_device *drm,
> -			    struct drm_file *filp,
> -			    const struct drm_mode_fb_cmd2
> *user_mode_cmd);
> -
> -#endif
> diff --git a/drivers/gpu/drm/i915/i915_bo.c
> b/drivers/gpu/drm/i915/i915_bo.c index 04fc0e3b7ef6..1789f7cab05c
> 100644
> --- a/drivers/gpu/drm/i915/i915_bo.c
> +++ b/drivers/gpu/drm/i915/i915_bo.c
> @@ -2,8 +2,10 @@
>  /* Copyright © 2024 Intel Corporation */
> 
>  #include <drm/drm_panic.h>
> +#include <drm/drm_print.h>
>  #include <drm/intel/display_parent_interface.h>
> 
> +#include "display/intel_fb.h"
>  #include "gem/i915_gem_mman.h"
>  #include "gem/i915_gem_object.h"
>  #include "gem/i915_gem_object_frontbuffer.h"
> @@ -11,6 +13,7 @@
> 
>  #include "i915_bo.h"
>  #include "i915_debugfs.h"
> +#include "i915_drv.h"
> 
>  static bool i915_bo_is_tiled(struct drm_gem_object *obj)  { @@ -52,6 +55,92
> @@ static void i915_bo_describe(struct seq_file *m, struct drm_gem_object
> *obj)
>  	i915_debugfs_describe_obj(m, to_intel_bo(obj));  }
> 
> +static int i915_bo_framebuffer_init(struct drm_gem_object *_obj,
> +				    struct drm_mode_fb_cmd2 *mode_cmd) {
> +	struct drm_i915_gem_object *obj = to_intel_bo(_obj);
> +	struct drm_i915_private *i915 = to_i915(obj->base.dev);
> +	unsigned int tiling, stride;
> +
> +	i915_gem_object_lock(obj, NULL);
> +	tiling = i915_gem_object_get_tiling(obj);
> +	stride = i915_gem_object_get_stride(obj);
> +	i915_gem_object_unlock(obj);
> +
> +	if (mode_cmd->flags & DRM_MODE_FB_MODIFIERS) {
> +		/*
> +		 * If there's a fence, enforce that
> +		 * the fb modifier and tiling mode match.
> +		 */
> +		if (tiling != I915_TILING_NONE &&
> +		    tiling != intel_fb_modifier_to_tiling(mode_cmd-
> >modifier[0])) {
> +			drm_dbg_kms(&i915->drm,
> +				    "tiling_mode doesn't match fb modifier\n");
> +			return -EINVAL;
> +		}
> +	} else {
> +		if (tiling == I915_TILING_X) {
> +			mode_cmd->modifier[0] =
> I915_FORMAT_MOD_X_TILED;
> +		} else if (tiling == I915_TILING_Y) {
> +			drm_dbg_kms(&i915->drm,
> +				    "No Y tiling for legacy addfb\n");
> +			return -EINVAL;
> +		}
> +	}
> +
> +	/*
> +	 * gen2/3 display engine uses the fence if present,
> +	 * so the tiling mode must match the fb modifier exactly.
> +	 */
> +	if (GRAPHICS_VER(i915) < 4 &&
> +	    tiling != intel_fb_modifier_to_tiling(mode_cmd->modifier[0])) {
> +		drm_dbg_kms(&i915->drm,
> +			    "tiling_mode must match fb modifier exactly on
> gen2/3\n");
> +		return -EINVAL;
> +	}
> +
> +	/*
> +	 * If there's a fence, enforce that
> +	 * the fb pitch and fence stride match.
> +	 */
> +	if (tiling != I915_TILING_NONE && mode_cmd->pitches[0] != stride) {
> +		drm_dbg_kms(&i915->drm,
> +			    "pitch (%d) must match tiling stride (%d)\n",
> +			    mode_cmd->pitches[0], stride);
> +		return -EINVAL;
> +	}
> +
> +	return 0;
> +}
> +
> +static void i915_bo_framebuffer_fini(struct drm_gem_object *obj) {
> +	/* Nothing to do for i915 */
> +}
> +
> +static struct drm_gem_object *
> +i915_bo_framebuffer_lookup(struct drm_device *drm,
> +			   struct drm_file *filp,
> +			   const struct drm_mode_fb_cmd2 *mode_cmd) {
> +	struct drm_i915_private *i915 = to_i915(drm);
> +	struct drm_i915_gem_object *obj;
> +
> +	obj = i915_gem_object_lookup(filp, mode_cmd->handles[0]);
> +	if (!obj)
> +		return ERR_PTR(-ENOENT);
> +
> +	/* object is backed with LMEM for discrete */
> +	if (HAS_LMEM(i915) && !i915_gem_object_can_migrate(obj,
> INTEL_REGION_LMEM_0)) {
> +		/* object is "remote", not in local memory */
> +		i915_gem_object_put(obj);
> +		drm_dbg_kms(&i915->drm, "framebuffer must reside in local
> memory\n");
> +		return ERR_PTR(-EREMOTE);
> +	}
> +
> +	return intel_bo_to_drm_bo(obj);
> +}
> +
>  const struct intel_display_bo_interface i915_display_bo_interface = {
>  	.is_tiled = i915_bo_is_tiled,
>  	.is_userptr = i915_bo_is_userptr,
> @@ -61,4 +150,7 @@ const struct intel_display_bo_interface
> i915_display_bo_interface = {
>  	.fb_mmap = i915_bo_fb_mmap,
>  	.read_from_page = i915_bo_read_from_page,
>  	.describe = i915_bo_describe,
> +	.framebuffer_init = i915_bo_framebuffer_init,
> +	.framebuffer_fini = i915_bo_framebuffer_fini,
> +	.framebuffer_lookup = i915_bo_framebuffer_lookup,
>  };
> diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
> index b16ed1ce2a85..dab979287a96 100644
> --- a/drivers/gpu/drm/xe/Makefile
> +++ b/drivers/gpu/drm/xe/Makefile
> @@ -211,7 +211,6 @@ $(obj)/i915-display/%.o:
> $(srctree)/drivers/gpu/drm/i915/display/%.c FORCE
> 
>  # Display code specific to xe
>  xe-$(CONFIG_DRM_XE_DISPLAY) += \
> -	display/intel_fb_bo.o \
>  	display/intel_fbdev_fb.o \
>  	display/xe_display.o \
>  	display/xe_display_bo.o \
> diff --git a/drivers/gpu/drm/xe/display/intel_fb_bo.c
> b/drivers/gpu/drm/xe/display/intel_fb_bo.c
> deleted file mode 100644
> index db8b1a27b4de..000000000000
> --- a/drivers/gpu/drm/xe/display/intel_fb_bo.c
> +++ /dev/null
> @@ -1,91 +0,0 @@
> -/* SPDX-License-Identifier: MIT */
> -/*
> - * Copyright © 2021 Intel Corporation
> - */
> -
> -#include <drm/drm_modeset_helper.h>
> -#include <drm/ttm/ttm_bo.h>
> -
> -#include "intel_display_types.h"
> -#include "intel_fb.h"
> -#include "intel_fb_bo.h"
> -#include "xe_bo.h"
> -
> -void intel_fb_bo_framebuffer_fini(struct drm_gem_object *obj) -{
> -	struct xe_bo *bo = gem_to_xe_bo(obj);
> -
> -	if (bo->flags & XE_BO_FLAG_PINNED) {
> -		/* Unpin our kernel fb first */
> -		xe_bo_lock(bo, false);
> -		xe_bo_unpin(bo);
> -		xe_bo_unlock(bo);
> -	}
> -	xe_bo_put(bo);
> -}
> -
> -int intel_fb_bo_framebuffer_init(struct drm_gem_object *obj,
> -				 struct drm_mode_fb_cmd2 *mode_cmd)
> -{
> -	struct xe_bo *bo = gem_to_xe_bo(obj);
> -	struct xe_device *xe = to_xe_device(bo->ttm.base.dev);
> -	int ret;
> -
> -	/*
> -	 * Some modifiers require physical alignment of 64KiB VRAM pages;
> -	 * require that the BO in those cases is created correctly.
> -	 */
> -	if (XE_IOCTL_DBG(xe, intel_fb_needs_64k_phys(mode_cmd-
> >modifier[0]) &&
> -			     !(bo->flags & XE_BO_FLAG_NEEDS_64K)))
> -		return -EINVAL;
> -
> -	xe_bo_get(bo);
> -
> -	ret = ttm_bo_reserve(&bo->ttm, true, false, NULL);
> -	if (ret)
> -		goto err;
> -
> -	if (!(bo->flags & XE_BO_FLAG_SCANOUT)) {
> -		/*
> -		 * XE_BO_FLAG_SCANOUT should ideally be set at creation,
> or is
> -		 * automatically set when creating FB. We cannot change
> caching
> -		 * mode when the bo is VM_BINDed, so we can only set
> -		 * coherency with display when unbound.
> -		 */
> -		if (XE_IOCTL_DBG(xe, xe_bo_is_vm_bound(bo))) {
> -			ttm_bo_unreserve(&bo->ttm);
> -			ret = -EINVAL;
> -			goto err;
> -		}
> -		bo->flags |= XE_BO_FLAG_SCANOUT;
> -	}
> -	ttm_bo_unreserve(&bo->ttm);
> -	return 0;
> -
> -err:
> -	xe_bo_put(bo);
> -	return ret;
> -}
> -
> -struct drm_gem_object *intel_fb_bo_lookup_valid_bo(struct drm_device
> *drm,
> -						   struct drm_file *filp,
> -						   const struct
> drm_mode_fb_cmd2 *mode_cmd)
> -{
> -	struct xe_device *xe = to_xe_device(drm);
> -	struct xe_bo *bo;
> -	struct drm_gem_object *gem = drm_gem_object_lookup(filp,
> mode_cmd->handles[0]);
> -
> -	if (!gem)
> -		return ERR_PTR(-ENOENT);
> -
> -	bo = gem_to_xe_bo(gem);
> -	/* Require vram placement or dma-buf import */
> -	if (IS_DGFX(xe) &&
> -	    !xe_bo_can_migrate(bo, XE_PL_VRAM0) &&
> -	    bo->ttm.type != ttm_bo_type_sg) {
> -		drm_gem_object_put(gem);
> -		return ERR_PTR(-EREMOTE);
> -	}
> -
> -	return gem;
> -}
> diff --git a/drivers/gpu/drm/xe/display/xe_display_bo.c
> b/drivers/gpu/drm/xe/display/xe_display_bo.c
> index a53ba3f247ec..a689f71e7b14 100644
> --- a/drivers/gpu/drm/xe/display/xe_display_bo.c
> +++ b/drivers/gpu/drm/xe/display/xe_display_bo.c
> @@ -4,6 +4,7 @@
>  #include <drm/drm_gem.h>
>  #include <drm/intel/display_parent_interface.h>
> 
> +#include "intel_fb.h"
>  #include "xe_bo.h"
>  #include "xe_display_bo.h"
>  #include "xe_pxp.h"
> @@ -20,9 +21,92 @@ static int xe_display_bo_read_from_page(struct
> drm_gem_object *obj, u64 offset,
>  	return xe_bo_read(bo, offset, dst, size);  }
> 
> +static int xe_display_bo_framebuffer_init(struct drm_gem_object *obj,
> +					  struct drm_mode_fb_cmd2
> *mode_cmd) {
> +	struct xe_bo *bo = gem_to_xe_bo(obj);
> +	struct xe_device *xe = to_xe_device(bo->ttm.base.dev);
> +	int ret;
> +
> +	/*
> +	 * Some modifiers require physical alignment of 64KiB VRAM pages;
> +	 * require that the BO in those cases is created correctly.
> +	 */
> +	if (XE_IOCTL_DBG(xe, intel_fb_needs_64k_phys(mode_cmd-
> >modifier[0]) &&
> +			     !(bo->flags & XE_BO_FLAG_NEEDS_64K)))
> +		return -EINVAL;
> +
> +	xe_bo_get(bo);
> +
> +	ret = ttm_bo_reserve(&bo->ttm, true, false, NULL);
> +	if (ret)
> +		goto err;
> +
> +	if (!(bo->flags & XE_BO_FLAG_SCANOUT)) {
> +		/*
> +		 * XE_BO_FLAG_SCANOUT should ideally be set at creation,
> or is
> +		 * automatically set when creating FB. We cannot change
> caching
> +		 * mode when the bo is VM_BINDed, so we can only set
> +		 * coherency with display when unbound.
> +		 */
> +		if (XE_IOCTL_DBG(xe, xe_bo_is_vm_bound(bo))) {
> +			ttm_bo_unreserve(&bo->ttm);
> +			ret = -EINVAL;
> +			goto err;
> +		}
> +		bo->flags |= XE_BO_FLAG_SCANOUT;
> +	}
> +	ttm_bo_unreserve(&bo->ttm);
> +	return 0;
> +
> +err:
> +	xe_bo_put(bo);
> +	return ret;
> +}
> +
> +static void xe_display_bo_framebuffer_fini(struct drm_gem_object *obj)
> +{
> +	struct xe_bo *bo = gem_to_xe_bo(obj);
> +
> +	if (bo->flags & XE_BO_FLAG_PINNED) {
> +		/* Unpin our kernel fb first */
> +		xe_bo_lock(bo, false);
> +		xe_bo_unpin(bo);
> +		xe_bo_unlock(bo);
> +	}
> +	xe_bo_put(bo);
> +}
> +
> +static struct drm_gem_object *
> +xe_display_bo_framebuffer_lookup(struct drm_device *drm,
> +				 struct drm_file *filp,
> +				 const struct drm_mode_fb_cmd2
> *mode_cmd) {
> +	struct xe_device *xe = to_xe_device(drm);
> +	struct xe_bo *bo;
> +	struct drm_gem_object *gem = drm_gem_object_lookup(filp,
> +mode_cmd->handles[0]);
> +
> +	if (!gem)
> +		return ERR_PTR(-ENOENT);
> +
> +	bo = gem_to_xe_bo(gem);
> +	/* Require vram placement or dma-buf import */
> +	if (IS_DGFX(xe) &&
> +	    !xe_bo_can_migrate(bo, XE_PL_VRAM0) &&
> +	    bo->ttm.type != ttm_bo_type_sg) {
> +		drm_gem_object_put(gem);
> +		return ERR_PTR(-EREMOTE);
> +	}
> +
> +	return gem;
> +}
> +
>  const struct intel_display_bo_interface xe_display_bo_interface = {
>  	.is_protected = xe_display_bo_is_protected,
>  	.key_check = xe_pxp_obj_key_check,
>  	.fb_mmap = drm_gem_prime_mmap,
>  	.read_from_page = xe_display_bo_read_from_page,
> +	.framebuffer_init = xe_display_bo_framebuffer_init,
> +	.framebuffer_fini = xe_display_bo_framebuffer_fini,
> +	.framebuffer_lookup = xe_display_bo_framebuffer_lookup,
>  };
> diff --git a/include/drm/intel/display_parent_interface.h
> b/include/drm/intel/display_parent_interface.h
> index 2b53d12b0e0a..97ec94a2e749 100644
> --- a/include/drm/intel/display_parent_interface.h
> +++ b/include/drm/intel/display_parent_interface.h
> @@ -12,6 +12,7 @@ struct drm_device;
>  struct drm_file;
>  struct drm_framebuffer;
>  struct drm_gem_object;
> +struct drm_mode_fb_cmd2;
>  struct drm_plane_state;
>  struct drm_scanout_buffer;
>  struct i915_vma;
> @@ -37,6 +38,11 @@ struct intel_display_bo_interface {
>  	int (*fb_mmap)(struct drm_gem_object *obj, struct vm_area_struct
> *vma);
>  	int (*read_from_page)(struct drm_gem_object *obj, u64 offset, void
> *dst, int size);
>  	void (*describe)(struct seq_file *m, struct drm_gem_object *obj); /*
> Optional */
> +	int (*framebuffer_init)(struct drm_gem_object *obj, struct
> drm_mode_fb_cmd2 *mode_cmd);
> +	void (*framebuffer_fini)(struct drm_gem_object *obj);
> +	struct drm_gem_object *(*framebuffer_lookup)(struct drm_device
> *drm,
> +						     struct drm_file *filp,
> +						     const struct
> drm_mode_fb_cmd2 *user_mode_cmd);
>  };
> 
>  struct intel_display_dpt_interface {
> --
> 2.47.3


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

* RE: [PATCH 3/5] drm/{i915, xe}/bo: move display bo calls to parent interface
  2026-03-12  3:47   ` Kandpal, Suraj
@ 2026-03-12  4:27     ` Kandpal, Suraj
  0 siblings, 0 replies; 17+ messages in thread
From: Kandpal, Suraj @ 2026-03-12  4:27 UTC (permalink / raw)
  To: Nikula, Jani, intel-gfx@lists.freedesktop.org,
	intel-xe@lists.freedesktop.org
  Cc: Nikula, Jani

> Subject: RE: [PATCH 3/5] drm/{i915, xe}/bo: move display bo calls to parent
> interface
> 
> > Subject: [PATCH 3/5] drm/{i915, xe}/bo: move display bo calls to
> > parent interface
> >
> > Continue i915 and xe separation from display by moving the bo calls to
> > the display parent interface. Instead of adding all these functions to
> > intel_parent.[ch], reuse the now vacated intel_bo.[ch], and avoid mass
> > renames to calls of these functions. This is similar to intel_display_rpm.[ch].
> >
> > Make many of the hooks optional to avoid having to implement dummy
> > functions in xe. Indeed now we can remove many of the existing dummy
> > functions.
> >
> > Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> > ---
> >  drivers/gpu/drm/i915/Makefile                |  1 +
> >  drivers/gpu/drm/i915/display/intel_bo.c      | 66 ++++++++++++++++++++
> >  drivers/gpu/drm/i915/i915_bo.c               | 32 +++++++---
> >  drivers/gpu/drm/i915/i915_bo.h               |  9 +++
> >  drivers/gpu/drm/i915/i915_driver.c           |  2 +
> >  drivers/gpu/drm/xe/Makefile                  |  1 +
> >  drivers/gpu/drm/xe/display/xe_display.c      |  2 +
> >  drivers/gpu/drm/xe/display/xe_display_bo.c   | 45 +++----------
> >  drivers/gpu/drm/xe/display/xe_display_bo.h   |  9 +++
> >  include/drm/intel/display_parent_interface.h | 16 +++++
> >  10 files changed, 138 insertions(+), 45 deletions(-)  create mode
> > 100644 drivers/gpu/drm/i915/display/intel_bo.c
> >  create mode 100644 drivers/gpu/drm/i915/i915_bo.h  create mode 100644
> > drivers/gpu/drm/xe/display/xe_display_bo.h
> >
> > diff --git a/drivers/gpu/drm/i915/Makefile
> > b/drivers/gpu/drm/i915/Makefile index 52a82608b8b1..425933fb26a5
> > 100644
> > --- a/drivers/gpu/drm/i915/Makefile
> > +++ b/drivers/gpu/drm/i915/Makefile
> > @@ -240,6 +240,7 @@ i915-y += \
> >  	display/intel_atomic.o \
> >  	display/intel_audio.o \
> >  	display/intel_bios.o \
> > +	display/intel_bo.o \
> >  	display/intel_bw.o \
> >  	display/intel_casf.o \
> >  	display/intel_cdclk.o \
> > diff --git a/drivers/gpu/drm/i915/display/intel_bo.c
> > b/drivers/gpu/drm/i915/display/intel_bo.c
> > new file mode 100644
> > index 000000000000..e356ab4e0640
> > --- /dev/null
> > +++ b/drivers/gpu/drm/i915/display/intel_bo.c
> > @@ -0,0 +1,66 @@
> > +// SPDX-License-Identifier: MIT
> > +/* Copyright © 2026 Intel Corporation */
> > +
> > +#include <drm/drm_gem.h>
> > +#include <drm/intel/display_parent_interface.h>
> > +
> > +#include "intel_bo.h"
> > +#include "intel_display_core.h"
> > +#include "intel_display_types.h"
> > +
> > +bool intel_bo_is_tiled(struct drm_gem_object *obj) {
> > +	struct intel_display *display = to_intel_display(obj->dev);
> > +
> > +	return display->parent->bo->is_tiled &&
> > +display->parent->bo->is_tiled(obj);
> > +}
> > +
> > +bool intel_bo_is_userptr(struct drm_gem_object *obj) {
> > +	struct intel_display *display = to_intel_display(obj->dev);
> > +
> > +	return display->parent->bo->is_userptr &&
> > +display->parent->bo->is_userptr(obj);
> > +}
> > +
> > +bool intel_bo_is_shmem(struct drm_gem_object *obj) {
> > +	struct intel_display *display = to_intel_display(obj->dev);
> > +
> > +	return display->parent->bo->is_shmem &&
> > +display->parent->bo->is_shmem(obj);
> > +}
> > +
> > +bool intel_bo_is_protected(struct drm_gem_object *obj) {
> > +	struct intel_display *display = to_intel_display(obj->dev);
> > +
> > +	return display->parent->bo->is_protected(obj);
> > +}
> > +
> > +int intel_bo_key_check(struct drm_gem_object *obj) {
> > +	struct intel_display *display = to_intel_display(obj->dev);
> > +
> > +	return display->parent->bo->key_check(obj);
> > +}
> > +
> > +int intel_bo_fb_mmap(struct drm_gem_object *obj, struct
> > +vm_area_struct
> > +*vma) {
> > +	struct intel_display *display = to_intel_display(obj->dev);
> > +
> > +	return display->parent->bo->fb_mmap(obj, vma); }
> > +
> > +int intel_bo_read_from_page(struct drm_gem_object *obj, u64 offset,
> > +void *dst, int size) {
> > +	struct intel_display *display = to_intel_display(obj->dev);
> > +
> > +	return display->parent->bo->read_from_page(obj, offset, dst, size);
> > +}
> > +
> > +void intel_bo_describe(struct seq_file *m, struct drm_gem_object
> > +*obj) {
> > +	struct intel_display *display = to_intel_display(obj->dev);
> > +
> > +	if (display->parent->bo->describe)
> > +		display->parent->bo->describe(m, obj);
> 
> Nit: Why not follow the same way of making this optional the way you have
> done on top Would look consistent.
> 	return display->parent->bo->describe && display->parent->bo-
> >describe(m, obj);

Ahh nevermind, I missed that it was a void function. In that case it make perfect sense.

Regards,
Suraj Kandpal

> 
> Otherwise LGTM,
> Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>
> 
> > diff --git a/drivers/gpu/drm/i915/i915_bo.c
> > b/drivers/gpu/drm/i915/i915_bo.c index 21a4533ba341..04fc0e3b7ef6
> > 100644
> > --- a/drivers/gpu/drm/i915/i915_bo.c
> > +++ b/drivers/gpu/drm/i915/i915_bo.c
> > @@ -2,51 +2,63 @@
> >  /* Copyright © 2024 Intel Corporation */
> >
> >  #include <drm/drm_panic.h>
> > -
> > -#include "display/intel_bo.h"
> > +#include <drm/intel/display_parent_interface.h>
> >
> >  #include "gem/i915_gem_mman.h"
> >  #include "gem/i915_gem_object.h"
> >  #include "gem/i915_gem_object_frontbuffer.h"
> >  #include "pxp/intel_pxp.h"
> > +
> > +#include "i915_bo.h"
> >  #include "i915_debugfs.h"
> >
> > -bool intel_bo_is_tiled(struct drm_gem_object *obj)
> > +static bool i915_bo_is_tiled(struct drm_gem_object *obj)
> >  {
> >  	return i915_gem_object_is_tiled(to_intel_bo(obj));
> >  }
> >
> > -bool intel_bo_is_userptr(struct drm_gem_object *obj)
> > +static bool i915_bo_is_userptr(struct drm_gem_object *obj)
> >  {
> >  	return i915_gem_object_is_userptr(to_intel_bo(obj));
> >  }
> >
> > -bool intel_bo_is_shmem(struct drm_gem_object *obj)
> > +static bool i915_bo_is_shmem(struct drm_gem_object *obj)
> >  {
> >  	return i915_gem_object_is_shmem(to_intel_bo(obj));
> >  }
> >
> > -bool intel_bo_is_protected(struct drm_gem_object *obj)
> > +static bool i915_bo_is_protected(struct drm_gem_object *obj)
> >  {
> >  	return i915_gem_object_is_protected(to_intel_bo(obj));
> >  }
> >
> > -int intel_bo_key_check(struct drm_gem_object *obj)
> > +static int i915_bo_key_check(struct drm_gem_object *obj)
> >  {
> >  	return intel_pxp_key_check(obj, false);  }
> >
> > -int intel_bo_fb_mmap(struct drm_gem_object *obj, struct
> > vm_area_struct
> > *vma)
> > +static int i915_bo_fb_mmap(struct drm_gem_object *obj, struct
> > +vm_area_struct *vma)
> >  {
> >  	return i915_gem_fb_mmap(to_intel_bo(obj), vma);  }
> >
> > -int intel_bo_read_from_page(struct drm_gem_object *obj, u64 offset,
> > void *dst, int size)
> > +static int i915_bo_read_from_page(struct drm_gem_object *obj, u64
> > +offset, void *dst, int size)
> >  {
> >  	return i915_gem_object_read_from_page(to_intel_bo(obj), offset,
> dst,
> > size);  }
> >
> > -void intel_bo_describe(struct seq_file *m, struct drm_gem_object
> > *obj)
> > +static void i915_bo_describe(struct seq_file *m, struct
> > +drm_gem_object
> > +*obj)
> >  {
> >  	i915_debugfs_describe_obj(m, to_intel_bo(obj));  }
> > +
> > +const struct intel_display_bo_interface i915_display_bo_interface = {
> > +	.is_tiled = i915_bo_is_tiled,
> > +	.is_userptr = i915_bo_is_userptr,
> > +	.is_shmem = i915_bo_is_shmem,
> > +	.is_protected = i915_bo_is_protected,
> > +	.key_check = i915_bo_key_check,
> > +	.fb_mmap = i915_bo_fb_mmap,
> > +	.read_from_page = i915_bo_read_from_page,
> > +	.describe = i915_bo_describe,
> > +};
> > diff --git a/drivers/gpu/drm/i915/i915_bo.h
> > b/drivers/gpu/drm/i915/i915_bo.h new file mode 100644 index
> > 000000000000..57255d052dd9
> > --- /dev/null
> > +++ b/drivers/gpu/drm/i915/i915_bo.h
> > @@ -0,0 +1,9 @@
> > +/* SPDX-License-Identifier: MIT */
> > +/* Copyright © 2026 Intel Corporation */
> > +
> > +#ifndef __I915_BO_H__
> > +#define __I915_BO_H__
> > +
> > +extern const struct intel_display_bo_interface
> > +i915_display_bo_interface;
> > +
> > +#endif /* __I915_BO_H__ */
> > diff --git a/drivers/gpu/drm/i915/i915_driver.c
> > b/drivers/gpu/drm/i915/i915_driver.c
> > index 7a8c59a8c865..385a634c3ed0 100644
> > --- a/drivers/gpu/drm/i915/i915_driver.c
> > +++ b/drivers/gpu/drm/i915/i915_driver.c
> > @@ -90,6 +90,7 @@
> >  #include "pxp/intel_pxp_debugfs.h"
> >  #include "pxp/intel_pxp_pm.h"
> >
> > +#include "i915_bo.h"
> >  #include "i915_debugfs.h"
> >  #include "i915_display_pc8.h"
> >  #include "i915_dpt.h"
> > @@ -765,6 +766,7 @@ static bool vgpu_active(struct drm_device *drm)  }
> >
> >  static const struct intel_display_parent_interface parent = {
> > +	.bo = &i915_display_bo_interface,
> >  	.dpt = &i915_display_dpt_interface,
> >  	.dsb = &i915_display_dsb_interface,
> >  	.frontbuffer = &i915_display_frontbuffer_interface,
> > diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
> > index aeede4423680..b16ed1ce2a85 100644
> > --- a/drivers/gpu/drm/xe/Makefile
> > +++ b/drivers/gpu/drm/xe/Makefile
> > @@ -235,6 +235,7 @@ xe-$(CONFIG_DRM_XE_DISPLAY) += \
> >  	i915-display/intel_audio.o \
> >  	i915-display/intel_backlight.o \
> >  	i915-display/intel_bios.o \
> > +	i915-display/intel_bo.o \
> >  	i915-display/intel_bw.o \
> >  	i915-display/intel_casf.o \
> >  	i915-display/intel_cdclk.o \
> > diff --git a/drivers/gpu/drm/xe/display/xe_display.c
> > b/drivers/gpu/drm/xe/display/xe_display.c
> > index f1e1889a52d3..49b6f98e7391 100644
> > --- a/drivers/gpu/drm/xe/display/xe_display.c
> > +++ b/drivers/gpu/drm/xe/display/xe_display.c
> > @@ -35,6 +35,7 @@
> >  #include "intel_hotplug.h"
> >  #include "intel_opregion.h"
> >  #include "skl_watermark.h"
> > +#include "xe_display_bo.h"
> >  #include "xe_display_pcode.h"
> >  #include "xe_display_rpm.h"
> >  #include "xe_dsb_buffer.h"
> > @@ -541,6 +542,7 @@ static const struct intel_display_irq_interface
> > xe_display_irq_interface = {  };
> >
> >  static const struct intel_display_parent_interface parent = {
> > +	.bo = &xe_display_bo_interface,
> >  	.dsb = &xe_display_dsb_interface,
> >  	.frontbuffer = &xe_display_frontbuffer_interface,
> >  	.hdcp = &xe_display_hdcp_interface,
> > diff --git a/drivers/gpu/drm/xe/display/xe_display_bo.c
> > b/drivers/gpu/drm/xe/display/xe_display_bo.c
> > index fa1f2c796b81..a53ba3f247ec 100644
> > --- a/drivers/gpu/drm/xe/display/xe_display_bo.c
> > +++ b/drivers/gpu/drm/xe/display/xe_display_bo.c
> > @@ -2,52 +2,27 @@
> >  /* Copyright © 2024 Intel Corporation */
> >
> >  #include <drm/drm_gem.h>
> > +#include <drm/intel/display_parent_interface.h>
> >
> > -#include "intel_bo.h"
> > -#include "intel_frontbuffer.h"
> >  #include "xe_bo.h"
> > +#include "xe_display_bo.h"
> >  #include "xe_pxp.h"
> >
> > -bool intel_bo_is_tiled(struct drm_gem_object *obj) -{
> > -	/* legacy tiling is unused */
> > -	return false;
> > -}
> > -
> > -bool intel_bo_is_userptr(struct drm_gem_object *obj) -{
> > -	/* xe does not have userptr bos */
> > -	return false;
> > -}
> > -
> > -bool intel_bo_is_shmem(struct drm_gem_object *obj) -{
> > -	return false;
> > -}
> > -
> > -bool intel_bo_is_protected(struct drm_gem_object *obj)
> > +static bool xe_display_bo_is_protected(struct drm_gem_object *obj)
> >  {
> >  	return xe_bo_is_protected(gem_to_xe_bo(obj));
> >  }
> >
> > -int intel_bo_key_check(struct drm_gem_object *obj) -{
> > -	return xe_pxp_obj_key_check(obj);
> > -}
> > -
> > -int intel_bo_fb_mmap(struct drm_gem_object *obj, struct
> > vm_area_struct
> > *vma) -{
> > -	return drm_gem_prime_mmap(obj, vma);
> > -}
> > -
> > -int intel_bo_read_from_page(struct drm_gem_object *obj, u64 offset,
> > void *dst, int size)
> > +static int xe_display_bo_read_from_page(struct drm_gem_object *obj,
> > +u64 offset, void *dst, int size)
> >  {
> >  	struct xe_bo *bo = gem_to_xe_bo(obj);
> >
> >  	return xe_bo_read(bo, offset, dst, size);  }
> >
> > -void intel_bo_describe(struct seq_file *m, struct drm_gem_object *obj) -{
> > -	/* FIXME */
> > -}
> > +const struct intel_display_bo_interface xe_display_bo_interface = {
> > +	.is_protected = xe_display_bo_is_protected,
> > +	.key_check = xe_pxp_obj_key_check,
> > +	.fb_mmap = drm_gem_prime_mmap,
> > +	.read_from_page = xe_display_bo_read_from_page, };
> > diff --git a/drivers/gpu/drm/xe/display/xe_display_bo.h
> > b/drivers/gpu/drm/xe/display/xe_display_bo.h
> > new file mode 100644
> > index 000000000000..6879c104b0b1
> > --- /dev/null
> > +++ b/drivers/gpu/drm/xe/display/xe_display_bo.h
> > @@ -0,0 +1,9 @@
> > +/* SPDX-License-Identifier: MIT */
> > +/* Copyright © 2026 Intel Corporation */
> > +
> > +#ifndef __XE_DISPLAY_BO_H__
> > +#define __XE_DISPLAY_BO_H__
> > +
> > +extern const struct intel_display_bo_interface
> > +xe_display_bo_interface;
> > +
> > +#endif
> > diff --git a/include/drm/intel/display_parent_interface.h
> > b/include/drm/intel/display_parent_interface.h
> > index c044472b9400..2b53d12b0e0a 100644
> > --- a/include/drm/intel/display_parent_interface.h
> > +++ b/include/drm/intel/display_parent_interface.h
> > @@ -23,9 +23,22 @@ struct intel_initial_plane_config;  struct
> > intel_panic; struct intel_stolen_node;  struct ref_tracker;
> > +struct seq_file;
> > +struct vm_area_struct;
> >
> >  /* Keep struct definitions sorted */
> >
> > +struct intel_display_bo_interface {
> > +	bool (*is_tiled)(struct drm_gem_object *obj); /* Optional */
> > +	bool (*is_userptr)(struct drm_gem_object *obj); /* Optional */
> > +	bool (*is_shmem)(struct drm_gem_object *obj); /* Optional */
> > +	bool (*is_protected)(struct drm_gem_object *obj);
> > +	int (*key_check)(struct drm_gem_object *obj);
> > +	int (*fb_mmap)(struct drm_gem_object *obj, struct vm_area_struct
> > *vma);
> > +	int (*read_from_page)(struct drm_gem_object *obj, u64 offset, void
> > *dst, int size);
> > +	void (*describe)(struct seq_file *m, struct drm_gem_object *obj); /*
> > +Optional */ };
> > +
> >  struct intel_display_dpt_interface {
> >  	struct intel_dpt *(*create)(struct drm_gem_object *obj, size_t size);
> >  	void (*destroy)(struct intel_dpt *dpt); @@ -174,6 +187,9 @@ struct
> > intel_display_vma_interface {
> >   * check the optional pointers.
> >   */
> >  struct intel_display_parent_interface {
> > +	/** @bo: BO interface */
> > +	const struct intel_display_bo_interface *bo;
> > +
> >  	/** @dpt: DPT interface. Optional. */
> >  	const struct intel_display_dpt_interface *dpt;
> >
> > --
> > 2.47.3


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

* ✓ i915.CI.Full: success for drm/{i915,xe}: move bo stuff to parent interface
  2026-03-11 14:18 [PATCH 0/5] drm/{i915,xe}: move bo stuff to parent interface Jani Nikula
                   ` (5 preceding siblings ...)
  2026-03-11 15:33 ` ✓ i915.CI.BAT: success for drm/{i915,xe}: move bo stuff " Patchwork
@ 2026-03-12  6:37 ` Patchwork
  6 siblings, 0 replies; 17+ messages in thread
From: Patchwork @ 2026-03-12  6:37 UTC (permalink / raw)
  To: Jani Nikula; +Cc: intel-gfx

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

== Series Details ==

Series: drm/{i915,xe}: move bo stuff to parent interface
URL   : https://patchwork.freedesktop.org/series/163033/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_18130_full -> Patchwork_163033v1_full
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  

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

  No changes in participating hosts

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

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

### IGT changes ###

#### Issues hit ####

  * igt@api_intel_bb@object-reloc-keep-cache:
    - shard-rkl:          NOTRUN -> [SKIP][1] ([i915#8411])
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-8/igt@api_intel_bb@object-reloc-keep-cache.html

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

  * igt@gem_close_race@multigpu-basic-process:
    - shard-rkl:          NOTRUN -> [SKIP][3] ([i915#7697])
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-5/igt@gem_close_race@multigpu-basic-process.html

  * igt@gem_create@create-ext-cpu-access-big:
    - shard-tglu:         NOTRUN -> [SKIP][4] ([i915#6335])
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-tglu-10/igt@gem_create@create-ext-cpu-access-big.html

  * igt@gem_ctx_persistence@engines-persistence:
    - shard-snb:          NOTRUN -> [SKIP][5] ([i915#1099]) +2 other tests skip
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-snb6/igt@gem_ctx_persistence@engines-persistence.html

  * igt@gem_ctx_sseu@engines:
    - shard-tglu-1:       NOTRUN -> [SKIP][6] ([i915#280])
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-tglu-1/igt@gem_ctx_sseu@engines.html

  * igt@gem_eio@unwedge-stress:
    - shard-snb:          NOTRUN -> [FAIL][7] ([i915#8898]) +1 other test fail
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-snb6/igt@gem_eio@unwedge-stress.html

  * igt@gem_exec_balancer@parallel-balancer:
    - shard-tglu:         NOTRUN -> [SKIP][8] ([i915#4525]) +1 other test skip
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-tglu-6/igt@gem_exec_balancer@parallel-balancer.html

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

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

  * igt@gem_exec_suspend@basic-s0:
    - shard-rkl:          [PASS][11] -> [INCOMPLETE][12] ([i915#13356]) +1 other test incomplete
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-7/igt@gem_exec_suspend@basic-s0.html
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-6/igt@gem_exec_suspend@basic-s0.html

  * igt@gem_exec_suspend@basic-s3:
    - shard-glk11:        NOTRUN -> [INCOMPLETE][13] ([i915#13196] / [i915#13356]) +1 other test incomplete
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-glk11/igt@gem_exec_suspend@basic-s3.html

  * igt@gem_huc_copy@huc-copy:
    - shard-tglu:         NOTRUN -> [SKIP][14] ([i915#2190])
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-tglu-6/igt@gem_huc_copy@huc-copy.html

  * igt@gem_lmem_swapping@basic:
    - shard-glk:          NOTRUN -> [SKIP][15] ([i915#4613]) +2 other tests skip
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-glk6/igt@gem_lmem_swapping@basic.html

  * igt@gem_lmem_swapping@parallel-random-verify:
    - shard-tglu-1:       NOTRUN -> [SKIP][16] ([i915#4613])
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-tglu-1/igt@gem_lmem_swapping@parallel-random-verify.html

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

  * igt@gem_pwrite@basic-exhaustion:
    - shard-glk:          NOTRUN -> [WARN][18] ([i915#14702] / [i915#2658])
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-glk9/igt@gem_pwrite@basic-exhaustion.html

  * igt@gem_pxp@hw-rejects-pxp-context:
    - shard-tglu:         NOTRUN -> [SKIP][19] ([i915#13398])
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-tglu-10/igt@gem_pxp@hw-rejects-pxp-context.html

  * igt@gem_tiled_partial_pwrite_pread@reads:
    - shard-rkl:          NOTRUN -> [SKIP][20] ([i915#3282])
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-5/igt@gem_tiled_partial_pwrite_pread@reads.html

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

  * igt@gem_userptr_blits@dmabuf-sync:
    - shard-glk:          NOTRUN -> [SKIP][22] ([i915#3323])
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-glk9/igt@gem_userptr_blits@dmabuf-sync.html

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

  * igt@gen9_exec_parse@allowed-single:
    - shard-glk:          [PASS][24] -> [ABORT][25] ([i915#5566])
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-glk2/igt@gen9_exec_parse@allowed-single.html
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-glk4/igt@gen9_exec_parse@allowed-single.html

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

  * igt@gen9_exec_parse@bb-start-out:
    - shard-rkl:          NOTRUN -> [SKIP][27] ([i915#2527])
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-8/igt@gen9_exec_parse@bb-start-out.html

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

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

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

  * igt@i915_pm_freq_api@freq-suspend:
    - shard-rkl:          NOTRUN -> [SKIP][31] ([i915#8399])
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-8/igt@i915_pm_freq_api@freq-suspend.html

  * igt@i915_pm_rc6_residency@rc6-fence:
    - shard-tglu:         NOTRUN -> [WARN][32] ([i915#13790] / [i915#2681]) +1 other test warn
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-tglu-10/igt@i915_pm_rc6_residency@rc6-fence.html

  * igt@i915_pm_rc6_residency@rc6-idle:
    - shard-tglu-1:       NOTRUN -> [SKIP][33] ([i915#14498])
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-tglu-1/igt@i915_pm_rc6_residency@rc6-idle.html

  * igt@i915_pm_rps@reset:
    - shard-snb:          [PASS][34] -> [INCOMPLETE][35] ([i915#13821])
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-snb6/igt@i915_pm_rps@reset.html
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-snb1/igt@i915_pm_rps@reset.html

  * igt@i915_query@hwconfig_table:
    - shard-rkl:          NOTRUN -> [SKIP][36] ([i915#6245])
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-4/igt@i915_query@hwconfig_table.html

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

  * igt@i915_suspend@debugfs-reader:
    - shard-glk:          NOTRUN -> [INCOMPLETE][38] ([i915#4817]) +1 other test incomplete
   [38]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-glk5/igt@i915_suspend@debugfs-reader.html

  * igt@i915_suspend@fence-restore-tiled2untiled:
    - shard-rkl:          [PASS][39] -> [INCOMPLETE][40] ([i915#4817])
   [39]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-4/igt@i915_suspend@fence-restore-tiled2untiled.html
   [40]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-6/igt@i915_suspend@fence-restore-tiled2untiled.html

  * igt@kms_atomic_transition@plane-all-modeset-transition:
    - shard-dg1:          [PASS][41] -> [DMESG-WARN][42] ([i915#4423])
   [41]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-dg1-12/igt@kms_atomic_transition@plane-all-modeset-transition.html
   [42]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-dg1-12/igt@kms_atomic_transition@plane-all-modeset-transition.html

  * igt@kms_atomic_transition@plane-all-modeset-transition@pipe-a-hdmi-a-3:
    - shard-dg2:          NOTRUN -> [FAIL][43] ([i915#5956])
   [43]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-dg2-8/igt@kms_atomic_transition@plane-all-modeset-transition@pipe-a-hdmi-a-3.html

  * igt@kms_atomic_transition@plane-toggle-modeset-transition@pipe-a-edp-1:
    - shard-mtlp:         [PASS][44] -> [FAIL][45] ([i915#5956]) +1 other test fail
   [44]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-mtlp-2/igt@kms_atomic_transition@plane-toggle-modeset-transition@pipe-a-edp-1.html
   [45]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-mtlp-4/igt@kms_atomic_transition@plane-toggle-modeset-transition@pipe-a-edp-1.html

  * igt@kms_atomic_transition@plane-toggle-modeset-transition@pipe-a-hdmi-a-3:
    - shard-dg2:          [PASS][46] -> [FAIL][47] ([i915#5956]) +2 other tests fail
   [46]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-dg2-5/igt@kms_atomic_transition@plane-toggle-modeset-transition@pipe-a-hdmi-a-3.html
   [47]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-dg2-5/igt@kms_atomic_transition@plane-toggle-modeset-transition@pipe-a-hdmi-a-3.html

  * igt@kms_big_fb@4-tiled-64bpp-rotate-180:
    - shard-rkl:          NOTRUN -> [SKIP][48] ([i915#5286])
   [48]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-5/igt@kms_big_fb@4-tiled-64bpp-rotate-180.html

  * igt@kms_big_fb@4-tiled-addfb:
    - shard-tglu:         NOTRUN -> [SKIP][49] ([i915#5286]) +5 other tests skip
   [49]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-tglu-10/igt@kms_big_fb@4-tiled-addfb.html

  * igt@kms_big_fb@4-tiled-addfb-size-overflow:
    - shard-tglu-1:       NOTRUN -> [SKIP][50] ([i915#5286]) +2 other tests skip
   [50]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-tglu-1/igt@kms_big_fb@4-tiled-addfb-size-overflow.html

  * igt@kms_big_fb@linear-64bpp-rotate-90:
    - shard-rkl:          NOTRUN -> [SKIP][51] ([i915#3638]) +4 other tests skip
   [51]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-8/igt@kms_big_fb@linear-64bpp-rotate-90.html

  * igt@kms_big_fb@linear-max-hw-stride-32bpp-rotate-180:
    - shard-glk11:        NOTRUN -> [DMESG-WARN][52] ([i915#118])
   [52]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-glk11/igt@kms_big_fb@linear-max-hw-stride-32bpp-rotate-180.html

  * igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-180:
    - shard-rkl:          NOTRUN -> [SKIP][53] +3 other tests skip
   [53]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-5/igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-180.html

  * igt@kms_ccs@bad-rotation-90-4-tiled-bmg-ccs:
    - shard-tglu:         NOTRUN -> [SKIP][54] ([i915#12313])
   [54]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-tglu-10/igt@kms_ccs@bad-rotation-90-4-tiled-bmg-ccs.html

  * igt@kms_ccs@bad-rotation-90-y-tiled-ccs@pipe-b-hdmi-a-1:
    - shard-rkl:          NOTRUN -> [SKIP][55] ([i915#6095]) +63 other tests skip
   [55]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-2/igt@kms_ccs@bad-rotation-90-y-tiled-ccs@pipe-b-hdmi-a-1.html

  * igt@kms_ccs@ccs-on-another-bo-4-tiled-mtl-rc-ccs-cc@pipe-d-hdmi-a-1:
    - shard-tglu:         NOTRUN -> [SKIP][56] ([i915#6095]) +39 other tests skip
   [56]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-tglu-10/igt@kms_ccs@ccs-on-another-bo-4-tiled-mtl-rc-ccs-cc@pipe-d-hdmi-a-1.html

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

  * igt@kms_ccs@crc-primary-basic-y-tiled-ccs:
    - shard-tglu-1:       NOTRUN -> [SKIP][58] ([i915#6095]) +24 other tests skip
   [58]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-tglu-1/igt@kms_ccs@crc-primary-basic-y-tiled-ccs.html

  * igt@kms_ccs@crc-primary-basic-y-tiled-gen12-rc-ccs@pipe-d-hdmi-a-1:
    - shard-dg2:          NOTRUN -> [SKIP][59] ([i915#10307] / [i915#10434] / [i915#6095]) +1 other test skip
   [59]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-dg2-4/igt@kms_ccs@crc-primary-basic-y-tiled-gen12-rc-ccs@pipe-d-hdmi-a-1.html

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

  * igt@kms_ccs@crc-primary-rotation-180-y-tiled-gen12-rc-ccs-cc@pipe-b-hdmi-a-1:
    - shard-dg2:          NOTRUN -> [SKIP][61] ([i915#10307] / [i915#6095]) +49 other tests skip
   [61]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-dg2-4/igt@kms_ccs@crc-primary-rotation-180-y-tiled-gen12-rc-ccs-cc@pipe-b-hdmi-a-1.html

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

  * igt@kms_ccs@crc-sprite-planes-basic-4-tiled-bmg-ccs:
    - shard-tglu-1:       NOTRUN -> [SKIP][63] ([i915#12313])
   [63]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-tglu-1/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-bmg-ccs.html

  * igt@kms_ccs@crc-sprite-planes-basic-4-tiled-lnl-ccs:
    - shard-rkl:          NOTRUN -> [SKIP][64] ([i915#12313]) +1 other test skip
   [64]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-8/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-lnl-ccs.html

  * igt@kms_ccs@crc-sprite-planes-basic-y-tiled-ccs@pipe-c-hdmi-a-1:
    - shard-rkl:          NOTRUN -> [SKIP][65] ([i915#14098] / [i915#6095]) +39 other tests skip
   [65]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-2/igt@kms_ccs@crc-sprite-planes-basic-y-tiled-ccs@pipe-c-hdmi-a-1.html

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

  * igt@kms_ccs@missing-ccs-buffer-yf-tiled-ccs@pipe-b-hdmi-a-1:
    - shard-dg1:          NOTRUN -> [SKIP][67] ([i915#6095]) +155 other tests skip
   [67]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-dg1-14/igt@kms_ccs@missing-ccs-buffer-yf-tiled-ccs@pipe-b-hdmi-a-1.html

  * igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs@pipe-c-hdmi-a-2:
    - shard-glk10:        NOTRUN -> [SKIP][68] +52 other tests skip
   [68]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-glk10/igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs@pipe-c-hdmi-a-2.html

  * igt@kms_ccs@random-ccs-data-y-tiled-gen12-rc-ccs@pipe-a-hdmi-a-1:
    - shard-glk:          NOTRUN -> [SKIP][69] +228 other tests skip
   [69]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-glk6/igt@kms_ccs@random-ccs-data-y-tiled-gen12-rc-ccs@pipe-a-hdmi-a-1.html

  * igt@kms_cdclk@plane-scaling:
    - shard-tglu:         NOTRUN -> [SKIP][70] ([i915#3742])
   [70]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-tglu-10/igt@kms_cdclk@plane-scaling.html

  * igt@kms_cdclk@plane-scaling@pipe-c-hdmi-a-3:
    - shard-dg2:          NOTRUN -> [SKIP][71] ([i915#13783]) +3 other tests skip
   [71]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-dg2-1/igt@kms_cdclk@plane-scaling@pipe-c-hdmi-a-3.html

  * igt@kms_chamelium_edid@dp-edid-resolution-list:
    - shard-tglu:         NOTRUN -> [SKIP][72] ([i915#11151] / [i915#7828]) +5 other tests skip
   [72]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-tglu-10/igt@kms_chamelium_edid@dp-edid-resolution-list.html

  * igt@kms_chamelium_frames@hdmi-crc-multiple:
    - shard-rkl:          NOTRUN -> [SKIP][73] ([i915#11151] / [i915#7828]) +3 other tests skip
   [73]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-4/igt@kms_chamelium_frames@hdmi-crc-multiple.html

  * igt@kms_chamelium_hpd@dp-hpd-after-suspend:
    - shard-glk11:        NOTRUN -> [SKIP][74] +143 other tests skip
   [74]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-glk11/igt@kms_chamelium_hpd@dp-hpd-after-suspend.html

  * igt@kms_chamelium_hpd@dp-hpd-storm-disable:
    - shard-tglu-1:       NOTRUN -> [SKIP][75] ([i915#11151] / [i915#7828]) +4 other tests skip
   [75]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-tglu-1/igt@kms_chamelium_hpd@dp-hpd-storm-disable.html

  * igt@kms_content_protection@atomic-dpms-hdcp14:
    - shard-tglu-1:       NOTRUN -> [SKIP][76] ([i915#6944])
   [76]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-tglu-1/igt@kms_content_protection@atomic-dpms-hdcp14.html

  * igt@kms_content_protection@dp-mst-lic-type-0:
    - shard-tglu:         NOTRUN -> [SKIP][77] ([i915#15330] / [i915#3116] / [i915#3299]) +1 other test skip
   [77]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-tglu-6/igt@kms_content_protection@dp-mst-lic-type-0.html

  * igt@kms_content_protection@uevent:
    - shard-tglu-1:       NOTRUN -> [SKIP][78] ([i915#6944] / [i915#7116] / [i915#7118] / [i915#9424])
   [78]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-tglu-1/igt@kms_content_protection@uevent.html

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

  * igt@kms_cursor_crc@cursor-onscreen-512x170:
    - shard-tglu:         NOTRUN -> [SKIP][80] ([i915#13049])
   [80]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-tglu-10/igt@kms_cursor_crc@cursor-onscreen-512x170.html

  * igt@kms_cursor_crc@cursor-rapid-movement-32x10:
    - shard-tglu:         NOTRUN -> [SKIP][81] ([i915#3555]) +4 other tests skip
   [81]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-tglu-10/igt@kms_cursor_crc@cursor-rapid-movement-32x10.html

  * igt@kms_cursor_crc@cursor-rapid-movement-32x32:
    - shard-tglu-1:       NOTRUN -> [SKIP][82] ([i915#3555])
   [82]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-tglu-1/igt@kms_cursor_crc@cursor-rapid-movement-32x32.html

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

  * igt@kms_cursor_crc@cursor-sliding-256x85@pipe-a-hdmi-a-1:
    - shard-rkl:          NOTRUN -> [FAIL][84] ([i915#13566])
   [84]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-5/igt@kms_cursor_crc@cursor-sliding-256x85@pipe-a-hdmi-a-1.html

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

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

  * igt@kms_cursor_legacy@short-busy-flip-before-cursor-toggle:
    - shard-rkl:          NOTRUN -> [SKIP][87] ([i915#4103])
   [87]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-4/igt@kms_cursor_legacy@short-busy-flip-before-cursor-toggle.html

  * igt@kms_dither@fb-8bpc-vs-panel-6bpc:
    - shard-tglu:         NOTRUN -> [SKIP][88] ([i915#1769] / [i915#3555] / [i915#3804])
   [88]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-tglu-6/igt@kms_dither@fb-8bpc-vs-panel-6bpc.html

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

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

  * igt@kms_dsc@dsc-fractional-bpp:
    - shard-rkl:          NOTRUN -> [SKIP][91] ([i915#3840])
   [91]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-8/igt@kms_dsc@dsc-fractional-bpp.html

  * igt@kms_dsc@dsc-with-bpc-formats:
    - shard-rkl:          NOTRUN -> [SKIP][92] ([i915#3555] / [i915#3840]) +1 other test skip
   [92]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-5/igt@kms_dsc@dsc-with-bpc-formats.html

  * igt@kms_dsc@dsc-with-output-formats-with-bpc:
    - shard-tglu:         NOTRUN -> [SKIP][93] ([i915#3840] / [i915#9053])
   [93]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-tglu-6/igt@kms_dsc@dsc-with-output-formats-with-bpc.html

  * igt@kms_fbcon_fbt@fbc-suspend:
    - shard-rkl:          [PASS][94] -> [INCOMPLETE][95] ([i915#9878])
   [94]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-8/igt@kms_fbcon_fbt@fbc-suspend.html
   [95]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-3/igt@kms_fbcon_fbt@fbc-suspend.html

  * igt@kms_feature_discovery@display-2x:
    - shard-tglu-1:       NOTRUN -> [SKIP][96] ([i915#1839])
   [96]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-tglu-1/igt@kms_feature_discovery@display-2x.html

  * igt@kms_feature_discovery@psr1:
    - shard-tglu:         NOTRUN -> [SKIP][97] ([i915#658]) +1 other test skip
   [97]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-tglu-10/igt@kms_feature_discovery@psr1.html

  * igt@kms_flip@2x-blocking-wf_vblank:
    - shard-rkl:          NOTRUN -> [SKIP][98] ([i915#9934]) +5 other tests skip
   [98]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-4/igt@kms_flip@2x-blocking-wf_vblank.html

  * igt@kms_flip@2x-flip-vs-rmfb-interruptible:
    - shard-tglu-1:       NOTRUN -> [SKIP][99] ([i915#3637] / [i915#9934])
   [99]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-tglu-1/igt@kms_flip@2x-flip-vs-rmfb-interruptible.html

  * igt@kms_flip@2x-flip-vs-suspend-interruptible:
    - shard-glk10:        NOTRUN -> [INCOMPLETE][100] ([i915#12745] / [i915#4839])
   [100]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-glk10/igt@kms_flip@2x-flip-vs-suspend-interruptible.html

  * igt@kms_flip@2x-flip-vs-suspend-interruptible@ab-hdmi-a1-hdmi-a2:
    - shard-glk10:        NOTRUN -> [INCOMPLETE][101] ([i915#4839])
   [101]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-glk10/igt@kms_flip@2x-flip-vs-suspend-interruptible@ab-hdmi-a1-hdmi-a2.html

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

  * igt@kms_flip@flip-vs-expired-vblank@a-hdmi-a4:
    - shard-dg1:          [PASS][103] -> [FAIL][104] ([i915#13027]) +1 other test fail
   [103]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-dg1-18/igt@kms_flip@flip-vs-expired-vblank@a-hdmi-a4.html
   [104]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-dg1-17/igt@kms_flip@flip-vs-expired-vblank@a-hdmi-a4.html

  * igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-64bpp-yftile-upscaling:
    - shard-tglu:         NOTRUN -> [SKIP][105] ([i915#15643]) +1 other test skip
   [105]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-tglu-10/igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-64bpp-yftile-upscaling.html

  * igt@kms_flip_scaled_crc@flip-32bpp-ytileccs-to-64bpp-ytile-downscaling:
    - shard-tglu-1:       NOTRUN -> [SKIP][106] ([i915#15643])
   [106]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-tglu-1/igt@kms_flip_scaled_crc@flip-32bpp-ytileccs-to-64bpp-ytile-downscaling.html

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

  * igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-shrfb-plflip-blt:
    - shard-tglu:         NOTRUN -> [SKIP][108] +44 other tests skip
   [108]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-tglu-10/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-shrfb-plflip-blt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-offscreen-pri-shrfb-draw-mmap-wc:
    - shard-snb:          NOTRUN -> [SKIP][109] +144 other tests skip
   [109]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-snb6/igt@kms_frontbuffer_tracking@fbcpsr-1p-offscreen-pri-shrfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-shrfb-pgflip-blt:
    - shard-tglu-1:       NOTRUN -> [SKIP][110] +24 other tests skip
   [110]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-tglu-1/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-shrfb-pgflip-blt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-spr-indfb-draw-blt:
    - shard-rkl:          NOTRUN -> [SKIP][111] ([i915#1825]) +22 other tests skip
   [111]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-8/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-spr-indfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-modesetfrombusy:
    - shard-tglu:         NOTRUN -> [SKIP][112] ([i915#15102]) +15 other tests skip
   [112]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-tglu-10/igt@kms_frontbuffer_tracking@fbcpsr-modesetfrombusy.html

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

  * igt@kms_frontbuffer_tracking@psr-1p-offscreen-pri-shrfb-draw-blt:
    - shard-rkl:          NOTRUN -> [SKIP][114] ([i915#15102])
   [114]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-5/igt@kms_frontbuffer_tracking@psr-1p-offscreen-pri-shrfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@psr-1p-offscreen-pri-shrfb-draw-mmap-gtt:
    - shard-tglu-1:       NOTRUN -> [SKIP][115] ([i915#15102]) +9 other tests skip
   [115]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-tglu-1/igt@kms_frontbuffer_tracking@psr-1p-offscreen-pri-shrfb-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@psr-rgb565-draw-render:
    - shard-rkl:          NOTRUN -> [SKIP][116] ([i915#15102] / [i915#3023]) +9 other tests skip
   [116]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-4/igt@kms_frontbuffer_tracking@psr-rgb565-draw-render.html

  * igt@kms_hdr@bpc-switch-dpms:
    - shard-rkl:          [PASS][117] -> [SKIP][118] ([i915#3555] / [i915#8228])
   [117]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-6/igt@kms_hdr@bpc-switch-dpms.html
   [118]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-4/igt@kms_hdr@bpc-switch-dpms.html

  * igt@kms_hdr@invalid-hdr:
    - shard-rkl:          NOTRUN -> [SKIP][119] ([i915#3555] / [i915#8228])
   [119]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-4/igt@kms_hdr@invalid-hdr.html

  * igt@kms_hdr@static-swap:
    - shard-tglu:         NOTRUN -> [SKIP][120] ([i915#3555] / [i915#8228])
   [120]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-tglu-6/igt@kms_hdr@static-swap.html

  * igt@kms_hdr@static-toggle:
    - shard-tglu-1:       NOTRUN -> [SKIP][121] ([i915#3555] / [i915#8228])
   [121]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-tglu-1/igt@kms_hdr@static-toggle.html

  * igt@kms_multipipe_modeset@basic-max-pipe-crc-check:
    - shard-rkl:          NOTRUN -> [SKIP][122] ([i915#15815])
   [122]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-5/igt@kms_multipipe_modeset@basic-max-pipe-crc-check.html

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

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

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

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

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

  * igt@kms_plane_multiple@2x-tiling-y:
    - shard-tglu:         NOTRUN -> [SKIP][128] ([i915#13958])
   [128]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-tglu-6/igt@kms_plane_multiple@2x-tiling-y.html

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

  * igt@kms_plane_scaling@plane-scaler-with-clipping-clamping-rotation@pipe-b:
    - shard-rkl:          NOTRUN -> [SKIP][130] ([i915#15329]) +2 other tests skip
   [130]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-8/igt@kms_plane_scaling@plane-scaler-with-clipping-clamping-rotation@pipe-b.html

  * igt@kms_pm_backlight@bad-brightness:
    - shard-tglu:         NOTRUN -> [SKIP][131] ([i915#9812])
   [131]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-tglu-10/igt@kms_pm_backlight@bad-brightness.html

  * igt@kms_pm_backlight@fade-with-suspend:
    - shard-rkl:          NOTRUN -> [SKIP][132] ([i915#5354])
   [132]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-4/igt@kms_pm_backlight@fade-with-suspend.html

  * igt@kms_pm_dc@dc5-retention-flops:
    - shard-rkl:          NOTRUN -> [SKIP][133] ([i915#3828]) +1 other test skip
   [133]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-8/igt@kms_pm_dc@dc5-retention-flops.html

  * igt@kms_pm_dc@dc6-psr:
    - shard-tglu-1:       NOTRUN -> [SKIP][134] ([i915#9685])
   [134]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-tglu-1/igt@kms_pm_dc@dc6-psr.html

  * igt@kms_pm_lpsp@screens-disabled:
    - shard-tglu:         NOTRUN -> [SKIP][135] ([i915#8430])
   [135]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-tglu-10/igt@kms_pm_lpsp@screens-disabled.html

  * igt@kms_pm_rpm@modeset-lpsp-stress-no-wait:
    - shard-dg1:          [PASS][136] -> [SKIP][137] ([i915#15073])
   [136]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-dg1-14/igt@kms_pm_rpm@modeset-lpsp-stress-no-wait.html
   [137]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-dg1-13/igt@kms_pm_rpm@modeset-lpsp-stress-no-wait.html

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

  * igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait:
    - shard-rkl:          [PASS][139] -> [SKIP][140] ([i915#15073]) +1 other test skip
   [139]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-4/igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait.html
   [140]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-2/igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait.html

  * igt@kms_pm_rpm@system-suspend-modeset:
    - shard-glk:          NOTRUN -> [INCOMPLETE][141] ([i915#10553])
   [141]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-glk8/igt@kms_pm_rpm@system-suspend-modeset.html
    - shard-rkl:          [PASS][142] -> [INCOMPLETE][143] ([i915#14419])
   [142]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-2/igt@kms_pm_rpm@system-suspend-modeset.html
   [143]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-6/igt@kms_pm_rpm@system-suspend-modeset.html

  * igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-exceed-sf:
    - shard-rkl:          NOTRUN -> [SKIP][144] ([i915#11520]) +2 other tests skip
   [144]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-5/igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-exceed-sf.html

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

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

  * igt@kms_psr2_sf@pr-overlay-plane-update-sf-dmg-area:
    - shard-glk:          NOTRUN -> [SKIP][147] ([i915#11520]) +4 other tests skip
   [147]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-glk9/igt@kms_psr2_sf@pr-overlay-plane-update-sf-dmg-area.html

  * igt@kms_psr2_sf@psr2-cursor-plane-move-continuous-exceed-fully-sf:
    - shard-snb:          NOTRUN -> [SKIP][148] ([i915#11520]) +2 other tests skip
   [148]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-snb1/igt@kms_psr2_sf@psr2-cursor-plane-move-continuous-exceed-fully-sf.html
    - shard-glk10:        NOTRUN -> [SKIP][149] ([i915#11520]) +1 other test skip
   [149]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-glk10/igt@kms_psr2_sf@psr2-cursor-plane-move-continuous-exceed-fully-sf.html

  * igt@kms_psr2_sf@psr2-cursor-plane-move-continuous-exceed-sf:
    - shard-glk11:        NOTRUN -> [SKIP][150] ([i915#11520]) +5 other tests skip
   [150]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-glk11/igt@kms_psr2_sf@psr2-cursor-plane-move-continuous-exceed-sf.html

  * igt@kms_psr2_su@page_flip-p010:
    - shard-tglu:         NOTRUN -> [SKIP][151] ([i915#9683])
   [151]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-tglu-6/igt@kms_psr2_su@page_flip-p010.html

  * igt@kms_psr@fbc-pr-cursor-mmap-gtt:
    - shard-rkl:          NOTRUN -> [SKIP][152] ([i915#1072] / [i915#9732]) +10 other tests skip
   [152]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-8/igt@kms_psr@fbc-pr-cursor-mmap-gtt.html

  * igt@kms_psr@fbc-pr-suspend:
    - shard-tglu:         NOTRUN -> [SKIP][153] ([i915#9732]) +11 other tests skip
   [153]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-tglu-10/igt@kms_psr@fbc-pr-suspend.html

  * igt@kms_psr@psr2-sprite-mmap-gtt:
    - shard-tglu-1:       NOTRUN -> [SKIP][154] ([i915#9732]) +10 other tests skip
   [154]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-tglu-1/igt@kms_psr@psr2-sprite-mmap-gtt.html

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

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

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

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

  * igt@kms_setmode@basic-clone-single-crtc:
    - shard-rkl:          NOTRUN -> [SKIP][159] ([i915#3555]) +3 other tests skip
   [159]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-5/igt@kms_setmode@basic-clone-single-crtc.html

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

  * igt@kms_vrr@seamless-rr-switch-drrs:
    - shard-tglu-1:       NOTRUN -> [SKIP][161] ([i915#9906])
   [161]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-tglu-1/igt@kms_vrr@seamless-rr-switch-drrs.html

  * igt@perf_pmu@busy-double-start@rcs0:
    - shard-mtlp:         [PASS][162] -> [FAIL][163] ([i915#4349])
   [162]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-mtlp-1/igt@perf_pmu@busy-double-start@rcs0.html
   [163]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-mtlp-4/igt@perf_pmu@busy-double-start@rcs0.html

  * igt@perf_pmu@busy-double-start@vecs1:
    - shard-dg2:          [PASS][164] -> [FAIL][165] ([i915#4349]) +4 other tests fail
   [164]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-dg2-6/igt@perf_pmu@busy-double-start@vecs1.html
   [165]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-dg2-5/igt@perf_pmu@busy-double-start@vecs1.html

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

  * igt@sriov_basic@enable-vfs-bind-unbind-each-numvfs-all:
    - shard-tglu:         NOTRUN -> [FAIL][167] ([i915#12910])
   [167]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-tglu-10/igt@sriov_basic@enable-vfs-bind-unbind-each-numvfs-all.html

  
#### Possible fixes ####

  * igt@drm_read@fault-buffer:
    - shard-dg1:          [DMESG-WARN][168] ([i915#4423]) -> [PASS][169] +1 other test pass
   [168]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-dg1-19/igt@drm_read@fault-buffer.html
   [169]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-dg1-18/igt@drm_read@fault-buffer.html

  * igt@gem_lmem_swapping@smem-oom:
    - shard-dg1:          [FAIL][170] ([i915#15734]) -> [PASS][171]
   [170]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-dg1-13/igt@gem_lmem_swapping@smem-oom.html
   [171]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-dg1-16/igt@gem_lmem_swapping@smem-oom.html

  * igt@gem_lmem_swapping@smem-oom@lmem0:
    - shard-dg1:          [CRASH][172] ([i915#5493]) -> [PASS][173]
   [172]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-dg1-13/igt@gem_lmem_swapping@smem-oom@lmem0.html
   [173]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-dg1-16/igt@gem_lmem_swapping@smem-oom@lmem0.html

  * igt@gem_workarounds@suspend-resume-fd:
    - shard-glk:          [INCOMPLETE][174] ([i915#13356] / [i915#14586]) -> [PASS][175]
   [174]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-glk8/igt@gem_workarounds@suspend-resume-fd.html
   [175]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-glk9/igt@gem_workarounds@suspend-resume-fd.html

  * igt@i915_selftest@live:
    - shard-mtlp:         [DMESG-FAIL][176] ([i915#12061] / [i915#15560]) -> [PASS][177]
   [176]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-mtlp-5/igt@i915_selftest@live.html
   [177]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-mtlp-2/igt@i915_selftest@live.html

  * igt@i915_selftest@live@workarounds:
    - shard-mtlp:         [DMESG-FAIL][178] ([i915#12061]) -> [PASS][179]
   [178]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-mtlp-5/igt@i915_selftest@live@workarounds.html
   [179]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-mtlp-2/igt@i915_selftest@live@workarounds.html

  * igt@i915_suspend@basic-s2idle-without-i915:
    - shard-dg1:          [DMESG-WARN][180] ([i915#4391] / [i915#4423]) -> [PASS][181]
   [180]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-dg1-18/igt@i915_suspend@basic-s2idle-without-i915.html
   [181]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-dg1-17/igt@i915_suspend@basic-s2idle-without-i915.html

  * igt@kms_cursor_crc@cursor-suspend:
    - shard-rkl:          [INCOMPLETE][182] ([i915#12358] / [i915#14152]) -> [PASS][183]
   [182]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-3/igt@kms_cursor_crc@cursor-suspend.html
   [183]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-8/igt@kms_cursor_crc@cursor-suspend.html

  * igt@kms_force_connector_basic@force-edid:
    - shard-mtlp:         [SKIP][184] ([i915#15672]) -> [PASS][185]
   [184]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-mtlp-1/igt@kms_force_connector_basic@force-edid.html
   [185]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-mtlp-5/igt@kms_force_connector_basic@force-edid.html

  * igt@kms_pm_lpsp@kms-lpsp:
    - shard-dg2:          [SKIP][186] ([i915#9340]) -> [PASS][187]
   [186]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-dg2-6/igt@kms_pm_lpsp@kms-lpsp.html
   [187]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-dg2-4/igt@kms_pm_lpsp@kms-lpsp.html

  * igt@kms_pm_rpm@dpms-lpsp:
    - shard-rkl:          [SKIP][188] ([i915#15073]) -> [PASS][189] +2 other tests pass
   [188]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-4/igt@kms_pm_rpm@dpms-lpsp.html
   [189]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-5/igt@kms_pm_rpm@dpms-lpsp.html

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

  * igt@kms_vblank@ts-continuation-suspend@pipe-a-hdmi-a-2:
    - shard-rkl:          [INCOMPLETE][192] ([i915#12276]) -> [PASS][193] +1 other test pass
   [192]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-3/igt@kms_vblank@ts-continuation-suspend@pipe-a-hdmi-a-2.html
   [193]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-4/igt@kms_vblank@ts-continuation-suspend@pipe-a-hdmi-a-2.html

  * igt@testdisplay:
    - shard-snb:          [DMESG-WARN][194] -> [PASS][195]
   [194]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-snb5/igt@testdisplay.html
   [195]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-snb4/igt@testdisplay.html

  
#### Warnings ####

  * igt@gem_ccs@block-multicopy-inplace:
    - shard-rkl:          [SKIP][196] ([i915#14544] / [i915#3555] / [i915#9323]) -> [SKIP][197] ([i915#3555] / [i915#9323])
   [196]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-6/igt@gem_ccs@block-multicopy-inplace.html
   [197]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-3/igt@gem_ccs@block-multicopy-inplace.html

  * igt@gem_create@create-ext-cpu-access-big:
    - shard-rkl:          [SKIP][198] ([i915#6335]) -> [SKIP][199] ([i915#14544] / [i915#6335])
   [198]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-2/igt@gem_create@create-ext-cpu-access-big.html
   [199]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-6/igt@gem_create@create-ext-cpu-access-big.html

  * igt@gem_exec_balancer@parallel:
    - shard-rkl:          [SKIP][200] ([i915#4525]) -> [SKIP][201] ([i915#14544] / [i915#4525])
   [200]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-2/igt@gem_exec_balancer@parallel.html
   [201]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-6/igt@gem_exec_balancer@parallel.html

  * igt@gem_exec_reloc@basic-cpu-noreloc:
    - shard-rkl:          [SKIP][202] ([i915#3281]) -> [SKIP][203] ([i915#14544] / [i915#3281]) +2 other tests skip
   [202]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-4/igt@gem_exec_reloc@basic-cpu-noreloc.html
   [203]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-6/igt@gem_exec_reloc@basic-cpu-noreloc.html

  * igt@gem_exec_reloc@basic-gtt-cpu:
    - shard-rkl:          [SKIP][204] ([i915#14544] / [i915#3281]) -> [SKIP][205] ([i915#3281]) +3 other tests skip
   [204]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-6/igt@gem_exec_reloc@basic-gtt-cpu.html
   [205]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-3/igt@gem_exec_reloc@basic-gtt-cpu.html

  * igt@gem_lmem_swapping@parallel-random-verify-ccs:
    - shard-rkl:          [SKIP][206] ([i915#14544] / [i915#4613]) -> [SKIP][207] ([i915#4613]) +1 other test skip
   [206]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-6/igt@gem_lmem_swapping@parallel-random-verify-ccs.html
   [207]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-3/igt@gem_lmem_swapping@parallel-random-verify-ccs.html

  * igt@gem_partial_pwrite_pread@writes-after-reads:
    - shard-rkl:          [SKIP][208] ([i915#3282]) -> [SKIP][209] ([i915#14544] / [i915#3282]) +3 other tests skip
   [208]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-4/igt@gem_partial_pwrite_pread@writes-after-reads.html
   [209]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-6/igt@gem_partial_pwrite_pread@writes-after-reads.html

  * igt@gem_partial_pwrite_pread@writes-after-reads-uncached:
    - shard-rkl:          [SKIP][210] ([i915#14544] / [i915#3282]) -> [SKIP][211] ([i915#3282]) +6 other tests skip
   [210]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-6/igt@gem_partial_pwrite_pread@writes-after-reads-uncached.html
   [211]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-4/igt@gem_partial_pwrite_pread@writes-after-reads-uncached.html

  * igt@gem_pxp@hw-rejects-pxp-context:
    - shard-rkl:          [SKIP][212] ([i915#13717]) -> [SKIP][213] ([i915#13717] / [i915#14544])
   [212]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-2/igt@gem_pxp@hw-rejects-pxp-context.html
   [213]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-6/igt@gem_pxp@hw-rejects-pxp-context.html

  * igt@gem_set_tiling_vs_blt@tiled-to-untiled:
    - shard-rkl:          [SKIP][214] ([i915#8411]) -> [SKIP][215] ([i915#14544] / [i915#8411])
   [214]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-2/igt@gem_set_tiling_vs_blt@tiled-to-untiled.html
   [215]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-6/igt@gem_set_tiling_vs_blt@tiled-to-untiled.html

  * igt@gem_softpin@evict-snoop:
    - shard-rkl:          [SKIP][216] -> [SKIP][217] ([i915#14544]) +12 other tests skip
   [216]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-4/igt@gem_softpin@evict-snoop.html
   [217]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-6/igt@gem_softpin@evict-snoop.html

  * igt@gem_userptr_blits@create-destroy-unsync:
    - shard-rkl:          [SKIP][218] ([i915#3297]) -> [SKIP][219] ([i915#14544] / [i915#3297]) +1 other test skip
   [218]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-2/igt@gem_userptr_blits@create-destroy-unsync.html
   [219]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-6/igt@gem_userptr_blits@create-destroy-unsync.html

  * igt@gem_userptr_blits@invalid-mmap-offset-unsync:
    - shard-rkl:          [SKIP][220] ([i915#14544] / [i915#3297]) -> [SKIP][221] ([i915#3297])
   [220]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-6/igt@gem_userptr_blits@invalid-mmap-offset-unsync.html
   [221]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-3/igt@gem_userptr_blits@invalid-mmap-offset-unsync.html

  * igt@gen9_exec_parse@bb-oversize:
    - shard-rkl:          [SKIP][222] ([i915#14544] / [i915#2527]) -> [SKIP][223] ([i915#2527]) +1 other test skip
   [222]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-6/igt@gen9_exec_parse@bb-oversize.html
   [223]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-4/igt@gen9_exec_parse@bb-oversize.html

  * igt@i915_pm_freq_api@freq-basic-api:
    - shard-rkl:          [SKIP][224] ([i915#14544] / [i915#8399]) -> [SKIP][225] ([i915#8399])
   [224]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-6/igt@i915_pm_freq_api@freq-basic-api.html
   [225]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-3/igt@i915_pm_freq_api@freq-basic-api.html

  * igt@i915_pm_freq_api@freq-reset-multiple:
    - shard-rkl:          [SKIP][226] ([i915#8399]) -> [SKIP][227] ([i915#14544] / [i915#8399])
   [226]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-2/igt@i915_pm_freq_api@freq-reset-multiple.html
   [227]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-6/igt@i915_pm_freq_api@freq-reset-multiple.html

  * igt@i915_power@sanity:
    - shard-rkl:          [SKIP][228] ([i915#14544] / [i915#7984]) -> [SKIP][229] ([i915#7984])
   [228]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-6/igt@i915_power@sanity.html
   [229]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-3/igt@i915_power@sanity.html

  * igt@i915_suspend@forcewake:
    - shard-rkl:          [INCOMPLETE][230] ([i915#4817]) -> [ABORT][231] ([i915#15140])
   [230]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-6/igt@i915_suspend@forcewake.html
   [231]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-1/igt@i915_suspend@forcewake.html

  * igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels:
    - shard-rkl:          [SKIP][232] ([i915#14544] / [i915#1769] / [i915#3555]) -> [SKIP][233] ([i915#1769] / [i915#3555])
   [232]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-6/igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels.html
   [233]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-3/igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels.html

  * igt@kms_big_fb@4-tiled-32bpp-rotate-0:
    - shard-rkl:          [SKIP][234] ([i915#5286]) -> [SKIP][235] ([i915#14544] / [i915#5286]) +1 other test skip
   [234]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-2/igt@kms_big_fb@4-tiled-32bpp-rotate-0.html
   [235]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-6/igt@kms_big_fb@4-tiled-32bpp-rotate-0.html

  * igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180:
    - shard-rkl:          [SKIP][236] ([i915#14544] / [i915#5286]) -> [SKIP][237] ([i915#5286]) +2 other tests skip
   [236]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-6/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180.html
   [237]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-3/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180.html

  * igt@kms_big_fb@y-tiled-8bpp-rotate-270:
    - shard-rkl:          [SKIP][238] ([i915#3638]) -> [SKIP][239] ([i915#14544] / [i915#3638]) +1 other test skip
   [238]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-2/igt@kms_big_fb@y-tiled-8bpp-rotate-270.html
   [239]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-6/igt@kms_big_fb@y-tiled-8bpp-rotate-270.html

  * igt@kms_big_fb@y-tiled-8bpp-rotate-90:
    - shard-rkl:          [SKIP][240] ([i915#14544] / [i915#3638]) -> [SKIP][241] ([i915#3638]) +3 other tests skip
   [240]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-6/igt@kms_big_fb@y-tiled-8bpp-rotate-90.html
   [241]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-3/igt@kms_big_fb@y-tiled-8bpp-rotate-90.html

  * igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-180-async-flip:
    - shard-rkl:          [SKIP][242] ([i915#14544]) -> [SKIP][243] +6 other tests skip
   [242]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-6/igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-180-async-flip.html
   [243]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-3/igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-180-async-flip.html

  * igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-180-async-flip:
    - shard-dg1:          [SKIP][244] ([i915#4538]) -> [SKIP][245] ([i915#4423] / [i915#4538])
   [244]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-dg1-16/igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-180-async-flip.html
   [245]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-dg1-19/igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-180-async-flip.html

  * igt@kms_ccs@bad-rotation-90-4-tiled-bmg-ccs:
    - shard-rkl:          [SKIP][246] ([i915#12313]) -> [SKIP][247] ([i915#12313] / [i915#14544])
   [246]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-2/igt@kms_ccs@bad-rotation-90-4-tiled-bmg-ccs.html
   [247]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-6/igt@kms_ccs@bad-rotation-90-4-tiled-bmg-ccs.html

  * igt@kms_ccs@bad-rotation-90-4-tiled-mtl-rc-ccs-cc@pipe-a-hdmi-a-2:
    - shard-rkl:          [SKIP][248] ([i915#14544] / [i915#6095]) -> [SKIP][249] ([i915#6095]) +9 other tests skip
   [248]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-6/igt@kms_ccs@bad-rotation-90-4-tiled-mtl-rc-ccs-cc@pipe-a-hdmi-a-2.html
   [249]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-4/igt@kms_ccs@bad-rotation-90-4-tiled-mtl-rc-ccs-cc@pipe-a-hdmi-a-2.html

  * igt@kms_ccs@bad-rotation-90-4-tiled-mtl-rc-ccs-cc@pipe-c-hdmi-a-2:
    - shard-rkl:          [SKIP][250] ([i915#14098] / [i915#14544] / [i915#6095]) -> [SKIP][251] ([i915#14098] / [i915#6095]) +9 other tests skip
   [250]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-6/igt@kms_ccs@bad-rotation-90-4-tiled-mtl-rc-ccs-cc@pipe-c-hdmi-a-2.html
   [251]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-4/igt@kms_ccs@bad-rotation-90-4-tiled-mtl-rc-ccs-cc@pipe-c-hdmi-a-2.html

  * igt@kms_ccs@crc-primary-basic-4-tiled-lnl-ccs:
    - shard-rkl:          [SKIP][252] ([i915#12313] / [i915#14544]) -> [SKIP][253] ([i915#12313])
   [252]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-6/igt@kms_ccs@crc-primary-basic-4-tiled-lnl-ccs.html
   [253]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-3/igt@kms_ccs@crc-primary-basic-4-tiled-lnl-ccs.html

  * igt@kms_ccs@crc-primary-rotation-180-yf-tiled-ccs@pipe-a-hdmi-a-4:
    - shard-dg1:          [SKIP][254] ([i915#4423] / [i915#6095]) -> [SKIP][255] ([i915#6095]) +1 other test skip
   [254]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-dg1-18/igt@kms_ccs@crc-primary-rotation-180-yf-tiled-ccs@pipe-a-hdmi-a-4.html
   [255]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-dg1-17/igt@kms_ccs@crc-primary-rotation-180-yf-tiled-ccs@pipe-a-hdmi-a-4.html

  * igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs:
    - shard-rkl:          [SKIP][256] ([i915#12805] / [i915#14544]) -> [SKIP][257] ([i915#12805])
   [256]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-6/igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs.html
   [257]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-3/igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs.html

  * igt@kms_ccs@crc-sprite-planes-basic-yf-tiled-ccs:
    - shard-rkl:          [SKIP][258] ([i915#14098] / [i915#6095]) -> [SKIP][259] ([i915#14098] / [i915#14544] / [i915#6095]) +2 other tests skip
   [258]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-2/igt@kms_ccs@crc-sprite-planes-basic-yf-tiled-ccs.html
   [259]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-6/igt@kms_ccs@crc-sprite-planes-basic-yf-tiled-ccs.html

  * igt@kms_cdclk@mode-transition-all-outputs:
    - shard-rkl:          [SKIP][260] ([i915#3742]) -> [SKIP][261] ([i915#14544] / [i915#3742])
   [260]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-4/igt@kms_cdclk@mode-transition-all-outputs.html
   [261]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-6/igt@kms_cdclk@mode-transition-all-outputs.html

  * igt@kms_chamelium_frames@hdmi-cmp-planar-formats:
    - shard-rkl:          [SKIP][262] ([i915#11151] / [i915#14544] / [i915#7828]) -> [SKIP][263] ([i915#11151] / [i915#7828]) +3 other tests skip
   [262]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-6/igt@kms_chamelium_frames@hdmi-cmp-planar-formats.html
   [263]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-4/igt@kms_chamelium_frames@hdmi-cmp-planar-formats.html

  * igt@kms_chamelium_hpd@dp-hpd-fast:
    - shard-rkl:          [SKIP][264] ([i915#11151] / [i915#7828]) -> [SKIP][265] ([i915#11151] / [i915#14544] / [i915#7828]) +4 other tests skip
   [264]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-4/igt@kms_chamelium_hpd@dp-hpd-fast.html
   [265]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-6/igt@kms_chamelium_hpd@dp-hpd-fast.html

  * igt@kms_content_protection@atomic-dpms:
    - shard-rkl:          [SKIP][266] ([i915#14544] / [i915#6944] / [i915#7118] / [i915#9424]) -> [SKIP][267] ([i915#6944] / [i915#7118] / [i915#9424])
   [266]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-6/igt@kms_content_protection@atomic-dpms.html
   [267]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-3/igt@kms_content_protection@atomic-dpms.html

  * igt@kms_content_protection@dp-mst-lic-type-1:
    - shard-rkl:          [SKIP][268] ([i915#15330] / [i915#3116]) -> [SKIP][269] ([i915#14544] / [i915#15330] / [i915#3116])
   [268]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-2/igt@kms_content_protection@dp-mst-lic-type-1.html
   [269]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-6/igt@kms_content_protection@dp-mst-lic-type-1.html

  * igt@kms_content_protection@dp-mst-type-1-suspend-resume:
    - shard-rkl:          [SKIP][270] ([i915#15330]) -> [SKIP][271] ([i915#14544] / [i915#15330])
   [270]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-2/igt@kms_content_protection@dp-mst-type-1-suspend-resume.html
   [271]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-6/igt@kms_content_protection@dp-mst-type-1-suspend-resume.html

  * igt@kms_cursor_crc@cursor-onscreen-512x170:
    - shard-rkl:          [SKIP][272] ([i915#13049]) -> [SKIP][273] ([i915#13049] / [i915#14544])
   [272]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-2/igt@kms_cursor_crc@cursor-onscreen-512x170.html
   [273]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-6/igt@kms_cursor_crc@cursor-onscreen-512x170.html

  * igt@kms_cursor_crc@cursor-rapid-movement-32x10:
    - shard-rkl:          [SKIP][274] ([i915#3555]) -> [SKIP][275] ([i915#14544] / [i915#3555]) +1 other test skip
   [274]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-2/igt@kms_cursor_crc@cursor-rapid-movement-32x10.html
   [275]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-6/igt@kms_cursor_crc@cursor-rapid-movement-32x10.html

  * igt@kms_cursor_crc@cursor-rapid-movement-512x170:
    - shard-rkl:          [SKIP][276] ([i915#13049] / [i915#14544]) -> [SKIP][277] ([i915#13049])
   [276]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-6/igt@kms_cursor_crc@cursor-rapid-movement-512x170.html
   [277]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-3/igt@kms_cursor_crc@cursor-rapid-movement-512x170.html

  * igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size:
    - shard-glk:          [FAIL][278] ([i915#15804]) -> [FAIL][279] ([i915#15805])
   [278]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-glk4/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size.html
   [279]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-glk4/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size.html

  * igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions-varying-size:
    - shard-rkl:          [SKIP][280] ([i915#4103]) -> [SKIP][281] ([i915#14544] / [i915#4103])
   [280]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-2/igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions-varying-size.html
   [281]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-6/igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions-varying-size.html

  * igt@kms_dirtyfb@psr-dirtyfb-ioctl:
    - shard-rkl:          [SKIP][282] ([i915#14544] / [i915#9723]) -> [SKIP][283] ([i915#9723])
   [282]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-6/igt@kms_dirtyfb@psr-dirtyfb-ioctl.html
   [283]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-4/igt@kms_dirtyfb@psr-dirtyfb-ioctl.html

  * igt@kms_dp_linktrain_fallback@dsc-fallback:
    - shard-rkl:          [SKIP][284] ([i915#13707]) -> [SKIP][285] ([i915#13707] / [i915#14544])
   [284]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-2/igt@kms_dp_linktrain_fallback@dsc-fallback.html
   [285]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-6/igt@kms_dp_linktrain_fallback@dsc-fallback.html

  * igt@kms_dsc@dsc-basic:
    - shard-rkl:          [SKIP][286] ([i915#3555] / [i915#3840]) -> [SKIP][287] ([i915#14544] / [i915#3555] / [i915#3840])
   [286]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-2/igt@kms_dsc@dsc-basic.html
   [287]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-6/igt@kms_dsc@dsc-basic.html

  * igt@kms_feature_discovery@display-4x:
    - shard-rkl:          [SKIP][288] ([i915#1839]) -> [SKIP][289] ([i915#14544] / [i915#1839])
   [288]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-4/igt@kms_feature_discovery@display-4x.html
   [289]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-6/igt@kms_feature_discovery@display-4x.html

  * igt@kms_feature_discovery@psr1:
    - shard-rkl:          [SKIP][290] ([i915#658]) -> [SKIP][291] ([i915#14544] / [i915#658])
   [290]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-2/igt@kms_feature_discovery@psr1.html
   [291]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-6/igt@kms_feature_discovery@psr1.html

  * igt@kms_flip@2x-plain-flip:
    - shard-rkl:          [SKIP][292] ([i915#9934]) -> [SKIP][293] ([i915#14544] / [i915#9934]) +4 other tests skip
   [292]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-2/igt@kms_flip@2x-plain-flip.html
   [293]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-6/igt@kms_flip@2x-plain-flip.html

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

  * igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-16bpp-yftile-downscaling:
    - shard-rkl:          [SKIP][296] ([i915#15643]) -> [SKIP][297] ([i915#14544] / [i915#15643]) +2 other tests skip
   [296]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-2/igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-16bpp-yftile-downscaling.html
   [297]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-6/igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-16bpp-yftile-downscaling.html

  * igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-pri-indfb-draw-mmap-wc:
    - shard-rkl:          [SKIP][298] ([i915#1825]) -> [SKIP][299] ([i915#14544] / [i915#1825]) +22 other tests skip
   [298]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-2/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-pri-indfb-draw-mmap-wc.html
   [299]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-6/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-pri-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-offscreen-pri-indfb-draw-pwrite:
    - shard-rkl:          [SKIP][300] ([i915#14544] / [i915#15102]) -> [SKIP][301] ([i915#15102])
   [300]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-6/igt@kms_frontbuffer_tracking@fbcpsr-1p-offscreen-pri-indfb-draw-pwrite.html
   [301]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-3/igt@kms_frontbuffer_tracking@fbcpsr-1p-offscreen-pri-indfb-draw-pwrite.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-offscreen-pri-shrfb-draw-blt:
    - shard-rkl:          [SKIP][302] ([i915#15102]) -> [SKIP][303] ([i915#14544] / [i915#15102]) +1 other test skip
   [302]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-2/igt@kms_frontbuffer_tracking@fbcpsr-1p-offscreen-pri-shrfb-draw-blt.html
   [303]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-6/igt@kms_frontbuffer_tracking@fbcpsr-1p-offscreen-pri-shrfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-pri-indfb-multidraw:
    - shard-rkl:          [SKIP][304] ([i915#15102] / [i915#3023]) -> [SKIP][305] ([i915#14544] / [i915#15102] / [i915#3023]) +8 other tests skip
   [304]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-2/igt@kms_frontbuffer_tracking@fbcpsr-1p-pri-indfb-multidraw.html
   [305]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-6/igt@kms_frontbuffer_tracking@fbcpsr-1p-pri-indfb-multidraw.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-cur-indfb-move:
    - shard-rkl:          [SKIP][306] ([i915#14544] / [i915#15102] / [i915#3023]) -> [SKIP][307] ([i915#15102] / [i915#3023]) +8 other tests skip
   [306]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-6/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-cur-indfb-move.html
   [307]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-3/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-cur-indfb-move.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-spr-indfb-draw-pwrite:
    - shard-dg2:          [SKIP][308] ([i915#15102] / [i915#3458]) -> [SKIP][309] ([i915#10433] / [i915#15102] / [i915#3458]) +2 other tests skip
   [308]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-dg2-1/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-spr-indfb-draw-pwrite.html
   [309]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-dg2-4/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-spr-indfb-draw-pwrite.html

  * igt@kms_frontbuffer_tracking@fbcpsr-rgb565-draw-render:
    - shard-dg2:          [SKIP][310] ([i915#10433] / [i915#15102] / [i915#3458]) -> [SKIP][311] ([i915#15102] / [i915#3458]) +5 other tests skip
   [310]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-dg2-4/igt@kms_frontbuffer_tracking@fbcpsr-rgb565-draw-render.html
   [311]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-dg2-8/igt@kms_frontbuffer_tracking@fbcpsr-rgb565-draw-render.html

  * igt@kms_frontbuffer_tracking@psr-2p-scndscrn-indfb-msflip-blt:
    - shard-rkl:          [SKIP][312] ([i915#14544] / [i915#1825]) -> [SKIP][313] ([i915#1825]) +14 other tests skip
   [312]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-6/igt@kms_frontbuffer_tracking@psr-2p-scndscrn-indfb-msflip-blt.html
   [313]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-3/igt@kms_frontbuffer_tracking@psr-2p-scndscrn-indfb-msflip-blt.html

  * igt@kms_hdr@bpc-switch-suspend:
    - shard-rkl:          [ABORT][314] ([i915#15132]) -> [SKIP][315] ([i915#3555] / [i915#8228])
   [314]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-1/igt@kms_hdr@bpc-switch-suspend.html
   [315]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-8/igt@kms_hdr@bpc-switch-suspend.html

  * igt@kms_joiner@invalid-modeset-ultra-joiner:
    - shard-rkl:          [SKIP][316] ([i915#14544] / [i915#15458]) -> [SKIP][317] ([i915#15458])
   [316]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-6/igt@kms_joiner@invalid-modeset-ultra-joiner.html
   [317]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-3/igt@kms_joiner@invalid-modeset-ultra-joiner.html

  * igt@kms_panel_fitting@legacy:
    - shard-rkl:          [SKIP][318] ([i915#14544] / [i915#6301]) -> [SKIP][319] ([i915#6301])
   [318]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-6/igt@kms_panel_fitting@legacy.html
   [319]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-4/igt@kms_panel_fitting@legacy.html

  * igt@kms_plane@pixel-format-4-tiled-mtl-mc-ccs-modifier:
    - shard-rkl:          [SKIP][320] ([i915#15709]) -> [SKIP][321] ([i915#14544] / [i915#15709]) +1 other test skip
   [320]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-2/igt@kms_plane@pixel-format-4-tiled-mtl-mc-ccs-modifier.html
   [321]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-6/igt@kms_plane@pixel-format-4-tiled-mtl-mc-ccs-modifier.html

  * igt@kms_plane@pixel-format-y-tiled-gen12-mc-ccs-modifier:
    - shard-rkl:          [SKIP][322] ([i915#14544] / [i915#15709]) -> [SKIP][323] ([i915#15709]) +2 other tests skip
   [322]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-6/igt@kms_plane@pixel-format-y-tiled-gen12-mc-ccs-modifier.html
   [323]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-3/igt@kms_plane@pixel-format-y-tiled-gen12-mc-ccs-modifier.html

  * igt@kms_plane_scaling@plane-upscale-factor-0-25-with-rotation@pipe-c:
    - shard-rkl:          [SKIP][324] ([i915#14544] / [i915#15329]) -> [SKIP][325] ([i915#15329]) +3 other tests skip
   [324]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-6/igt@kms_plane_scaling@plane-upscale-factor-0-25-with-rotation@pipe-c.html
   [325]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-3/igt@kms_plane_scaling@plane-upscale-factor-0-25-with-rotation@pipe-c.html

  * igt@kms_pm_backlight@bad-brightness:
    - shard-rkl:          [SKIP][326] ([i915#5354]) -> [SKIP][327] ([i915#14544] / [i915#5354])
   [326]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-2/igt@kms_pm_backlight@bad-brightness.html
   [327]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-6/igt@kms_pm_backlight@bad-brightness.html

  * igt@kms_pm_dc@dc5-psr:
    - shard-rkl:          [SKIP][328] ([i915#14544] / [i915#9685]) -> [SKIP][329] ([i915#9685])
   [328]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-6/igt@kms_pm_dc@dc5-psr.html
   [329]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-4/igt@kms_pm_dc@dc5-psr.html

  * igt@kms_pm_dc@dc9-dpms:
    - shard-rkl:          [SKIP][330] ([i915#14544] / [i915#15739]) -> [SKIP][331] ([i915#15739])
   [330]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-6/igt@kms_pm_dc@dc9-dpms.html
   [331]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-1/igt@kms_pm_dc@dc9-dpms.html

  * igt@kms_pm_lpsp@kms-lpsp:
    - shard-dg1:          [SKIP][332] ([i915#9340]) -> [SKIP][333] ([i915#3828])
   [332]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-dg1-12/igt@kms_pm_lpsp@kms-lpsp.html
   [333]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-dg1-14/igt@kms_pm_lpsp@kms-lpsp.html

  * igt@kms_pm_lpsp@screens-disabled:
    - shard-rkl:          [SKIP][334] ([i915#8430]) -> [SKIP][335] ([i915#14544] / [i915#8430])
   [334]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-2/igt@kms_pm_lpsp@screens-disabled.html
   [335]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-6/igt@kms_pm_lpsp@screens-disabled.html

  * igt@kms_prime@basic-crc-hybrid:
    - shard-rkl:          [SKIP][336] ([i915#14544] / [i915#6524]) -> [SKIP][337] ([i915#6524])
   [336]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-6/igt@kms_prime@basic-crc-hybrid.html
   [337]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-4/igt@kms_prime@basic-crc-hybrid.html

  * igt@kms_psr2_sf@pr-overlay-plane-move-continuous-exceed-sf:
    - shard-rkl:          [SKIP][338] ([i915#11520] / [i915#14544]) -> [SKIP][339] ([i915#11520]) +2 other tests skip
   [338]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-6/igt@kms_psr2_sf@pr-overlay-plane-move-continuous-exceed-sf.html
   [339]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-4/igt@kms_psr2_sf@pr-overlay-plane-move-continuous-exceed-sf.html

  * igt@kms_psr2_sf@pr-overlay-plane-update-continuous-sf:
    - shard-rkl:          [SKIP][340] ([i915#11520]) -> [SKIP][341] ([i915#11520] / [i915#14544]) +5 other tests skip
   [340]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-2/igt@kms_psr2_sf@pr-overlay-plane-update-continuous-sf.html
   [341]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-6/igt@kms_psr2_sf@pr-overlay-plane-update-continuous-sf.html

  * igt@kms_psr@psr-cursor-mmap-cpu:
    - shard-rkl:          [SKIP][342] ([i915#1072] / [i915#14544] / [i915#9732]) -> [SKIP][343] ([i915#1072] / [i915#9732]) +10 other tests skip
   [342]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-6/igt@kms_psr@psr-cursor-mmap-cpu.html
   [343]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-1/igt@kms_psr@psr-cursor-mmap-cpu.html

  * igt@kms_psr@psr-sprite-render:
    - shard-rkl:          [SKIP][344] ([i915#1072] / [i915#9732]) -> [SKIP][345] ([i915#1072] / [i915#14544] / [i915#9732]) +4 other tests skip
   [344]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-2/igt@kms_psr@psr-sprite-render.html
   [345]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-6/igt@kms_psr@psr-sprite-render.html

  * igt@kms_psr_stress_test@flip-primary-invalidate-overlay:
    - shard-rkl:          [SKIP][346] ([i915#9685]) -> [SKIP][347] ([i915#14544] / [i915#9685])
   [346]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-2/igt@kms_psr_stress_test@flip-primary-invalidate-overlay.html
   [347]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-6/igt@kms_psr_stress_test@flip-primary-invalidate-overlay.html

  * igt@kms_scaling_modes@scaling-mode-none:
    - shard-rkl:          [SKIP][348] ([i915#14544] / [i915#3555]) -> [SKIP][349] ([i915#3555]) +1 other test skip
   [348]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-6/igt@kms_scaling_modes@scaling-mode-none.html
   [349]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-3/igt@kms_scaling_modes@scaling-mode-none.html

  * igt@kms_vrr@flipline:
    - shard-rkl:          [SKIP][350] ([i915#15243] / [i915#3555]) -> [SKIP][351] ([i915#14544] / [i915#15243] / [i915#3555])
   [350]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-2/igt@kms_vrr@flipline.html
   [351]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-6/igt@kms_vrr@flipline.html

  * igt@kms_vrr@lobf:
    - shard-rkl:          [SKIP][352] ([i915#11920]) -> [SKIP][353] ([i915#11920] / [i915#14544])
   [352]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-2/igt@kms_vrr@lobf.html
   [353]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-6/igt@kms_vrr@lobf.html

  * igt@kms_vrr@negative-basic:
    - shard-rkl:          [SKIP][354] ([i915#14544] / [i915#3555] / [i915#9906]) -> [SKIP][355] ([i915#3555] / [i915#9906])
   [354]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-6/igt@kms_vrr@negative-basic.html
   [355]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-3/igt@kms_vrr@negative-basic.html

  * igt@perf@mi-rpc:
    - shard-rkl:          [SKIP][356] ([i915#2434]) -> [SKIP][357] ([i915#14544] / [i915#2434])
   [356]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-2/igt@perf@mi-rpc.html
   [357]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-6/igt@perf@mi-rpc.html

  * igt@prime_vgem@basic-fence-read:
    - shard-rkl:          [SKIP][358] ([i915#3291] / [i915#3708]) -> [SKIP][359] ([i915#14544] / [i915#3291] / [i915#3708])
   [358]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-2/igt@prime_vgem@basic-fence-read.html
   [359]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-6/igt@prime_vgem@basic-fence-read.html

  * igt@prime_vgem@fence-write-hang:
    - shard-rkl:          [SKIP][360] ([i915#14544] / [i915#3708]) -> [SKIP][361] ([i915#3708])
   [360]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-6/igt@prime_vgem@fence-write-hang.html
   [361]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-3/igt@prime_vgem@fence-write-hang.html

  * igt@sriov_basic@enable-vfs-bind-unbind-each:
    - shard-rkl:          [SKIP][362] ([i915#9917]) -> [SKIP][363] ([i915#14544] / [i915#9917])
   [362]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18130/shard-rkl-2/igt@sriov_basic@enable-vfs-bind-unbind-each.html
   [363]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_163033v1/shard-rkl-6/igt@sriov_basic@enable-vfs-bind-unbind-each.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#10553]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10553
  [i915#1072]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1072
  [i915#1099]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1099
  [i915#11151]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11151
  [i915#11520]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11520
  [i915#118]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/118
  [i915#11920]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11920
  [i915#12061]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12061
  [i915#12276]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12276
  [i915#12313]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12313
  [i915#12358]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12358
  [i915#12745]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12745
  [i915#12805]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12805
  [i915#12910]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12910
  [i915#13026]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13026
  [i915#13027]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13027
  [i915#13049]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13049
  [i915#13179]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13179
  [i915#13196]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13196
  [i915#13356]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13356
  [i915#13398]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13398
  [i915#13566]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13566
  [i915#13707]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13707
  [i915#13717]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13717
  [i915#13748]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13748
  [i915#13783]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13783
  [i915#13790]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13790
  [i915#13821]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13821
  [i915#13958]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13958
  [i915#14098]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14098
  [i915#14152]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14152
  [i915#14419]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14419
  [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#14702]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14702
  [i915#15073]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15073
  [i915#15102]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15102
  [i915#15132]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15132
  [i915#15140]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15140
  [i915#15243]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15243
  [i915#15329]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15329
  [i915#15330]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15330
  [i915#15342]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15342
  [i915#15458]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15458
  [i915#15479]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15479
  [i915#15492]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15492
  [i915#15560]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15560
  [i915#15582]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15582
  [i915#15643]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15643
  [i915#15672]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15672
  [i915#15709]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15709
  [i915#15734]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15734
  [i915#15739]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15739
  [i915#15804]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15804
  [i915#15805]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15805
  [i915#15815]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15815
  [i915#1769]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1769
  [i915#1825]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1825
  [i915#1839]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1839
  [i915#2190]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2190
  [i915#2434]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2434
  [i915#2527]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2527
  [i915#2658]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2658
  [i915#2681]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2681
  [i915#280]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/280
  [i915#2856]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2856
  [i915#3023]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3023
  [i915#3116]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3116
  [i915#3281]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3281
  [i915#3282]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3282
  [i915#3291]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3291
  [i915#3297]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3297
  [i915#3299]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3299
  [i915#3323]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3323
  [i915#3458]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3458
  [i915#3555]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3555
  [i915#3637]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3637
  [i915#3638]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3638
  [i915#3708]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3708
  [i915#3742]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3742
  [i915#3804]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3804
  [i915#3828]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3828
  [i915#3840]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3840
  [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#4538]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4538
  [i915#4613]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4613
  [i915#4817]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4817
  [i915#4839]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4839
  [i915#5286]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5286
  [i915#5289]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5289
  [i915#5354]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5354
  [i915#5439]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5439
  [i915#5493]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5493
  [i915#5566]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5566
  [i915#5723]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5723
  [i915#5956]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5956
  [i915#6095]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6095
  [i915#6245]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6245
  [i915#6301]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6301
  [i915#6335]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6335
  [i915#6344]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6344
  [i915#6524]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6524
  [i915#658]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/658
  [i915#6944]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6944
  [i915#7116]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7116
  [i915#7118]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7118
  [i915#7697]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7697
  [i915#7828]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7828
  [i915#7984]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7984
  [i915#8228]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8228
  [i915#8399]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8399
  [i915#8411]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8411
  [i915#8430]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8430
  [i915#8898]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8898
  [i915#9053]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9053
  [i915#9323]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9323
  [i915#9340]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9340
  [i915#9424]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9424
  [i915#9683]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9683
  [i915#9685]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9685
  [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_18130 -> Patchwork_163033v1

  CI-20190529: 20190529
  CI_DRM_18130: 4a30f5fa0fe382b3915a8208a483d0044c40b9eb @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_8793: c623172fdd4dd92bb23dbc55b3930c40266c3e59 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  Patchwork_163033v1: 4a30f5fa0fe382b3915a8208a483d0044c40b9eb @ 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_163033v1/index.html

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

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

* RE: [PATCH 5/5] drm/{i915, xe}: move framebuffer bo to parent interface
  2026-03-12  4:25   ` Kandpal, Suraj
@ 2026-03-12  9:00     ` Jani Nikula
  2026-03-13  5:12       ` [PATCH 5/5] drm/{i915,xe}: " Kandpal, Suraj
  0 siblings, 1 reply; 17+ messages in thread
From: Jani Nikula @ 2026-03-12  9:00 UTC (permalink / raw)
  To: Kandpal, Suraj, intel-gfx@lists.freedesktop.org,
	intel-xe@lists.freedesktop.org

On Thu, 12 Mar 2026, "Kandpal, Suraj" <suraj.kandpal@intel.com> wrote:
>> Subject: [PATCH 5/5] drm/{i915,xe}: move framebuffer bo to parent interface
>> 
>> Add .framebuffer_init, .framebuffer_fini and .framebuffer_lookup to the bo
>> parent interface. While they're about framebuffers, they're specifically about
>> framebuffer objects, so the bo interface is a good enough fit, and there's no
>> need to add another interface struct.
>
> Maybe it can also be mentioned that since we move all the functions from
> Intel_fb_bo to i915_bo.c we can safely remove it.

Sure.

>> 
>> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>> ---
>>  drivers/gpu/drm/i915/Makefile                |  1 -
>>  drivers/gpu/drm/i915/display/intel_bo.c      | 21 +++++
>>  drivers/gpu/drm/i915/display/intel_bo.h      |  9 ++
>>  drivers/gpu/drm/i915/display/intel_fb.c      | 12 +--
>>  drivers/gpu/drm/i915/display/intel_fb_bo.c   | 99 --------------------
>>  drivers/gpu/drm/i915/display/intel_fb_bo.h   | 25 -----
>>  drivers/gpu/drm/i915/i915_bo.c               | 92 ++++++++++++++++++
>>  drivers/gpu/drm/xe/Makefile                  |  1 -
>>  drivers/gpu/drm/xe/display/intel_fb_bo.c     | 91 ------------------
>>  drivers/gpu/drm/xe/display/xe_display_bo.c   | 84 +++++++++++++++++
>>  include/drm/intel/display_parent_interface.h |  6 ++
>>  11 files changed, 218 insertions(+), 223 deletions(-)  delete mode 100644
>> drivers/gpu/drm/i915/display/intel_fb_bo.c
>>  delete mode 100644 drivers/gpu/drm/i915/display/intel_fb_bo.h
>>  delete mode 100644 drivers/gpu/drm/xe/display/intel_fb_bo.c
>> 
>> diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile
>> index 425933fb26a5..be976a90c5a6 100644
>> --- a/drivers/gpu/drm/i915/Makefile
>> +++ b/drivers/gpu/drm/i915/Makefile
>> @@ -278,7 +278,6 @@ i915-y += \
>>  	display/intel_drrs.o \
>>  	display/intel_dsb.o \
>>  	display/intel_fb.o \
>> -	display/intel_fb_bo.o \
>>  	display/intel_fb_pin.o \
>>  	display/intel_fbc.o \
>>  	display/intel_fdi.o \
>> diff --git a/drivers/gpu/drm/i915/display/intel_bo.c
>> b/drivers/gpu/drm/i915/display/intel_bo.c
>> index e356ab4e0640..3b82d38a0504 100644
>> --- a/drivers/gpu/drm/i915/display/intel_bo.c
>> +++ b/drivers/gpu/drm/i915/display/intel_bo.c
>> @@ -64,3 +64,24 @@ void intel_bo_describe(struct seq_file *m, struct
>> drm_gem_object *obj)
>>  	if (display->parent->bo->describe)
>>  		display->parent->bo->describe(m, obj);  }
>> +
>> +int intel_bo_framebuffer_init(struct drm_gem_object *obj, struct
>> +drm_mode_fb_cmd2 *mode_cmd) {
>> +	struct intel_display *display = to_intel_display(obj->dev);
>> +
>> +	return display->parent->bo->framebuffer_init(obj, mode_cmd); }
>> +
>> +void intel_bo_framebuffer_fini(struct drm_gem_object *obj) {
>> +	struct intel_display *display = to_intel_display(obj->dev);
>> +
>> +	display->parent->bo->framebuffer_fini(obj);
>
> Should we be making this optional . This will help avoid creating dummy functions
> for fini like you have done previously.

I have this gnawing feeling that it should not be a dummy function in
the first place. I haven't actually looked into the bottom of it. That's
why I ended up keeping the dummy.

BR,
Jani.


>
> Regards,
> Suraj Kandpal
>
>> +}
>> +
>> +struct drm_gem_object *intel_bo_framebuffer_lookup(struct intel_display
>> *display,
>> +						   struct drm_file *filp,
>> +						   const struct
>> drm_mode_fb_cmd2 *user_mode_cmd) {
>> +	return display->parent->bo->framebuffer_lookup(display->drm, filp,
>> +user_mode_cmd); }
>> diff --git a/drivers/gpu/drm/i915/display/intel_bo.h
>> b/drivers/gpu/drm/i915/display/intel_bo.h
>> index 40390ed92ceb..aec188c706c2 100644
>> --- a/drivers/gpu/drm/i915/display/intel_bo.h
>> +++ b/drivers/gpu/drm/i915/display/intel_bo.h
>> @@ -6,8 +6,11 @@
>> 
>>  #include <linux/types.h>
>> 
>> +struct drm_file;
>>  struct drm_gem_object;
>> +struct drm_mode_fb_cmd2;
>>  struct drm_scanout_buffer;
>> +struct intel_display;
>>  struct intel_framebuffer;
>>  struct seq_file;
>>  struct vm_area_struct;
>> @@ -22,4 +25,10 @@ int intel_bo_read_from_page(struct drm_gem_object
>> *obj, u64 offset, void *dst, i
>> 
>>  void intel_bo_describe(struct seq_file *m, struct drm_gem_object *obj);
>> 
>> +void intel_bo_framebuffer_fini(struct drm_gem_object *obj); int
>> +intel_bo_framebuffer_init(struct drm_gem_object *obj, struct
>> +drm_mode_fb_cmd2 *mode_cmd); struct drm_gem_object
>> *intel_bo_framebuffer_lookup(struct intel_display *display,
>> +						   struct drm_file *filp,
>> +						   const struct
>> drm_mode_fb_cmd2 *user_mode_cmd);
>> +
>>  #endif /* __INTEL_BO__ */
>> diff --git a/drivers/gpu/drm/i915/display/intel_fb.c
>> b/drivers/gpu/drm/i915/display/intel_fb.c
>> index 49c6ca9d94c6..5768619f840f 100644
>> --- a/drivers/gpu/drm/i915/display/intel_fb.c
>> +++ b/drivers/gpu/drm/i915/display/intel_fb.c
>> @@ -17,7 +17,6 @@
>>  #include "intel_display_types.h"
>>  #include "intel_display_utils.h"
>>  #include "intel_fb.h"
>> -#include "intel_fb_bo.h"
>>  #include "intel_frontbuffer.h"
>>  #include "intel_parent.h"
>>  #include "intel_plane.h"
>> @@ -2111,7 +2110,7 @@ static void intel_user_framebuffer_destroy(struct
>> drm_framebuffer *fb)
>>  	if (intel_fb_uses_dpt(fb))
>>  		intel_parent_dpt_destroy(display, intel_fb->dpt);
>> 
>> -	intel_fb_bo_framebuffer_fini(intel_fb_bo(fb));
>> +	intel_bo_framebuffer_fini(intel_fb_bo(fb));
>> 
>>  	intel_parent_frontbuffer_put(display, intel_fb->frontbuffer);
>> 
>> @@ -2222,7 +2221,7 @@ int intel_framebuffer_init(struct intel_framebuffer
>> *intel_fb,
>> 
>>  	/*
>>  	 * intel_parent_frontbuffer_get() must be done before
>> -	 * intel_fb_bo_framebuffer_init() to avoid set_tiling vs. addfb race.
>> +	 * intel_bo_framebuffer_init() to avoid set_tiling vs. addfb race.
>>  	 */
>>  	intel_fb->frontbuffer = intel_parent_frontbuffer_get(display, obj);
>>  	if (!intel_fb->frontbuffer) {
>> @@ -2230,7 +2229,7 @@ int intel_framebuffer_init(struct intel_framebuffer
>> *intel_fb,
>>  		goto err_free_panic;
>>  	}
>> 
>> -	ret = intel_fb_bo_framebuffer_init(obj, mode_cmd);
>> +	ret = intel_bo_framebuffer_init(obj, mode_cmd);
>>  	if (ret)
>>  		goto err_frontbuffer_put;
>> 
>> @@ -2333,7 +2332,7 @@ int intel_framebuffer_init(struct intel_framebuffer
>> *intel_fb,
>>  	if (intel_fb_uses_dpt(fb))
>>  		intel_parent_dpt_destroy(display, intel_fb->dpt);
>>  err_bo_framebuffer_fini:
>> -	intel_fb_bo_framebuffer_fini(obj);
>> +	intel_bo_framebuffer_fini(obj);
>>  err_frontbuffer_put:
>>  	intel_parent_frontbuffer_put(display, intel_fb->frontbuffer);
>>  err_free_panic:
>> @@ -2348,11 +2347,12 @@ intel_user_framebuffer_create(struct
>> drm_device *dev,
>>  			      const struct drm_format_info *info,
>>  			      const struct drm_mode_fb_cmd2
>> *user_mode_cmd)  {
>> +	struct intel_display *display = to_intel_display(dev);
>>  	struct drm_framebuffer *fb;
>>  	struct drm_gem_object *obj;
>>  	struct drm_mode_fb_cmd2 mode_cmd = *user_mode_cmd;
>> 
>> -	obj = intel_fb_bo_lookup_valid_bo(dev, filp, &mode_cmd);
>> +	obj = intel_bo_framebuffer_lookup(display, filp, &mode_cmd);
>>  	if (IS_ERR(obj))
>>  		return ERR_CAST(obj);
>> 
>> diff --git a/drivers/gpu/drm/i915/display/intel_fb_bo.c
>> b/drivers/gpu/drm/i915/display/intel_fb_bo.c
>> deleted file mode 100644
>> index a4d49ef450d9..000000000000
>> --- a/drivers/gpu/drm/i915/display/intel_fb_bo.c
>> +++ /dev/null
>> @@ -1,99 +0,0 @@
>> -/* SPDX-License-Identifier: MIT */
>> -/*
>> - * Copyright © 2021 Intel Corporation
>> - */
>> -
>> -#include <drm/drm_framebuffer.h>
>> -#include <drm/drm_print.h>
>> -
>> -#include "gem/i915_gem_object.h"
>> -
>> -#include "i915_drv.h"
>> -#include "intel_fb.h"
>> -#include "intel_fb_bo.h"
>> -
>> -void intel_fb_bo_framebuffer_fini(struct drm_gem_object *obj) -{
>> -	/* Nothing to do for i915 */
>> -}
>> -
>> -int intel_fb_bo_framebuffer_init(struct drm_gem_object *_obj,
>> -				 struct drm_mode_fb_cmd2 *mode_cmd)
>> -{
>> -	struct drm_i915_gem_object *obj = to_intel_bo(_obj);
>> -	struct drm_i915_private *i915 = to_i915(obj->base.dev);
>> -	unsigned int tiling, stride;
>> -
>> -	i915_gem_object_lock(obj, NULL);
>> -	tiling = i915_gem_object_get_tiling(obj);
>> -	stride = i915_gem_object_get_stride(obj);
>> -	i915_gem_object_unlock(obj);
>> -
>> -	if (mode_cmd->flags & DRM_MODE_FB_MODIFIERS) {
>> -		/*
>> -		 * If there's a fence, enforce that
>> -		 * the fb modifier and tiling mode match.
>> -		 */
>> -		if (tiling != I915_TILING_NONE &&
>> -		    tiling != intel_fb_modifier_to_tiling(mode_cmd-
>> >modifier[0])) {
>> -			drm_dbg_kms(&i915->drm,
>> -				    "tiling_mode doesn't match fb modifier\n");
>> -			return -EINVAL;
>> -		}
>> -	} else {
>> -		if (tiling == I915_TILING_X) {
>> -			mode_cmd->modifier[0] =
>> I915_FORMAT_MOD_X_TILED;
>> -		} else if (tiling == I915_TILING_Y) {
>> -			drm_dbg_kms(&i915->drm,
>> -				    "No Y tiling for legacy addfb\n");
>> -			return -EINVAL;
>> -		}
>> -	}
>> -
>> -	/*
>> -	 * gen2/3 display engine uses the fence if present,
>> -	 * so the tiling mode must match the fb modifier exactly.
>> -	 */
>> -	if (GRAPHICS_VER(i915) < 4 &&
>> -	    tiling != intel_fb_modifier_to_tiling(mode_cmd->modifier[0])) {
>> -		drm_dbg_kms(&i915->drm,
>> -			    "tiling_mode must match fb modifier exactly on
>> gen2/3\n");
>> -		return -EINVAL;
>> -	}
>> -
>> -	/*
>> -	 * If there's a fence, enforce that
>> -	 * the fb pitch and fence stride match.
>> -	 */
>> -	if (tiling != I915_TILING_NONE && mode_cmd->pitches[0] != stride) {
>> -		drm_dbg_kms(&i915->drm,
>> -			    "pitch (%d) must match tiling stride (%d)\n",
>> -			    mode_cmd->pitches[0], stride);
>> -		return -EINVAL;
>> -	}
>> -
>> -	return 0;
>> -}
>> -
>> -struct drm_gem_object *
>> -intel_fb_bo_lookup_valid_bo(struct drm_device *drm,
>> -			    struct drm_file *filp,
>> -			    const struct drm_mode_fb_cmd2 *mode_cmd)
>> -{
>> -	struct drm_i915_private *i915 = to_i915(drm);
>> -	struct drm_i915_gem_object *obj;
>> -
>> -	obj = i915_gem_object_lookup(filp, mode_cmd->handles[0]);
>> -	if (!obj)
>> -		return ERR_PTR(-ENOENT);
>> -
>> -	/* object is backed with LMEM for discrete */
>> -	if (HAS_LMEM(i915) && !i915_gem_object_can_migrate(obj,
>> INTEL_REGION_LMEM_0)) {
>> -		/* object is "remote", not in local memory */
>> -		i915_gem_object_put(obj);
>> -		drm_dbg_kms(&i915->drm, "framebuffer must reside in local
>> memory\n");
>> -		return ERR_PTR(-EREMOTE);
>> -	}
>> -
>> -	return intel_bo_to_drm_bo(obj);
>> -}
>> diff --git a/drivers/gpu/drm/i915/display/intel_fb_bo.h
>> b/drivers/gpu/drm/i915/display/intel_fb_bo.h
>> deleted file mode 100644
>> index d775773c6c03..000000000000
>> --- a/drivers/gpu/drm/i915/display/intel_fb_bo.h
>> +++ /dev/null
>> @@ -1,25 +0,0 @@
>> -/* SPDX-License-Identifier: MIT */
>> -/*
>> - * Copyright © 2021 Intel Corporation
>> - */
>> -
>> -#ifndef __INTEL_FB_BO_H__
>> -#define __INTEL_FB_BO_H__
>> -
>> -struct drm_device;
>> -struct drm_file;
>> -struct drm_framebuffer;
>> -struct drm_gem_object;
>> -struct drm_mode_fb_cmd2;
>> -
>> -void intel_fb_bo_framebuffer_fini(struct drm_gem_object *obj);
>> -
>> -int intel_fb_bo_framebuffer_init(struct drm_gem_object *obj,
>> -				 struct drm_mode_fb_cmd2 *mode_cmd);
>> -
>> -struct drm_gem_object *
>> -intel_fb_bo_lookup_valid_bo(struct drm_device *drm,
>> -			    struct drm_file *filp,
>> -			    const struct drm_mode_fb_cmd2
>> *user_mode_cmd);
>> -
>> -#endif
>> diff --git a/drivers/gpu/drm/i915/i915_bo.c
>> b/drivers/gpu/drm/i915/i915_bo.c index 04fc0e3b7ef6..1789f7cab05c
>> 100644
>> --- a/drivers/gpu/drm/i915/i915_bo.c
>> +++ b/drivers/gpu/drm/i915/i915_bo.c
>> @@ -2,8 +2,10 @@
>>  /* Copyright © 2024 Intel Corporation */
>> 
>>  #include <drm/drm_panic.h>
>> +#include <drm/drm_print.h>
>>  #include <drm/intel/display_parent_interface.h>
>> 
>> +#include "display/intel_fb.h"
>>  #include "gem/i915_gem_mman.h"
>>  #include "gem/i915_gem_object.h"
>>  #include "gem/i915_gem_object_frontbuffer.h"
>> @@ -11,6 +13,7 @@
>> 
>>  #include "i915_bo.h"
>>  #include "i915_debugfs.h"
>> +#include "i915_drv.h"
>> 
>>  static bool i915_bo_is_tiled(struct drm_gem_object *obj)  { @@ -52,6 +55,92
>> @@ static void i915_bo_describe(struct seq_file *m, struct drm_gem_object
>> *obj)
>>  	i915_debugfs_describe_obj(m, to_intel_bo(obj));  }
>> 
>> +static int i915_bo_framebuffer_init(struct drm_gem_object *_obj,
>> +				    struct drm_mode_fb_cmd2 *mode_cmd) {
>> +	struct drm_i915_gem_object *obj = to_intel_bo(_obj);
>> +	struct drm_i915_private *i915 = to_i915(obj->base.dev);
>> +	unsigned int tiling, stride;
>> +
>> +	i915_gem_object_lock(obj, NULL);
>> +	tiling = i915_gem_object_get_tiling(obj);
>> +	stride = i915_gem_object_get_stride(obj);
>> +	i915_gem_object_unlock(obj);
>> +
>> +	if (mode_cmd->flags & DRM_MODE_FB_MODIFIERS) {
>> +		/*
>> +		 * If there's a fence, enforce that
>> +		 * the fb modifier and tiling mode match.
>> +		 */
>> +		if (tiling != I915_TILING_NONE &&
>> +		    tiling != intel_fb_modifier_to_tiling(mode_cmd-
>> >modifier[0])) {
>> +			drm_dbg_kms(&i915->drm,
>> +				    "tiling_mode doesn't match fb modifier\n");
>> +			return -EINVAL;
>> +		}
>> +	} else {
>> +		if (tiling == I915_TILING_X) {
>> +			mode_cmd->modifier[0] =
>> I915_FORMAT_MOD_X_TILED;
>> +		} else if (tiling == I915_TILING_Y) {
>> +			drm_dbg_kms(&i915->drm,
>> +				    "No Y tiling for legacy addfb\n");
>> +			return -EINVAL;
>> +		}
>> +	}
>> +
>> +	/*
>> +	 * gen2/3 display engine uses the fence if present,
>> +	 * so the tiling mode must match the fb modifier exactly.
>> +	 */
>> +	if (GRAPHICS_VER(i915) < 4 &&
>> +	    tiling != intel_fb_modifier_to_tiling(mode_cmd->modifier[0])) {
>> +		drm_dbg_kms(&i915->drm,
>> +			    "tiling_mode must match fb modifier exactly on
>> gen2/3\n");
>> +		return -EINVAL;
>> +	}
>> +
>> +	/*
>> +	 * If there's a fence, enforce that
>> +	 * the fb pitch and fence stride match.
>> +	 */
>> +	if (tiling != I915_TILING_NONE && mode_cmd->pitches[0] != stride) {
>> +		drm_dbg_kms(&i915->drm,
>> +			    "pitch (%d) must match tiling stride (%d)\n",
>> +			    mode_cmd->pitches[0], stride);
>> +		return -EINVAL;
>> +	}
>> +
>> +	return 0;
>> +}
>> +
>> +static void i915_bo_framebuffer_fini(struct drm_gem_object *obj) {
>> +	/* Nothing to do for i915 */
>> +}
>> +
>> +static struct drm_gem_object *
>> +i915_bo_framebuffer_lookup(struct drm_device *drm,
>> +			   struct drm_file *filp,
>> +			   const struct drm_mode_fb_cmd2 *mode_cmd) {
>> +	struct drm_i915_private *i915 = to_i915(drm);
>> +	struct drm_i915_gem_object *obj;
>> +
>> +	obj = i915_gem_object_lookup(filp, mode_cmd->handles[0]);
>> +	if (!obj)
>> +		return ERR_PTR(-ENOENT);
>> +
>> +	/* object is backed with LMEM for discrete */
>> +	if (HAS_LMEM(i915) && !i915_gem_object_can_migrate(obj,
>> INTEL_REGION_LMEM_0)) {
>> +		/* object is "remote", not in local memory */
>> +		i915_gem_object_put(obj);
>> +		drm_dbg_kms(&i915->drm, "framebuffer must reside in local
>> memory\n");
>> +		return ERR_PTR(-EREMOTE);
>> +	}
>> +
>> +	return intel_bo_to_drm_bo(obj);
>> +}
>> +
>>  const struct intel_display_bo_interface i915_display_bo_interface = {
>>  	.is_tiled = i915_bo_is_tiled,
>>  	.is_userptr = i915_bo_is_userptr,
>> @@ -61,4 +150,7 @@ const struct intel_display_bo_interface
>> i915_display_bo_interface = {
>>  	.fb_mmap = i915_bo_fb_mmap,
>>  	.read_from_page = i915_bo_read_from_page,
>>  	.describe = i915_bo_describe,
>> +	.framebuffer_init = i915_bo_framebuffer_init,
>> +	.framebuffer_fini = i915_bo_framebuffer_fini,
>> +	.framebuffer_lookup = i915_bo_framebuffer_lookup,
>>  };
>> diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
>> index b16ed1ce2a85..dab979287a96 100644
>> --- a/drivers/gpu/drm/xe/Makefile
>> +++ b/drivers/gpu/drm/xe/Makefile
>> @@ -211,7 +211,6 @@ $(obj)/i915-display/%.o:
>> $(srctree)/drivers/gpu/drm/i915/display/%.c FORCE
>> 
>>  # Display code specific to xe
>>  xe-$(CONFIG_DRM_XE_DISPLAY) += \
>> -	display/intel_fb_bo.o \
>>  	display/intel_fbdev_fb.o \
>>  	display/xe_display.o \
>>  	display/xe_display_bo.o \
>> diff --git a/drivers/gpu/drm/xe/display/intel_fb_bo.c
>> b/drivers/gpu/drm/xe/display/intel_fb_bo.c
>> deleted file mode 100644
>> index db8b1a27b4de..000000000000
>> --- a/drivers/gpu/drm/xe/display/intel_fb_bo.c
>> +++ /dev/null
>> @@ -1,91 +0,0 @@
>> -/* SPDX-License-Identifier: MIT */
>> -/*
>> - * Copyright © 2021 Intel Corporation
>> - */
>> -
>> -#include <drm/drm_modeset_helper.h>
>> -#include <drm/ttm/ttm_bo.h>
>> -
>> -#include "intel_display_types.h"
>> -#include "intel_fb.h"
>> -#include "intel_fb_bo.h"
>> -#include "xe_bo.h"
>> -
>> -void intel_fb_bo_framebuffer_fini(struct drm_gem_object *obj) -{
>> -	struct xe_bo *bo = gem_to_xe_bo(obj);
>> -
>> -	if (bo->flags & XE_BO_FLAG_PINNED) {
>> -		/* Unpin our kernel fb first */
>> -		xe_bo_lock(bo, false);
>> -		xe_bo_unpin(bo);
>> -		xe_bo_unlock(bo);
>> -	}
>> -	xe_bo_put(bo);
>> -}
>> -
>> -int intel_fb_bo_framebuffer_init(struct drm_gem_object *obj,
>> -				 struct drm_mode_fb_cmd2 *mode_cmd)
>> -{
>> -	struct xe_bo *bo = gem_to_xe_bo(obj);
>> -	struct xe_device *xe = to_xe_device(bo->ttm.base.dev);
>> -	int ret;
>> -
>> -	/*
>> -	 * Some modifiers require physical alignment of 64KiB VRAM pages;
>> -	 * require that the BO in those cases is created correctly.
>> -	 */
>> -	if (XE_IOCTL_DBG(xe, intel_fb_needs_64k_phys(mode_cmd-
>> >modifier[0]) &&
>> -			     !(bo->flags & XE_BO_FLAG_NEEDS_64K)))
>> -		return -EINVAL;
>> -
>> -	xe_bo_get(bo);
>> -
>> -	ret = ttm_bo_reserve(&bo->ttm, true, false, NULL);
>> -	if (ret)
>> -		goto err;
>> -
>> -	if (!(bo->flags & XE_BO_FLAG_SCANOUT)) {
>> -		/*
>> -		 * XE_BO_FLAG_SCANOUT should ideally be set at creation,
>> or is
>> -		 * automatically set when creating FB. We cannot change
>> caching
>> -		 * mode when the bo is VM_BINDed, so we can only set
>> -		 * coherency with display when unbound.
>> -		 */
>> -		if (XE_IOCTL_DBG(xe, xe_bo_is_vm_bound(bo))) {
>> -			ttm_bo_unreserve(&bo->ttm);
>> -			ret = -EINVAL;
>> -			goto err;
>> -		}
>> -		bo->flags |= XE_BO_FLAG_SCANOUT;
>> -	}
>> -	ttm_bo_unreserve(&bo->ttm);
>> -	return 0;
>> -
>> -err:
>> -	xe_bo_put(bo);
>> -	return ret;
>> -}
>> -
>> -struct drm_gem_object *intel_fb_bo_lookup_valid_bo(struct drm_device
>> *drm,
>> -						   struct drm_file *filp,
>> -						   const struct
>> drm_mode_fb_cmd2 *mode_cmd)
>> -{
>> -	struct xe_device *xe = to_xe_device(drm);
>> -	struct xe_bo *bo;
>> -	struct drm_gem_object *gem = drm_gem_object_lookup(filp,
>> mode_cmd->handles[0]);
>> -
>> -	if (!gem)
>> -		return ERR_PTR(-ENOENT);
>> -
>> -	bo = gem_to_xe_bo(gem);
>> -	/* Require vram placement or dma-buf import */
>> -	if (IS_DGFX(xe) &&
>> -	    !xe_bo_can_migrate(bo, XE_PL_VRAM0) &&
>> -	    bo->ttm.type != ttm_bo_type_sg) {
>> -		drm_gem_object_put(gem);
>> -		return ERR_PTR(-EREMOTE);
>> -	}
>> -
>> -	return gem;
>> -}
>> diff --git a/drivers/gpu/drm/xe/display/xe_display_bo.c
>> b/drivers/gpu/drm/xe/display/xe_display_bo.c
>> index a53ba3f247ec..a689f71e7b14 100644
>> --- a/drivers/gpu/drm/xe/display/xe_display_bo.c
>> +++ b/drivers/gpu/drm/xe/display/xe_display_bo.c
>> @@ -4,6 +4,7 @@
>>  #include <drm/drm_gem.h>
>>  #include <drm/intel/display_parent_interface.h>
>> 
>> +#include "intel_fb.h"
>>  #include "xe_bo.h"
>>  #include "xe_display_bo.h"
>>  #include "xe_pxp.h"
>> @@ -20,9 +21,92 @@ static int xe_display_bo_read_from_page(struct
>> drm_gem_object *obj, u64 offset,
>>  	return xe_bo_read(bo, offset, dst, size);  }
>> 
>> +static int xe_display_bo_framebuffer_init(struct drm_gem_object *obj,
>> +					  struct drm_mode_fb_cmd2
>> *mode_cmd) {
>> +	struct xe_bo *bo = gem_to_xe_bo(obj);
>> +	struct xe_device *xe = to_xe_device(bo->ttm.base.dev);
>> +	int ret;
>> +
>> +	/*
>> +	 * Some modifiers require physical alignment of 64KiB VRAM pages;
>> +	 * require that the BO in those cases is created correctly.
>> +	 */
>> +	if (XE_IOCTL_DBG(xe, intel_fb_needs_64k_phys(mode_cmd-
>> >modifier[0]) &&
>> +			     !(bo->flags & XE_BO_FLAG_NEEDS_64K)))
>> +		return -EINVAL;
>> +
>> +	xe_bo_get(bo);
>> +
>> +	ret = ttm_bo_reserve(&bo->ttm, true, false, NULL);
>> +	if (ret)
>> +		goto err;
>> +
>> +	if (!(bo->flags & XE_BO_FLAG_SCANOUT)) {
>> +		/*
>> +		 * XE_BO_FLAG_SCANOUT should ideally be set at creation,
>> or is
>> +		 * automatically set when creating FB. We cannot change
>> caching
>> +		 * mode when the bo is VM_BINDed, so we can only set
>> +		 * coherency with display when unbound.
>> +		 */
>> +		if (XE_IOCTL_DBG(xe, xe_bo_is_vm_bound(bo))) {
>> +			ttm_bo_unreserve(&bo->ttm);
>> +			ret = -EINVAL;
>> +			goto err;
>> +		}
>> +		bo->flags |= XE_BO_FLAG_SCANOUT;
>> +	}
>> +	ttm_bo_unreserve(&bo->ttm);
>> +	return 0;
>> +
>> +err:
>> +	xe_bo_put(bo);
>> +	return ret;
>> +}
>> +
>> +static void xe_display_bo_framebuffer_fini(struct drm_gem_object *obj)
>> +{
>> +	struct xe_bo *bo = gem_to_xe_bo(obj);
>> +
>> +	if (bo->flags & XE_BO_FLAG_PINNED) {
>> +		/* Unpin our kernel fb first */
>> +		xe_bo_lock(bo, false);
>> +		xe_bo_unpin(bo);
>> +		xe_bo_unlock(bo);
>> +	}
>> +	xe_bo_put(bo);
>> +}
>> +
>> +static struct drm_gem_object *
>> +xe_display_bo_framebuffer_lookup(struct drm_device *drm,
>> +				 struct drm_file *filp,
>> +				 const struct drm_mode_fb_cmd2
>> *mode_cmd) {
>> +	struct xe_device *xe = to_xe_device(drm);
>> +	struct xe_bo *bo;
>> +	struct drm_gem_object *gem = drm_gem_object_lookup(filp,
>> +mode_cmd->handles[0]);
>> +
>> +	if (!gem)
>> +		return ERR_PTR(-ENOENT);
>> +
>> +	bo = gem_to_xe_bo(gem);
>> +	/* Require vram placement or dma-buf import */
>> +	if (IS_DGFX(xe) &&
>> +	    !xe_bo_can_migrate(bo, XE_PL_VRAM0) &&
>> +	    bo->ttm.type != ttm_bo_type_sg) {
>> +		drm_gem_object_put(gem);
>> +		return ERR_PTR(-EREMOTE);
>> +	}
>> +
>> +	return gem;
>> +}
>> +
>>  const struct intel_display_bo_interface xe_display_bo_interface = {
>>  	.is_protected = xe_display_bo_is_protected,
>>  	.key_check = xe_pxp_obj_key_check,
>>  	.fb_mmap = drm_gem_prime_mmap,
>>  	.read_from_page = xe_display_bo_read_from_page,
>> +	.framebuffer_init = xe_display_bo_framebuffer_init,
>> +	.framebuffer_fini = xe_display_bo_framebuffer_fini,
>> +	.framebuffer_lookup = xe_display_bo_framebuffer_lookup,
>>  };
>> diff --git a/include/drm/intel/display_parent_interface.h
>> b/include/drm/intel/display_parent_interface.h
>> index 2b53d12b0e0a..97ec94a2e749 100644
>> --- a/include/drm/intel/display_parent_interface.h
>> +++ b/include/drm/intel/display_parent_interface.h
>> @@ -12,6 +12,7 @@ struct drm_device;
>>  struct drm_file;
>>  struct drm_framebuffer;
>>  struct drm_gem_object;
>> +struct drm_mode_fb_cmd2;
>>  struct drm_plane_state;
>>  struct drm_scanout_buffer;
>>  struct i915_vma;
>> @@ -37,6 +38,11 @@ struct intel_display_bo_interface {
>>  	int (*fb_mmap)(struct drm_gem_object *obj, struct vm_area_struct
>> *vma);
>>  	int (*read_from_page)(struct drm_gem_object *obj, u64 offset, void
>> *dst, int size);
>>  	void (*describe)(struct seq_file *m, struct drm_gem_object *obj); /*
>> Optional */
>> +	int (*framebuffer_init)(struct drm_gem_object *obj, struct
>> drm_mode_fb_cmd2 *mode_cmd);
>> +	void (*framebuffer_fini)(struct drm_gem_object *obj);
>> +	struct drm_gem_object *(*framebuffer_lookup)(struct drm_device
>> *drm,
>> +						     struct drm_file *filp,
>> +						     const struct
>> drm_mode_fb_cmd2 *user_mode_cmd);
>>  };
>> 
>>  struct intel_display_dpt_interface {
>> --
>> 2.47.3
>

-- 
Jani Nikula, Intel

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

* RE: [PATCH 5/5] drm/{i915,xe}: move framebuffer bo to parent interface
  2026-03-12  9:00     ` [PATCH 5/5] drm/{i915, xe}: " Jani Nikula
@ 2026-03-13  5:12       ` Kandpal, Suraj
  0 siblings, 0 replies; 17+ messages in thread
From: Kandpal, Suraj @ 2026-03-13  5:12 UTC (permalink / raw)
  To: Nikula, Jani, intel-gfx@lists.freedesktop.org,
	intel-xe@lists.freedesktop.org

> Subject: RE: [PATCH 5/5] drm/{i915,xe}: move framebuffer bo to parent
> interface
> 
> On Thu, 12 Mar 2026, "Kandpal, Suraj" <suraj.kandpal@intel.com> wrote:
> >> Subject: [PATCH 5/5] drm/{i915,xe}: move framebuffer bo to parent
> >> interface
> >>
> >> Add .framebuffer_init, .framebuffer_fini and .framebuffer_lookup to
> >> the bo parent interface. While they're about framebuffers, they're
> >> specifically about framebuffer objects, so the bo interface is a good
> >> enough fit, and there's no need to add another interface struct.
> >
> > Maybe it can also be mentioned that since we move all the functions
> > from Intel_fb_bo to i915_bo.c we can safely remove it.
> 
> Sure.
> 
> >>
> >> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> >> ---
> >>  drivers/gpu/drm/i915/Makefile                |  1 -
> >>  drivers/gpu/drm/i915/display/intel_bo.c      | 21 +++++
> >>  drivers/gpu/drm/i915/display/intel_bo.h      |  9 ++
> >>  drivers/gpu/drm/i915/display/intel_fb.c      | 12 +--
> >>  drivers/gpu/drm/i915/display/intel_fb_bo.c   | 99 --------------------
> >>  drivers/gpu/drm/i915/display/intel_fb_bo.h   | 25 -----
> >>  drivers/gpu/drm/i915/i915_bo.c               | 92 ++++++++++++++++++
> >>  drivers/gpu/drm/xe/Makefile                  |  1 -
> >>  drivers/gpu/drm/xe/display/intel_fb_bo.c     | 91 ------------------
> >>  drivers/gpu/drm/xe/display/xe_display_bo.c   | 84 +++++++++++++++++
> >>  include/drm/intel/display_parent_interface.h |  6 ++
> >>  11 files changed, 218 insertions(+), 223 deletions(-)  delete mode
> >> 100644 drivers/gpu/drm/i915/display/intel_fb_bo.c
> >>  delete mode 100644 drivers/gpu/drm/i915/display/intel_fb_bo.h
> >>  delete mode 100644 drivers/gpu/drm/xe/display/intel_fb_bo.c
> >>
> >> diff --git a/drivers/gpu/drm/i915/Makefile
> >> b/drivers/gpu/drm/i915/Makefile index 425933fb26a5..be976a90c5a6
> >> 100644
> >> --- a/drivers/gpu/drm/i915/Makefile
> >> +++ b/drivers/gpu/drm/i915/Makefile
> >> @@ -278,7 +278,6 @@ i915-y += \
> >>  	display/intel_drrs.o \
> >>  	display/intel_dsb.o \
> >>  	display/intel_fb.o \
> >> -	display/intel_fb_bo.o \
> >>  	display/intel_fb_pin.o \
> >>  	display/intel_fbc.o \
> >>  	display/intel_fdi.o \
> >> diff --git a/drivers/gpu/drm/i915/display/intel_bo.c
> >> b/drivers/gpu/drm/i915/display/intel_bo.c
> >> index e356ab4e0640..3b82d38a0504 100644
> >> --- a/drivers/gpu/drm/i915/display/intel_bo.c
> >> +++ b/drivers/gpu/drm/i915/display/intel_bo.c
> >> @@ -64,3 +64,24 @@ void intel_bo_describe(struct seq_file *m, struct
> >> drm_gem_object *obj)
> >>  	if (display->parent->bo->describe)
> >>  		display->parent->bo->describe(m, obj);  }
> >> +
> >> +int intel_bo_framebuffer_init(struct drm_gem_object *obj, struct
> >> +drm_mode_fb_cmd2 *mode_cmd) {
> >> +	struct intel_display *display = to_intel_display(obj->dev);
> >> +
> >> +	return display->parent->bo->framebuffer_init(obj, mode_cmd); }
> >> +
> >> +void intel_bo_framebuffer_fini(struct drm_gem_object *obj) {
> >> +	struct intel_display *display = to_intel_display(obj->dev);
> >> +
> >> +	display->parent->bo->framebuffer_fini(obj);
> >
> > Should we be making this optional . This will help avoid creating
> > dummy functions for fini like you have done previously.
> 
> I have this gnawing feeling that it should not be a dummy function in the first
> place. I haven't actually looked into the bottom of it. That's why I ended up
> keeping the dummy.

I think its better to play it safe.
Do you think a TODO can be added ?

Otherwise LGTM,
Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>

> 
> BR,
> Jani.
> 
> 
> >
> > Regards,
> > Suraj Kandpal
> >
> >> +}
> >> +
> >> +struct drm_gem_object *intel_bo_framebuffer_lookup(struct
> >> +intel_display
> >> *display,
> >> +						   struct drm_file *filp,
> >> +						   const struct
> >> drm_mode_fb_cmd2 *user_mode_cmd) {
> >> +	return display->parent->bo->framebuffer_lookup(display->drm, filp,
> >> +user_mode_cmd); }
> >> diff --git a/drivers/gpu/drm/i915/display/intel_bo.h
> >> b/drivers/gpu/drm/i915/display/intel_bo.h
> >> index 40390ed92ceb..aec188c706c2 100644
> >> --- a/drivers/gpu/drm/i915/display/intel_bo.h
> >> +++ b/drivers/gpu/drm/i915/display/intel_bo.h
> >> @@ -6,8 +6,11 @@
> >>
> >>  #include <linux/types.h>
> >>
> >> +struct drm_file;
> >>  struct drm_gem_object;
> >> +struct drm_mode_fb_cmd2;
> >>  struct drm_scanout_buffer;
> >> +struct intel_display;
> >>  struct intel_framebuffer;
> >>  struct seq_file;
> >>  struct vm_area_struct;
> >> @@ -22,4 +25,10 @@ int intel_bo_read_from_page(struct drm_gem_object
> >> *obj, u64 offset, void *dst, i
> >>
> >>  void intel_bo_describe(struct seq_file *m, struct drm_gem_object
> >> *obj);
> >>
> >> +void intel_bo_framebuffer_fini(struct drm_gem_object *obj); int
> >> +intel_bo_framebuffer_init(struct drm_gem_object *obj, struct
> >> +drm_mode_fb_cmd2 *mode_cmd); struct drm_gem_object
> >> *intel_bo_framebuffer_lookup(struct intel_display *display,
> >> +						   struct drm_file *filp,
> >> +						   const struct
> >> drm_mode_fb_cmd2 *user_mode_cmd);
> >> +
> >>  #endif /* __INTEL_BO__ */
> >> diff --git a/drivers/gpu/drm/i915/display/intel_fb.c
> >> b/drivers/gpu/drm/i915/display/intel_fb.c
> >> index 49c6ca9d94c6..5768619f840f 100644
> >> --- a/drivers/gpu/drm/i915/display/intel_fb.c
> >> +++ b/drivers/gpu/drm/i915/display/intel_fb.c
> >> @@ -17,7 +17,6 @@
> >>  #include "intel_display_types.h"
> >>  #include "intel_display_utils.h"
> >>  #include "intel_fb.h"
> >> -#include "intel_fb_bo.h"
> >>  #include "intel_frontbuffer.h"
> >>  #include "intel_parent.h"
> >>  #include "intel_plane.h"
> >> @@ -2111,7 +2110,7 @@ static void
> >> intel_user_framebuffer_destroy(struct
> >> drm_framebuffer *fb)
> >>  	if (intel_fb_uses_dpt(fb))
> >>  		intel_parent_dpt_destroy(display, intel_fb->dpt);
> >>
> >> -	intel_fb_bo_framebuffer_fini(intel_fb_bo(fb));
> >> +	intel_bo_framebuffer_fini(intel_fb_bo(fb));
> >>
> >>  	intel_parent_frontbuffer_put(display, intel_fb->frontbuffer);
> >>
> >> @@ -2222,7 +2221,7 @@ int intel_framebuffer_init(struct
> >> intel_framebuffer *intel_fb,
> >>
> >>  	/*
> >>  	 * intel_parent_frontbuffer_get() must be done before
> >> -	 * intel_fb_bo_framebuffer_init() to avoid set_tiling vs. addfb race.
> >> +	 * intel_bo_framebuffer_init() to avoid set_tiling vs. addfb race.
> >>  	 */
> >>  	intel_fb->frontbuffer = intel_parent_frontbuffer_get(display, obj);
> >>  	if (!intel_fb->frontbuffer) {
> >> @@ -2230,7 +2229,7 @@ int intel_framebuffer_init(struct
> >> intel_framebuffer *intel_fb,
> >>  		goto err_free_panic;
> >>  	}
> >>
> >> -	ret = intel_fb_bo_framebuffer_init(obj, mode_cmd);
> >> +	ret = intel_bo_framebuffer_init(obj, mode_cmd);
> >>  	if (ret)
> >>  		goto err_frontbuffer_put;
> >>
> >> @@ -2333,7 +2332,7 @@ int intel_framebuffer_init(struct
> >> intel_framebuffer *intel_fb,
> >>  	if (intel_fb_uses_dpt(fb))
> >>  		intel_parent_dpt_destroy(display, intel_fb->dpt);
> >>  err_bo_framebuffer_fini:
> >> -	intel_fb_bo_framebuffer_fini(obj);
> >> +	intel_bo_framebuffer_fini(obj);
> >>  err_frontbuffer_put:
> >>  	intel_parent_frontbuffer_put(display, intel_fb->frontbuffer);
> >>  err_free_panic:
> >> @@ -2348,11 +2347,12 @@ intel_user_framebuffer_create(struct
> >> drm_device *dev,
> >>  			      const struct drm_format_info *info,
> >>  			      const struct drm_mode_fb_cmd2
> >> *user_mode_cmd)  {
> >> +	struct intel_display *display = to_intel_display(dev);
> >>  	struct drm_framebuffer *fb;
> >>  	struct drm_gem_object *obj;
> >>  	struct drm_mode_fb_cmd2 mode_cmd = *user_mode_cmd;
> >>
> >> -	obj = intel_fb_bo_lookup_valid_bo(dev, filp, &mode_cmd);
> >> +	obj = intel_bo_framebuffer_lookup(display, filp, &mode_cmd);
> >>  	if (IS_ERR(obj))
> >>  		return ERR_CAST(obj);
> >>
> >> diff --git a/drivers/gpu/drm/i915/display/intel_fb_bo.c
> >> b/drivers/gpu/drm/i915/display/intel_fb_bo.c
> >> deleted file mode 100644
> >> index a4d49ef450d9..000000000000
> >> --- a/drivers/gpu/drm/i915/display/intel_fb_bo.c
> >> +++ /dev/null
> >> @@ -1,99 +0,0 @@
> >> -/* SPDX-License-Identifier: MIT */
> >> -/*
> >> - * Copyright © 2021 Intel Corporation
> >> - */
> >> -
> >> -#include <drm/drm_framebuffer.h>
> >> -#include <drm/drm_print.h>
> >> -
> >> -#include "gem/i915_gem_object.h"
> >> -
> >> -#include "i915_drv.h"
> >> -#include "intel_fb.h"
> >> -#include "intel_fb_bo.h"
> >> -
> >> -void intel_fb_bo_framebuffer_fini(struct drm_gem_object *obj) -{
> >> -	/* Nothing to do for i915 */
> >> -}
> >> -
> >> -int intel_fb_bo_framebuffer_init(struct drm_gem_object *_obj,
> >> -				 struct drm_mode_fb_cmd2 *mode_cmd)
> >> -{
> >> -	struct drm_i915_gem_object *obj = to_intel_bo(_obj);
> >> -	struct drm_i915_private *i915 = to_i915(obj->base.dev);
> >> -	unsigned int tiling, stride;
> >> -
> >> -	i915_gem_object_lock(obj, NULL);
> >> -	tiling = i915_gem_object_get_tiling(obj);
> >> -	stride = i915_gem_object_get_stride(obj);
> >> -	i915_gem_object_unlock(obj);
> >> -
> >> -	if (mode_cmd->flags & DRM_MODE_FB_MODIFIERS) {
> >> -		/*
> >> -		 * If there's a fence, enforce that
> >> -		 * the fb modifier and tiling mode match.
> >> -		 */
> >> -		if (tiling != I915_TILING_NONE &&
> >> -		    tiling != intel_fb_modifier_to_tiling(mode_cmd-
> >> >modifier[0])) {
> >> -			drm_dbg_kms(&i915->drm,
> >> -				    "tiling_mode doesn't match fb modifier\n");
> >> -			return -EINVAL;
> >> -		}
> >> -	} else {
> >> -		if (tiling == I915_TILING_X) {
> >> -			mode_cmd->modifier[0] =
> >> I915_FORMAT_MOD_X_TILED;
> >> -		} else if (tiling == I915_TILING_Y) {
> >> -			drm_dbg_kms(&i915->drm,
> >> -				    "No Y tiling for legacy addfb\n");
> >> -			return -EINVAL;
> >> -		}
> >> -	}
> >> -
> >> -	/*
> >> -	 * gen2/3 display engine uses the fence if present,
> >> -	 * so the tiling mode must match the fb modifier exactly.
> >> -	 */
> >> -	if (GRAPHICS_VER(i915) < 4 &&
> >> -	    tiling != intel_fb_modifier_to_tiling(mode_cmd->modifier[0])) {
> >> -		drm_dbg_kms(&i915->drm,
> >> -			    "tiling_mode must match fb modifier exactly on
> >> gen2/3\n");
> >> -		return -EINVAL;
> >> -	}
> >> -
> >> -	/*
> >> -	 * If there's a fence, enforce that
> >> -	 * the fb pitch and fence stride match.
> >> -	 */
> >> -	if (tiling != I915_TILING_NONE && mode_cmd->pitches[0] != stride) {
> >> -		drm_dbg_kms(&i915->drm,
> >> -			    "pitch (%d) must match tiling stride (%d)\n",
> >> -			    mode_cmd->pitches[0], stride);
> >> -		return -EINVAL;
> >> -	}
> >> -
> >> -	return 0;
> >> -}
> >> -
> >> -struct drm_gem_object *
> >> -intel_fb_bo_lookup_valid_bo(struct drm_device *drm,
> >> -			    struct drm_file *filp,
> >> -			    const struct drm_mode_fb_cmd2 *mode_cmd)
> >> -{
> >> -	struct drm_i915_private *i915 = to_i915(drm);
> >> -	struct drm_i915_gem_object *obj;
> >> -
> >> -	obj = i915_gem_object_lookup(filp, mode_cmd->handles[0]);
> >> -	if (!obj)
> >> -		return ERR_PTR(-ENOENT);
> >> -
> >> -	/* object is backed with LMEM for discrete */
> >> -	if (HAS_LMEM(i915) && !i915_gem_object_can_migrate(obj,
> >> INTEL_REGION_LMEM_0)) {
> >> -		/* object is "remote", not in local memory */
> >> -		i915_gem_object_put(obj);
> >> -		drm_dbg_kms(&i915->drm, "framebuffer must reside in local
> >> memory\n");
> >> -		return ERR_PTR(-EREMOTE);
> >> -	}
> >> -
> >> -	return intel_bo_to_drm_bo(obj);
> >> -}
> >> diff --git a/drivers/gpu/drm/i915/display/intel_fb_bo.h
> >> b/drivers/gpu/drm/i915/display/intel_fb_bo.h
> >> deleted file mode 100644
> >> index d775773c6c03..000000000000
> >> --- a/drivers/gpu/drm/i915/display/intel_fb_bo.h
> >> +++ /dev/null
> >> @@ -1,25 +0,0 @@
> >> -/* SPDX-License-Identifier: MIT */
> >> -/*
> >> - * Copyright © 2021 Intel Corporation
> >> - */
> >> -
> >> -#ifndef __INTEL_FB_BO_H__
> >> -#define __INTEL_FB_BO_H__
> >> -
> >> -struct drm_device;
> >> -struct drm_file;
> >> -struct drm_framebuffer;
> >> -struct drm_gem_object;
> >> -struct drm_mode_fb_cmd2;
> >> -
> >> -void intel_fb_bo_framebuffer_fini(struct drm_gem_object *obj);
> >> -
> >> -int intel_fb_bo_framebuffer_init(struct drm_gem_object *obj,
> >> -				 struct drm_mode_fb_cmd2 *mode_cmd);
> >> -
> >> -struct drm_gem_object *
> >> -intel_fb_bo_lookup_valid_bo(struct drm_device *drm,
> >> -			    struct drm_file *filp,
> >> -			    const struct drm_mode_fb_cmd2
> >> *user_mode_cmd);
> >> -
> >> -#endif
> >> diff --git a/drivers/gpu/drm/i915/i915_bo.c
> >> b/drivers/gpu/drm/i915/i915_bo.c index 04fc0e3b7ef6..1789f7cab05c
> >> 100644
> >> --- a/drivers/gpu/drm/i915/i915_bo.c
> >> +++ b/drivers/gpu/drm/i915/i915_bo.c
> >> @@ -2,8 +2,10 @@
> >>  /* Copyright © 2024 Intel Corporation */
> >>
> >>  #include <drm/drm_panic.h>
> >> +#include <drm/drm_print.h>
> >>  #include <drm/intel/display_parent_interface.h>
> >>
> >> +#include "display/intel_fb.h"
> >>  #include "gem/i915_gem_mman.h"
> >>  #include "gem/i915_gem_object.h"
> >>  #include "gem/i915_gem_object_frontbuffer.h"
> >> @@ -11,6 +13,7 @@
> >>
> >>  #include "i915_bo.h"
> >>  #include "i915_debugfs.h"
> >> +#include "i915_drv.h"
> >>
> >>  static bool i915_bo_is_tiled(struct drm_gem_object *obj)  { @@ -52,6
> >> +55,92 @@ static void i915_bo_describe(struct seq_file *m, struct
> >> drm_gem_object
> >> *obj)
> >>  	i915_debugfs_describe_obj(m, to_intel_bo(obj));  }
> >>
> >> +static int i915_bo_framebuffer_init(struct drm_gem_object *_obj,
> >> +				    struct drm_mode_fb_cmd2 *mode_cmd) {
> >> +	struct drm_i915_gem_object *obj = to_intel_bo(_obj);
> >> +	struct drm_i915_private *i915 = to_i915(obj->base.dev);
> >> +	unsigned int tiling, stride;
> >> +
> >> +	i915_gem_object_lock(obj, NULL);
> >> +	tiling = i915_gem_object_get_tiling(obj);
> >> +	stride = i915_gem_object_get_stride(obj);
> >> +	i915_gem_object_unlock(obj);
> >> +
> >> +	if (mode_cmd->flags & DRM_MODE_FB_MODIFIERS) {
> >> +		/*
> >> +		 * If there's a fence, enforce that
> >> +		 * the fb modifier and tiling mode match.
> >> +		 */
> >> +		if (tiling != I915_TILING_NONE &&
> >> +		    tiling != intel_fb_modifier_to_tiling(mode_cmd-
> >> >modifier[0])) {
> >> +			drm_dbg_kms(&i915->drm,
> >> +				    "tiling_mode doesn't match fb modifier\n");
> >> +			return -EINVAL;
> >> +		}
> >> +	} else {
> >> +		if (tiling == I915_TILING_X) {
> >> +			mode_cmd->modifier[0] =
> >> I915_FORMAT_MOD_X_TILED;
> >> +		} else if (tiling == I915_TILING_Y) {
> >> +			drm_dbg_kms(&i915->drm,
> >> +				    "No Y tiling for legacy addfb\n");
> >> +			return -EINVAL;
> >> +		}
> >> +	}
> >> +
> >> +	/*
> >> +	 * gen2/3 display engine uses the fence if present,
> >> +	 * so the tiling mode must match the fb modifier exactly.
> >> +	 */
> >> +	if (GRAPHICS_VER(i915) < 4 &&
> >> +	    tiling != intel_fb_modifier_to_tiling(mode_cmd->modifier[0])) {
> >> +		drm_dbg_kms(&i915->drm,
> >> +			    "tiling_mode must match fb modifier exactly on
> >> gen2/3\n");
> >> +		return -EINVAL;
> >> +	}
> >> +
> >> +	/*
> >> +	 * If there's a fence, enforce that
> >> +	 * the fb pitch and fence stride match.
> >> +	 */
> >> +	if (tiling != I915_TILING_NONE && mode_cmd->pitches[0] != stride) {
> >> +		drm_dbg_kms(&i915->drm,
> >> +			    "pitch (%d) must match tiling stride (%d)\n",
> >> +			    mode_cmd->pitches[0], stride);
> >> +		return -EINVAL;
> >> +	}
> >> +
> >> +	return 0;
> >> +}
> >> +
> >> +static void i915_bo_framebuffer_fini(struct drm_gem_object *obj) {
> >> +	/* Nothing to do for i915 */
> >> +}
> >> +
> >> +static struct drm_gem_object *
> >> +i915_bo_framebuffer_lookup(struct drm_device *drm,
> >> +			   struct drm_file *filp,
> >> +			   const struct drm_mode_fb_cmd2 *mode_cmd) {
> >> +	struct drm_i915_private *i915 = to_i915(drm);
> >> +	struct drm_i915_gem_object *obj;
> >> +
> >> +	obj = i915_gem_object_lookup(filp, mode_cmd->handles[0]);
> >> +	if (!obj)
> >> +		return ERR_PTR(-ENOENT);
> >> +
> >> +	/* object is backed with LMEM for discrete */
> >> +	if (HAS_LMEM(i915) && !i915_gem_object_can_migrate(obj,
> >> INTEL_REGION_LMEM_0)) {
> >> +		/* object is "remote", not in local memory */
> >> +		i915_gem_object_put(obj);
> >> +		drm_dbg_kms(&i915->drm, "framebuffer must reside in local
> >> memory\n");
> >> +		return ERR_PTR(-EREMOTE);
> >> +	}
> >> +
> >> +	return intel_bo_to_drm_bo(obj);
> >> +}
> >> +
> >>  const struct intel_display_bo_interface i915_display_bo_interface = {
> >>  	.is_tiled = i915_bo_is_tiled,
> >>  	.is_userptr = i915_bo_is_userptr,
> >> @@ -61,4 +150,7 @@ const struct intel_display_bo_interface
> >> i915_display_bo_interface = {
> >>  	.fb_mmap = i915_bo_fb_mmap,
> >>  	.read_from_page = i915_bo_read_from_page,
> >>  	.describe = i915_bo_describe,
> >> +	.framebuffer_init = i915_bo_framebuffer_init,
> >> +	.framebuffer_fini = i915_bo_framebuffer_fini,
> >> +	.framebuffer_lookup = i915_bo_framebuffer_lookup,
> >>  };
> >> diff --git a/drivers/gpu/drm/xe/Makefile
> >> b/drivers/gpu/drm/xe/Makefile index b16ed1ce2a85..dab979287a96 100644
> >> --- a/drivers/gpu/drm/xe/Makefile
> >> +++ b/drivers/gpu/drm/xe/Makefile
> >> @@ -211,7 +211,6 @@ $(obj)/i915-display/%.o:
> >> $(srctree)/drivers/gpu/drm/i915/display/%.c FORCE
> >>
> >>  # Display code specific to xe
> >>  xe-$(CONFIG_DRM_XE_DISPLAY) += \
> >> -	display/intel_fb_bo.o \
> >>  	display/intel_fbdev_fb.o \
> >>  	display/xe_display.o \
> >>  	display/xe_display_bo.o \
> >> diff --git a/drivers/gpu/drm/xe/display/intel_fb_bo.c
> >> b/drivers/gpu/drm/xe/display/intel_fb_bo.c
> >> deleted file mode 100644
> >> index db8b1a27b4de..000000000000
> >> --- a/drivers/gpu/drm/xe/display/intel_fb_bo.c
> >> +++ /dev/null
> >> @@ -1,91 +0,0 @@
> >> -/* SPDX-License-Identifier: MIT */
> >> -/*
> >> - * Copyright © 2021 Intel Corporation
> >> - */
> >> -
> >> -#include <drm/drm_modeset_helper.h>
> >> -#include <drm/ttm/ttm_bo.h>
> >> -
> >> -#include "intel_display_types.h"
> >> -#include "intel_fb.h"
> >> -#include "intel_fb_bo.h"
> >> -#include "xe_bo.h"
> >> -
> >> -void intel_fb_bo_framebuffer_fini(struct drm_gem_object *obj) -{
> >> -	struct xe_bo *bo = gem_to_xe_bo(obj);
> >> -
> >> -	if (bo->flags & XE_BO_FLAG_PINNED) {
> >> -		/* Unpin our kernel fb first */
> >> -		xe_bo_lock(bo, false);
> >> -		xe_bo_unpin(bo);
> >> -		xe_bo_unlock(bo);
> >> -	}
> >> -	xe_bo_put(bo);
> >> -}
> >> -
> >> -int intel_fb_bo_framebuffer_init(struct drm_gem_object *obj,
> >> -				 struct drm_mode_fb_cmd2 *mode_cmd)
> >> -{
> >> -	struct xe_bo *bo = gem_to_xe_bo(obj);
> >> -	struct xe_device *xe = to_xe_device(bo->ttm.base.dev);
> >> -	int ret;
> >> -
> >> -	/*
> >> -	 * Some modifiers require physical alignment of 64KiB VRAM pages;
> >> -	 * require that the BO in those cases is created correctly.
> >> -	 */
> >> -	if (XE_IOCTL_DBG(xe, intel_fb_needs_64k_phys(mode_cmd-
> >> >modifier[0]) &&
> >> -			     !(bo->flags & XE_BO_FLAG_NEEDS_64K)))
> >> -		return -EINVAL;
> >> -
> >> -	xe_bo_get(bo);
> >> -
> >> -	ret = ttm_bo_reserve(&bo->ttm, true, false, NULL);
> >> -	if (ret)
> >> -		goto err;
> >> -
> >> -	if (!(bo->flags & XE_BO_FLAG_SCANOUT)) {
> >> -		/*
> >> -		 * XE_BO_FLAG_SCANOUT should ideally be set at creation,
> >> or is
> >> -		 * automatically set when creating FB. We cannot change
> >> caching
> >> -		 * mode when the bo is VM_BINDed, so we can only set
> >> -		 * coherency with display when unbound.
> >> -		 */
> >> -		if (XE_IOCTL_DBG(xe, xe_bo_is_vm_bound(bo))) {
> >> -			ttm_bo_unreserve(&bo->ttm);
> >> -			ret = -EINVAL;
> >> -			goto err;
> >> -		}
> >> -		bo->flags |= XE_BO_FLAG_SCANOUT;
> >> -	}
> >> -	ttm_bo_unreserve(&bo->ttm);
> >> -	return 0;
> >> -
> >> -err:
> >> -	xe_bo_put(bo);
> >> -	return ret;
> >> -}
> >> -
> >> -struct drm_gem_object *intel_fb_bo_lookup_valid_bo(struct drm_device
> >> *drm,
> >> -						   struct drm_file *filp,
> >> -						   const struct
> >> drm_mode_fb_cmd2 *mode_cmd)
> >> -{
> >> -	struct xe_device *xe = to_xe_device(drm);
> >> -	struct xe_bo *bo;
> >> -	struct drm_gem_object *gem = drm_gem_object_lookup(filp,
> >> mode_cmd->handles[0]);
> >> -
> >> -	if (!gem)
> >> -		return ERR_PTR(-ENOENT);
> >> -
> >> -	bo = gem_to_xe_bo(gem);
> >> -	/* Require vram placement or dma-buf import */
> >> -	if (IS_DGFX(xe) &&
> >> -	    !xe_bo_can_migrate(bo, XE_PL_VRAM0) &&
> >> -	    bo->ttm.type != ttm_bo_type_sg) {
> >> -		drm_gem_object_put(gem);
> >> -		return ERR_PTR(-EREMOTE);
> >> -	}
> >> -
> >> -	return gem;
> >> -}
> >> diff --git a/drivers/gpu/drm/xe/display/xe_display_bo.c
> >> b/drivers/gpu/drm/xe/display/xe_display_bo.c
> >> index a53ba3f247ec..a689f71e7b14 100644
> >> --- a/drivers/gpu/drm/xe/display/xe_display_bo.c
> >> +++ b/drivers/gpu/drm/xe/display/xe_display_bo.c
> >> @@ -4,6 +4,7 @@
> >>  #include <drm/drm_gem.h>
> >>  #include <drm/intel/display_parent_interface.h>
> >>
> >> +#include "intel_fb.h"
> >>  #include "xe_bo.h"
> >>  #include "xe_display_bo.h"
> >>  #include "xe_pxp.h"
> >> @@ -20,9 +21,92 @@ static int xe_display_bo_read_from_page(struct
> >> drm_gem_object *obj, u64 offset,
> >>  	return xe_bo_read(bo, offset, dst, size);  }
> >>
> >> +static int xe_display_bo_framebuffer_init(struct drm_gem_object *obj,
> >> +					  struct drm_mode_fb_cmd2
> >> *mode_cmd) {
> >> +	struct xe_bo *bo = gem_to_xe_bo(obj);
> >> +	struct xe_device *xe = to_xe_device(bo->ttm.base.dev);
> >> +	int ret;
> >> +
> >> +	/*
> >> +	 * Some modifiers require physical alignment of 64KiB VRAM pages;
> >> +	 * require that the BO in those cases is created correctly.
> >> +	 */
> >> +	if (XE_IOCTL_DBG(xe, intel_fb_needs_64k_phys(mode_cmd-
> >> >modifier[0]) &&
> >> +			     !(bo->flags & XE_BO_FLAG_NEEDS_64K)))
> >> +		return -EINVAL;
> >> +
> >> +	xe_bo_get(bo);
> >> +
> >> +	ret = ttm_bo_reserve(&bo->ttm, true, false, NULL);
> >> +	if (ret)
> >> +		goto err;
> >> +
> >> +	if (!(bo->flags & XE_BO_FLAG_SCANOUT)) {
> >> +		/*
> >> +		 * XE_BO_FLAG_SCANOUT should ideally be set at creation,
> >> or is
> >> +		 * automatically set when creating FB. We cannot change
> >> caching
> >> +		 * mode when the bo is VM_BINDed, so we can only set
> >> +		 * coherency with display when unbound.
> >> +		 */
> >> +		if (XE_IOCTL_DBG(xe, xe_bo_is_vm_bound(bo))) {
> >> +			ttm_bo_unreserve(&bo->ttm);
> >> +			ret = -EINVAL;
> >> +			goto err;
> >> +		}
> >> +		bo->flags |= XE_BO_FLAG_SCANOUT;
> >> +	}
> >> +	ttm_bo_unreserve(&bo->ttm);
> >> +	return 0;
> >> +
> >> +err:
> >> +	xe_bo_put(bo);
> >> +	return ret;
> >> +}
> >> +
> >> +static void xe_display_bo_framebuffer_fini(struct drm_gem_object
> >> +*obj) {
> >> +	struct xe_bo *bo = gem_to_xe_bo(obj);
> >> +
> >> +	if (bo->flags & XE_BO_FLAG_PINNED) {
> >> +		/* Unpin our kernel fb first */
> >> +		xe_bo_lock(bo, false);
> >> +		xe_bo_unpin(bo);
> >> +		xe_bo_unlock(bo);
> >> +	}
> >> +	xe_bo_put(bo);
> >> +}
> >> +
> >> +static struct drm_gem_object *
> >> +xe_display_bo_framebuffer_lookup(struct drm_device *drm,
> >> +				 struct drm_file *filp,
> >> +				 const struct drm_mode_fb_cmd2
> >> *mode_cmd) {
> >> +	struct xe_device *xe = to_xe_device(drm);
> >> +	struct xe_bo *bo;
> >> +	struct drm_gem_object *gem = drm_gem_object_lookup(filp,
> >> +mode_cmd->handles[0]);
> >> +
> >> +	if (!gem)
> >> +		return ERR_PTR(-ENOENT);
> >> +
> >> +	bo = gem_to_xe_bo(gem);
> >> +	/* Require vram placement or dma-buf import */
> >> +	if (IS_DGFX(xe) &&
> >> +	    !xe_bo_can_migrate(bo, XE_PL_VRAM0) &&
> >> +	    bo->ttm.type != ttm_bo_type_sg) {
> >> +		drm_gem_object_put(gem);
> >> +		return ERR_PTR(-EREMOTE);
> >> +	}
> >> +
> >> +	return gem;
> >> +}
> >> +
> >>  const struct intel_display_bo_interface xe_display_bo_interface = {
> >>  	.is_protected = xe_display_bo_is_protected,
> >>  	.key_check = xe_pxp_obj_key_check,
> >>  	.fb_mmap = drm_gem_prime_mmap,
> >>  	.read_from_page = xe_display_bo_read_from_page,
> >> +	.framebuffer_init = xe_display_bo_framebuffer_init,
> >> +	.framebuffer_fini = xe_display_bo_framebuffer_fini,
> >> +	.framebuffer_lookup = xe_display_bo_framebuffer_lookup,
> >>  };
> >> diff --git a/include/drm/intel/display_parent_interface.h
> >> b/include/drm/intel/display_parent_interface.h
> >> index 2b53d12b0e0a..97ec94a2e749 100644
> >> --- a/include/drm/intel/display_parent_interface.h
> >> +++ b/include/drm/intel/display_parent_interface.h
> >> @@ -12,6 +12,7 @@ struct drm_device;
> >>  struct drm_file;
> >>  struct drm_framebuffer;
> >>  struct drm_gem_object;
> >> +struct drm_mode_fb_cmd2;
> >>  struct drm_plane_state;
> >>  struct drm_scanout_buffer;
> >>  struct i915_vma;
> >> @@ -37,6 +38,11 @@ struct intel_display_bo_interface {
> >>  	int (*fb_mmap)(struct drm_gem_object *obj, struct vm_area_struct
> >> *vma);
> >>  	int (*read_from_page)(struct drm_gem_object *obj, u64 offset, void
> >> *dst, int size);
> >>  	void (*describe)(struct seq_file *m, struct drm_gem_object *obj);
> >> /* Optional */
> >> +	int (*framebuffer_init)(struct drm_gem_object *obj, struct
> >> drm_mode_fb_cmd2 *mode_cmd);
> >> +	void (*framebuffer_fini)(struct drm_gem_object *obj);
> >> +	struct drm_gem_object *(*framebuffer_lookup)(struct drm_device
> >> *drm,
> >> +						     struct drm_file *filp,
> >> +						     const struct
> >> drm_mode_fb_cmd2 *user_mode_cmd);
> >>  };
> >>
> >>  struct intel_display_dpt_interface {
> >> --
> >> 2.47.3
> >
> 
> --
> Jani Nikula, Intel

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

end of thread, other threads:[~2026-03-13  5:12 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-11 14:18 [PATCH 0/5] drm/{i915,xe}: move bo stuff to parent interface Jani Nikula
2026-03-11 14:18 ` [PATCH 1/5] drm/i915: move i915 specific bo implementation to i915 Jani Nikula
2026-03-12  3:39   ` Kandpal, Suraj
2026-03-12  3:52     ` Kandpal, Suraj
2026-03-11 14:18 ` [PATCH 2/5] drm/xe: rename intel_bo.c to xe_display_bo.c Jani Nikula
2026-03-12  3:40   ` Kandpal, Suraj
2026-03-11 14:18 ` [PATCH 3/5] drm/{i915, xe}/bo: move display bo calls to parent interface Jani Nikula
2026-03-12  3:47   ` Kandpal, Suraj
2026-03-12  4:27     ` Kandpal, Suraj
2026-03-11 14:18 ` [PATCH 4/5] drm/i915/fb: make intel_fb_bo.c less dependent on display Jani Nikula
2026-03-12  3:51   ` Kandpal, Suraj
2026-03-11 14:18 ` [PATCH 5/5] drm/{i915,xe}: move framebuffer bo to parent interface Jani Nikula
2026-03-12  4:25   ` Kandpal, Suraj
2026-03-12  9:00     ` [PATCH 5/5] drm/{i915, xe}: " Jani Nikula
2026-03-13  5:12       ` [PATCH 5/5] drm/{i915,xe}: " Kandpal, Suraj
2026-03-11 15:33 ` ✓ i915.CI.BAT: success for drm/{i915,xe}: move bo stuff " Patchwork
2026-03-12  6:37 ` ✓ i915.CI.Full: " Patchwork

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