summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/i915/Makefile1
-rw-r--r--drivers/gpu/drm/i915/display/intel_bo.c66
-rw-r--r--drivers/gpu/drm/i915/i915_bo.c32
-rw-r--r--drivers/gpu/drm/i915/i915_bo.h9
-rw-r--r--drivers/gpu/drm/i915/i915_driver.c2
-rw-r--r--drivers/gpu/drm/xe/Makefile1
-rw-r--r--drivers/gpu/drm/xe/display/xe_display.c2
-rw-r--r--drivers/gpu/drm/xe/display/xe_display_bo.c45
-rw-r--r--drivers/gpu/drm/xe/display/xe_display_bo.h9
-rw-r--r--include/drm/intel/display_parent_interface.h16
10 files changed, 138 insertions, 45 deletions
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 ac8c1f2cb7f9..10b4ed30f843 100644
--- a/drivers/gpu/drm/xe/Makefile
+++ b/drivers/gpu/drm/xe/Makefile
@@ -233,6 +233,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;