mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2026-05-26 11:40:24 +02:00
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. Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com> Link: https://patch.msgid.link/7899eef2ccf0cd603df69099df065226a0df917b.1773238670.git.jani.nikula@intel.com Signed-off-by: Jani Nikula <jani.nikula@intel.com>
This commit is contained in:
@@ -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 \
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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,
|
||||
};
|
||||
|
||||
@@ -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__ */
|
||||
@@ -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,
|
||||
|
||||
@@ -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 \
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
|
||||
@@ -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
|
||||
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user