On Fri, 2025-12-05 at 12:30 +0200, Jani Nikula wrote: > Call the stolen memory interface through the display parent > interface. > > This makes xe compat gem/i915_gem_stolen.h redundant, and it can be > removed. > > v2: Rebase, convert one more call that appeared > > Signed-off-by: Jani Nikula <[email protected]> > --- > drivers/gpu/drm/i915/display/intel_fbc.c | 71 ++++++++++------- > -- > drivers/gpu/drm/i915/display/intel_parent.c | 66 +++++++++++++++++ > drivers/gpu/drm/i915/display/intel_parent.h | 19 +++++ > drivers/gpu/drm/i915/gem/i915_gem_stolen.c | 52 +++++++++----- > drivers/gpu/drm/i915/gem/i915_gem_stolen.h | 23 +----- > drivers/gpu/drm/i915/i915_driver.c | 1 + > .../compat-i915-headers/gem/i915_gem_stolen.h | 40 ----------- > drivers/gpu/drm/xe/display/xe_display.c | 4 +- > drivers/gpu/drm/xe/display/xe_stolen.c | 47 ++++++++---- > drivers/gpu/drm/xe/display/xe_stolen.h | 9 +++ > include/drm/intel/display_parent_interface.h | 20 ++++++ > 11 files changed, 222 insertions(+), 130 deletions(-) > delete mode 100644 drivers/gpu/drm/xe/compat-i915- > headers/gem/i915_gem_stolen.h > create mode 100644 drivers/gpu/drm/xe/display/xe_stolen.h > > diff --git a/drivers/gpu/drm/i915/display/intel_fbc.c > b/drivers/gpu/drm/i915/display/intel_fbc.c > index 0e946bed484f..fef2f35ff1e9 100644 > --- a/drivers/gpu/drm/i915/display/intel_fbc.c > +++ b/drivers/gpu/drm/i915/display/intel_fbc.c > @@ -45,8 +45,6 @@ > #include <drm/drm_fourcc.h> > #include <drm/drm_print.h> > > -#include "gem/i915_gem_stolen.h" > - > #include "i915_vma.h" > #include "i9xx_plane_regs.h" > #include "intel_de.h" > @@ -393,17 +391,17 @@ static void i8xx_fbc_program_cfb(struct > intel_fbc *fbc) > struct intel_display *display = fbc->display; > > drm_WARN_ON(display->drm, > - range_end_overflows_t(u64, > i915_gem_stolen_area_address(display->drm), > - > i915_gem_stolen_node_offset(fbc->compressed_fb), > + range_end_overflows_t(u64, > intel_parent_stolen_area_address(display), > + > intel_parent_stolen_node_offset(display, fbc->compressed_fb), > U32_MAX)); > drm_WARN_ON(display->drm, > - range_end_overflows_t(u64, > i915_gem_stolen_area_address(display->drm), > - > i915_gem_stolen_node_offset(fbc->compressed_llb), > + range_end_overflows_t(u64, > intel_parent_stolen_area_address(display), > + > intel_parent_stolen_node_offset(display, fbc->compressed_llb), > U32_MAX));
Not related to this series, there are few other places in intel_fbc.c where we use intel_parent_stolen_node_offset() directly as a parameter to intel_de_write() which take u32. Wonder if we need to add the similar warn on those places as well. Reviewed-by: Vinod Govindapillai <[email protected]> > intel_de_write(display, FBC_CFB_BASE, > - i915_gem_stolen_node_address(fbc- > >compressed_fb)); > + intel_parent_stolen_node_address(display, > fbc->compressed_fb)); > intel_de_write(display, FBC_LL_BASE, > - i915_gem_stolen_node_address(fbc- > >compressed_llb)); > + intel_parent_stolen_node_address(display, > fbc->compressed_llb)); > } > > static const struct intel_fbc_funcs i8xx_fbc_funcs = { > @@ -511,7 +509,7 @@ static void g4x_fbc_program_cfb(struct intel_fbc > *fbc) > struct intel_display *display = fbc->display; > > intel_de_write(display, DPFC_CB_BASE, > - i915_gem_stolen_node_offset(fbc- > >compressed_fb)); > + intel_parent_stolen_node_offset(display, fbc- > >compressed_fb)); > } > > static const struct intel_fbc_funcs g4x_fbc_funcs = { > @@ -580,7 +578,7 @@ static void ilk_fbc_program_cfb(struct intel_fbc > *fbc) > struct intel_display *display = fbc->display; > > intel_de_write(display, ILK_DPFC_CB_BASE(fbc->id), > - i915_gem_stolen_node_offset(fbc- > >compressed_fb)); > + intel_parent_stolen_node_offset(display, fbc- > >compressed_fb)); > } > > static const struct intel_fbc_funcs ilk_fbc_funcs = { > @@ -819,7 +817,7 @@ static u64 intel_fbc_stolen_end(struct > intel_display *display) > * underruns, even if that range is not reserved by the > BIOS. */ > if (display->platform.broadwell || > (DISPLAY_VER(display) == 9 && !display- > >platform.broxton)) > - end = i915_gem_stolen_area_size(display->drm) - 8 * > 1024 * 1024; > + end = intel_parent_stolen_area_size(display) - 8 * > 1024 * 1024; > else > end = U64_MAX; > > @@ -854,14 +852,14 @@ static int find_compression_limit(struct > intel_fbc *fbc, > size /= limit; > > /* Try to over-allocate to reduce reallocations and > fragmentation. */ > - ret = i915_gem_stolen_insert_node_in_range(fbc- > >compressed_fb, > - size <<= 1, 4096, > 0, end); > + ret = intel_parent_stolen_insert_node_in_range(display, fbc- > >compressed_fb, > + size <<= 1, > 4096, 0, end); > if (ret == 0) > return limit; > > for (; limit <= intel_fbc_max_limit(display); limit <<= 1) { > - ret = i915_gem_stolen_insert_node_in_range(fbc- > >compressed_fb, > - size >>= > 1, 4096, 0, end); > + ret = > intel_parent_stolen_insert_node_in_range(display, fbc->compressed_fb, > + size > >>= 1, 4096, 0, end); > if (ret == 0) > return limit; > } > @@ -876,12 +874,12 @@ static int intel_fbc_alloc_cfb(struct intel_fbc > *fbc, > int ret; > > drm_WARN_ON(display->drm, > - i915_gem_stolen_node_allocated(fbc- > >compressed_fb)); > + intel_parent_stolen_node_allocated(display, fbc- > >compressed_fb)); > drm_WARN_ON(display->drm, > - i915_gem_stolen_node_allocated(fbc- > >compressed_llb)); > + intel_parent_stolen_node_allocated(display, fbc- > >compressed_llb)); > > if (DISPLAY_VER(display) < 5 && !display->platform.g4x) { > - ret = i915_gem_stolen_insert_node(fbc- > >compressed_llb, 4096, 4096); > + ret = intel_parent_stolen_insert_node(display, fbc- > >compressed_llb, 4096, 4096); > if (ret) > goto err; > } > @@ -897,14 +895,14 @@ static int intel_fbc_alloc_cfb(struct intel_fbc > *fbc, > > drm_dbg_kms(display->drm, > "reserved %llu bytes of contiguous stolen space > for FBC, limit: %d\n", > - i915_gem_stolen_node_size(fbc->compressed_fb), > fbc->limit); > + intel_parent_stolen_node_size(display, fbc- > >compressed_fb), fbc->limit); > return 0; > > err_llb: > - if (i915_gem_stolen_node_allocated(fbc->compressed_llb)) > - i915_gem_stolen_remove_node(fbc->compressed_llb); > + if (intel_parent_stolen_node_allocated(display, fbc- > >compressed_llb)) > + intel_parent_stolen_remove_node(display, fbc- > >compressed_llb); > err: > - if (i915_gem_stolen_initialized(display->drm)) > + if (intel_parent_stolen_initialized(display)) > drm_info_once(display->drm, > "not enough stolen space for > compressed buffer (need %d more bytes), disabling. Hint: you may be > able to increase stolen memory size in the BIOS to avoid this.\n", > size); > return -ENOSPC; > @@ -1010,7 +1008,7 @@ static void fbc_sys_cache_enable(const struct > intel_fbc *fbc) > > range = fbc_sys_cache_limit(display) / (64 * 1024); > > - offset = i915_gem_stolen_node_offset(fbc->compressed_fb) / > (4 * 1024); > + offset = intel_parent_stolen_node_offset(display, fbc- > >compressed_fb) / (4 * 1024); > > cfg = FBC_SYS_CACHE_TAG_USE_RES_SPACE | > FBC_SYS_CACHEABLE_RANGE(range) | > FBC_SYS_CACHE_START_BASE(offset); > @@ -1024,13 +1022,15 @@ static void fbc_sys_cache_enable(const struct > intel_fbc *fbc) > > static void __intel_fbc_cleanup_cfb(struct intel_fbc *fbc) > { > + struct intel_display *display = fbc->display; > + > if (WARN_ON(intel_fbc_hw_is_active(fbc))) > return; > > - if (i915_gem_stolen_node_allocated(fbc->compressed_llb)) > - i915_gem_stolen_remove_node(fbc->compressed_llb); > - if (i915_gem_stolen_node_allocated(fbc->compressed_fb)) > - i915_gem_stolen_remove_node(fbc->compressed_fb); > + if (intel_parent_stolen_node_allocated(display, fbc- > >compressed_llb)) > + intel_parent_stolen_remove_node(display, fbc- > >compressed_llb); > + if (intel_parent_stolen_node_allocated(display, fbc- > >compressed_fb)) > + intel_parent_stolen_remove_node(display, fbc- > >compressed_fb); > } > > void intel_fbc_cleanup(struct intel_display *display) > @@ -1043,8 +1043,8 @@ void intel_fbc_cleanup(struct intel_display > *display) > __intel_fbc_cleanup_cfb(fbc); > mutex_unlock(&fbc->lock); > > - i915_gem_stolen_node_free(fbc->compressed_fb); > - i915_gem_stolen_node_free(fbc->compressed_llb); > + intel_parent_stolen_node_free(display, fbc- > >compressed_fb); > + intel_parent_stolen_node_free(display, fbc- > >compressed_llb); > > kfree(fbc); > } > @@ -1480,12 +1480,13 @@ static bool intel_fbc_is_fence_ok(const > struct intel_plane_state *plane_state) > > static bool intel_fbc_is_cfb_ok(const struct intel_plane_state > *plane_state) > { > + struct intel_display *display = > to_intel_display(plane_state); > struct intel_plane *plane = to_intel_plane(plane_state- > >uapi.plane); > struct intel_fbc *fbc = plane->fbc; > > return intel_fbc_min_limit(plane_state) <= fbc->limit && > intel_fbc_cfb_size(plane_state) <= fbc->limit * > - i915_gem_stolen_node_size(fbc- > >compressed_fb); > + intel_parent_stolen_node_size(display, fbc- > >compressed_fb); > } > > static bool intel_fbc_is_ok(const struct intel_plane_state > *plane_state) > @@ -1577,7 +1578,7 @@ static int intel_fbc_check_plane(struct > intel_atomic_state *state, > if (!fbc) > return 0; > > - if (!i915_gem_stolen_initialized(display->drm)) { > + if (!intel_parent_stolen_initialized(display)) { > plane_state->no_fbc_reason = "stolen memory not > initialised"; > return 0; > } > @@ -2282,10 +2283,10 @@ static struct intel_fbc > *intel_fbc_create(struct intel_display *display, > if (!fbc) > return NULL; > > - fbc->compressed_fb = i915_gem_stolen_node_alloc(display- > >drm); > + fbc->compressed_fb = > intel_parent_stolen_node_alloc(display); > if (!fbc->compressed_fb) > goto err; > - fbc->compressed_llb = i915_gem_stolen_node_alloc(display- > >drm); > + fbc->compressed_llb = > intel_parent_stolen_node_alloc(display); > if (!fbc->compressed_llb) > goto err; > > @@ -2310,8 +2311,8 @@ static struct intel_fbc > *intel_fbc_create(struct intel_display *display, > return fbc; > > err: > - i915_gem_stolen_node_free(fbc->compressed_llb); > - i915_gem_stolen_node_free(fbc->compressed_fb); > + intel_parent_stolen_node_free(display, fbc->compressed_llb); > + intel_parent_stolen_node_free(display, fbc->compressed_fb); > kfree(fbc); > > return NULL; > diff --git a/drivers/gpu/drm/i915/display/intel_parent.c > b/drivers/gpu/drm/i915/display/intel_parent.c > index 2ea310cc3509..49cb64ca8c4c 100644 > --- a/drivers/gpu/drm/i915/display/intel_parent.c > +++ b/drivers/gpu/drm/i915/display/intel_parent.c > @@ -79,6 +79,72 @@ void intel_parent_rps_ilk_irq_handler(struct > intel_display *display) > display->parent->rps->ilk_irq_handler(display->drm); > } > > +int intel_parent_stolen_insert_node_in_range(struct intel_display > *display, > + struct > intel_stolen_node *node, u64 size, > + unsigned int align, u64 > start, u64 end) > +{ > + return display->parent->stolen->insert_node_in_range(node, > size, align, start, end); > +} > + > +int intel_parent_stolen_insert_node(struct intel_display *display, > struct intel_stolen_node *node, u64 size, > + unsigned int align) > +{ > + return display->parent->stolen->insert_node(node, size, > align); > +} > + > +void intel_parent_stolen_remove_node(struct intel_display *display, > + struct intel_stolen_node *node) > +{ > + display->parent->stolen->remove_node(node); > +} > + > +bool intel_parent_stolen_initialized(struct intel_display *display) > +{ > + return display->parent->stolen->initialized(display->drm); > +} > + > +bool intel_parent_stolen_node_allocated(struct intel_display > *display, > + const struct > intel_stolen_node *node) > +{ > + return display->parent->stolen->node_allocated(node); > +} > + > +u32 intel_parent_stolen_node_offset(struct intel_display *display, > struct intel_stolen_node *node) > +{ > + return display->parent->stolen->node_offset(node); > +} > + > +u64 intel_parent_stolen_area_address(struct intel_display *display) > +{ > + return display->parent->stolen->area_address(display->drm); > +} > + > +u64 intel_parent_stolen_area_size(struct intel_display *display) > +{ > + return display->parent->stolen->area_size(display->drm); > +} > + > +u64 intel_parent_stolen_node_address(struct intel_display *display, > struct intel_stolen_node *node) > +{ > + return display->parent->stolen->node_address(node); > +} > + > +u64 intel_parent_stolen_node_size(struct intel_display *display, > const struct intel_stolen_node *node) > +{ > + return display->parent->stolen->node_size(node); > +} > + > +struct intel_stolen_node *intel_parent_stolen_node_alloc(struct > intel_display *display) > +{ > + return display->parent->stolen->node_alloc(display->drm); > +} > + > +void intel_parent_stolen_node_free(struct intel_display *display, > const struct intel_stolen_node *node) > +{ > + display->parent->stolen->node_free(node); > +} > + > + > bool intel_parent_vgpu_active(struct intel_display *display) > { > return display->parent->vgpu_active && display->parent- > >vgpu_active(display->drm); > diff --git a/drivers/gpu/drm/i915/display/intel_parent.h > b/drivers/gpu/drm/i915/display/intel_parent.h > index 8f91a6f75c53..bc740dfad985 100644 > --- a/drivers/gpu/drm/i915/display/intel_parent.h > +++ b/drivers/gpu/drm/i915/display/intel_parent.h > @@ -9,6 +9,7 @@ > struct dma_fence; > struct intel_display; > struct intel_hdcp_gsc_context; > +struct intel_stolen_node; > > ssize_t intel_parent_hdcp_gsc_msg_send(struct intel_display > *display, > struct intel_hdcp_gsc_context > *gsc_context, > @@ -27,6 +28,24 @@ void intel_parent_rps_boost_if_not_started(struct > intel_display *display, struct > void intel_parent_rps_mark_interactive(struct intel_display > *display, bool interactive); > void intel_parent_rps_ilk_irq_handler(struct intel_display > *display); > > +int intel_parent_stolen_insert_node_in_range(struct intel_display > *display, > + struct > intel_stolen_node *node, u64 size, > + unsigned int align, u64 > start, u64 end); > +int intel_parent_stolen_insert_node(struct intel_display *display, > struct intel_stolen_node *node, u64 size, > + unsigned int align); > +void intel_parent_stolen_remove_node(struct intel_display *display, > + struct intel_stolen_node > *node); > +bool intel_parent_stolen_initialized(struct intel_display *display); > +bool intel_parent_stolen_node_allocated(struct intel_display > *display, > + const struct > intel_stolen_node *node); > +u32 intel_parent_stolen_node_offset(struct intel_display *display, > struct intel_stolen_node *node); > +u64 intel_parent_stolen_area_address(struct intel_display *display); > +u64 intel_parent_stolen_area_size(struct intel_display *display); > +u64 intel_parent_stolen_node_address(struct intel_display *display, > struct intel_stolen_node *node); > +u64 intel_parent_stolen_node_size(struct intel_display *display, > const struct intel_stolen_node *node); > +struct intel_stolen_node *intel_parent_stolen_node_alloc(struct > intel_display *display); > +void intel_parent_stolen_node_free(struct intel_display *display, > const struct intel_stolen_node *node); > + > bool intel_parent_vgpu_active(struct intel_display *display); > > bool intel_parent_has_fenced_regions(struct intel_display *display); > diff --git a/drivers/gpu/drm/i915/gem/i915_gem_stolen.c > b/drivers/gpu/drm/i915/gem/i915_gem_stolen.c > index f859c99f969b..c3e0b8da485c 100644 > --- a/drivers/gpu/drm/i915/gem/i915_gem_stolen.c > +++ b/drivers/gpu/drm/i915/gem/i915_gem_stolen.c > @@ -8,6 +8,7 @@ > > #include <drm/drm_mm.h> > #include <drm/drm_print.h> > +#include <drm/intel/display_parent_interface.h> > #include <drm/intel/i915_drm.h> > > #include "gem/i915_gem_lmem.h" > @@ -64,8 +65,8 @@ static int > __i915_gem_stolen_insert_node_in_range(struct drm_i915_private *i915, > return ret; > } > > -int i915_gem_stolen_insert_node_in_range(struct intel_stolen_node > *node, u64 size, > - unsigned int alignment, u64 > start, u64 end) > +static int i915_gem_stolen_insert_node_in_range(struct > intel_stolen_node *node, u64 size, > + unsigned int > alignment, u64 start, u64 end) > { > return __i915_gem_stolen_insert_node_in_range(node->i915, > &node->node, > size, > alignment, > @@ -82,8 +83,8 @@ static int __i915_gem_stolen_insert_node(struct > drm_i915_private *i915, > U64_MAX); > } > > -int i915_gem_stolen_insert_node(struct intel_stolen_node *node, u64 > size, > - unsigned int alignment) > +static int i915_gem_stolen_insert_node(struct intel_stolen_node > *node, u64 size, > + unsigned int alignment) > { > return __i915_gem_stolen_insert_node(node->i915, &node- > >node, size, alignment); > } > @@ -96,7 +97,7 @@ static void __i915_gem_stolen_remove_node(struct > drm_i915_private *i915, > mutex_unlock(&i915->mm.stolen_lock); > } > > -void i915_gem_stolen_remove_node(struct intel_stolen_node *node) > +static void i915_gem_stolen_remove_node(struct intel_stolen_node > *node) > { > __i915_gem_stolen_remove_node(node->i915, &node->node); > } > @@ -1025,50 +1026,50 @@ bool i915_gem_object_is_stolen(const struct > drm_i915_gem_object *obj) > return obj->ops == &i915_gem_object_stolen_ops; > } > > -bool i915_gem_stolen_initialized(struct drm_device *drm) > +static bool i915_gem_stolen_initialized(struct drm_device *drm) > { > struct drm_i915_private *i915 = to_i915(drm); > > return drm_mm_initialized(&i915->mm.stolen); > } > > -u64 i915_gem_stolen_area_address(struct drm_device *drm) > +static u64 i915_gem_stolen_area_address(struct drm_device *drm) > { > struct drm_i915_private *i915 = to_i915(drm); > > return i915->dsm.stolen.start; > } > > -u64 i915_gem_stolen_area_size(struct drm_device *drm) > +static u64 i915_gem_stolen_area_size(struct drm_device *drm) > { > struct drm_i915_private *i915 = to_i915(drm); > > return resource_size(&i915->dsm.stolen); > } > > -u64 i915_gem_stolen_node_address(const struct intel_stolen_node > *node) > +static u64 i915_gem_stolen_node_offset(const struct > intel_stolen_node *node) > +{ > + return node->node.start; > +} > + > +static u64 i915_gem_stolen_node_address(const struct > intel_stolen_node *node) > { > struct drm_i915_private *i915 = node->i915; > > return i915->dsm.stolen.start + > i915_gem_stolen_node_offset(node); > } > > -bool i915_gem_stolen_node_allocated(const struct intel_stolen_node > *node) > +static bool i915_gem_stolen_node_allocated(const struct > intel_stolen_node *node) > { > return drm_mm_node_allocated(&node->node); > } > > -u64 i915_gem_stolen_node_offset(const struct intel_stolen_node > *node) > -{ > - return node->node.start; > -} > - > -u64 i915_gem_stolen_node_size(const struct intel_stolen_node *node) > +static u64 i915_gem_stolen_node_size(const struct intel_stolen_node > *node) > { > return node->node.size; > } > > -struct intel_stolen_node *i915_gem_stolen_node_alloc(struct > drm_device *drm) > +static struct intel_stolen_node *i915_gem_stolen_node_alloc(struct > drm_device *drm) > { > struct drm_i915_private *i915 = to_i915(drm); > struct intel_stolen_node *node; > @@ -1082,7 +1083,22 @@ struct intel_stolen_node > *i915_gem_stolen_node_alloc(struct drm_device *drm) > return node; > } > > -void i915_gem_stolen_node_free(const struct intel_stolen_node *node) > +static void i915_gem_stolen_node_free(const struct intel_stolen_node > *node) > { > kfree(node); > } > + > +const struct intel_display_stolen_interface > i915_display_stolen_interface = { > + .insert_node_in_range = > i915_gem_stolen_insert_node_in_range, > + .insert_node = i915_gem_stolen_insert_node, > + .remove_node = i915_gem_stolen_remove_node, > + .initialized = i915_gem_stolen_initialized, > + .node_allocated = i915_gem_stolen_node_allocated, > + .node_offset = i915_gem_stolen_node_offset, > + .area_address = i915_gem_stolen_area_address, > + .area_size = i915_gem_stolen_area_size, > + .node_address = i915_gem_stolen_node_address, > + .node_size = i915_gem_stolen_node_size, > + .node_alloc = i915_gem_stolen_node_alloc, > + .node_free = i915_gem_stolen_node_free, > +}; > diff --git a/drivers/gpu/drm/i915/gem/i915_gem_stolen.h > b/drivers/gpu/drm/i915/gem/i915_gem_stolen.h > index 7b0386002ed4..6db5262046a2 100644 > --- a/drivers/gpu/drm/i915/gem/i915_gem_stolen.h > +++ b/drivers/gpu/drm/i915/gem/i915_gem_stolen.h > @@ -8,17 +8,9 @@ > > #include <linux/types.h> > > -struct drm_device; > struct drm_i915_gem_object; > struct drm_i915_private; > -struct intel_stolen_node; > - > -int i915_gem_stolen_insert_node(struct intel_stolen_node *node, u64 > size, > - unsigned alignment); > -int i915_gem_stolen_insert_node_in_range(struct intel_stolen_node > *node, u64 size, > - unsigned alignment, u64 > start, > - u64 end); > -void i915_gem_stolen_remove_node(struct intel_stolen_node *node); > + > struct intel_memory_region * > i915_gem_stolen_smem_setup(struct drm_i915_private *i915, u16 type, > u16 instance); > @@ -34,17 +26,6 @@ bool i915_gem_object_is_stolen(const struct > drm_i915_gem_object *obj); > > #define I915_GEM_STOLEN_BIAS SZ_128K > > -bool i915_gem_stolen_initialized(struct drm_device *drm); > -u64 i915_gem_stolen_area_address(struct drm_device *drm); > -u64 i915_gem_stolen_area_size(struct drm_device *drm); > - > -u64 i915_gem_stolen_node_address(const struct intel_stolen_node > *node); > - > -bool i915_gem_stolen_node_allocated(const struct intel_stolen_node > *node); > -u64 i915_gem_stolen_node_offset(const struct intel_stolen_node > *node); > -u64 i915_gem_stolen_node_size(const struct intel_stolen_node *node); > - > -struct intel_stolen_node *i915_gem_stolen_node_alloc(struct > drm_device *drm); > -void i915_gem_stolen_node_free(const struct intel_stolen_node > *node); > +extern const struct intel_display_stolen_interface > i915_display_stolen_interface; > > #endif /* __I915_GEM_STOLEN_H__ */ > diff --git a/drivers/gpu/drm/i915/i915_driver.c > b/drivers/gpu/drm/i915/i915_driver.c > index d98839427ef9..fe84df4eae8f 100644 > --- a/drivers/gpu/drm/i915/i915_driver.c > +++ b/drivers/gpu/drm/i915/i915_driver.c > @@ -762,6 +762,7 @@ static const struct > intel_display_parent_interface parent = { > .rpm = &i915_display_rpm_interface, > .irq = &i915_display_irq_interface, > .rps = &i915_display_rps_interface, > + .stolen = &i915_display_stolen_interface, > .vgpu_active = vgpu_active, > .has_fenced_regions = has_fenced_regions, > .fence_priority_display = fence_priority_display, > diff --git a/drivers/gpu/drm/xe/compat-i915- > headers/gem/i915_gem_stolen.h b/drivers/gpu/drm/xe/compat-i915- > headers/gem/i915_gem_stolen.h > deleted file mode 100644 > index 368045a470d1..000000000000 > --- a/drivers/gpu/drm/xe/compat-i915-headers/gem/i915_gem_stolen.h > +++ /dev/null > @@ -1,40 +0,0 @@ > -/* SPDX-License-Identifier: MIT */ > -/* > - * Copyright © 2024 Intel Corporation > - */ > - > -#ifndef _I915_GEM_STOLEN_H_ > -#define _I915_GEM_STOLEN_H_ > - > -#include <linux/types.h> > - > -struct drm_device; > -struct intel_stolen_node; > - > -int i915_gem_stolen_insert_node_in_range(struct intel_stolen_node > *node, u64 size, > - unsigned int align, u64 > start, u64 end); > - > -int i915_gem_stolen_insert_node(struct intel_stolen_node *node, u64 > size, > - unsigned int align); > - > -void i915_gem_stolen_remove_node(struct intel_stolen_node *node); > - > -bool i915_gem_stolen_initialized(struct drm_device *drm); > - > -bool i915_gem_stolen_node_allocated(const struct intel_stolen_node > *node); > - > -u64 i915_gem_stolen_node_offset(const struct intel_stolen_node > *node); > - > -u64 i915_gem_stolen_area_address(struct drm_device *drm); > - > -u64 i915_gem_stolen_area_size(struct drm_device *drm); > - > -u64 i915_gem_stolen_node_address(const struct intel_stolen_node > *node); > - > -u64 i915_gem_stolen_node_size(const struct intel_stolen_node *node); > - > -struct intel_stolen_node *i915_gem_stolen_node_alloc(struct > drm_device *drm); > - > -void i915_gem_stolen_node_free(const struct intel_stolen_node > *node); > - > -#endif > diff --git a/drivers/gpu/drm/xe/display/xe_display.c > b/drivers/gpu/drm/xe/display/xe_display.c > index 9d2aa69ea428..9fb5c2f3ddd8 100644 > --- a/drivers/gpu/drm/xe/display/xe_display.c > +++ b/drivers/gpu/drm/xe/display/xe_display.c > @@ -36,8 +36,9 @@ > #include "intel_opregion.h" > #include "skl_watermark.h" > #include "xe_display_rpm.h" > -#include "xe_module.h" > #include "xe_hdcp_gsc.h" > +#include "xe_module.h" > +#include "xe_stolen.h" > > /* Ensure drm and display members are placed properly. */ > INTEL_DISPLAY_MEMBER_STATIC_ASSERT(struct xe_device, drm, display); > @@ -538,6 +539,7 @@ static const struct > intel_display_parent_interface parent = { > .hdcp = &xe_display_hdcp_interface, > .rpm = &xe_display_rpm_interface, > .irq = &xe_display_irq_interface, > + .stolen = &xe_display_stolen_interface, > }; > > /** > diff --git a/drivers/gpu/drm/xe/display/xe_stolen.c > b/drivers/gpu/drm/xe/display/xe_stolen.c > index 387506586288..cc7aec7db76c 100644 > --- a/drivers/gpu/drm/xe/display/xe_stolen.c > +++ b/drivers/gpu/drm/xe/display/xe_stolen.c > @@ -1,8 +1,10 @@ > // SPDX-License-Identifier: MIT > /* Copyright © 2025 Intel Corporation */ > > -#include "gem/i915_gem_stolen.h" > +#include <drm/intel/display_parent_interface.h> > + > #include "xe_res_cursor.h" > +#include "xe_stolen.h" > #include "xe_ttm_stolen_mgr.h" > #include "xe_validation.h" > > @@ -11,8 +13,8 @@ struct intel_stolen_node { > struct xe_bo *bo; > }; > > -int i915_gem_stolen_insert_node_in_range(struct intel_stolen_node > *node, u64 size, > - unsigned int align, u64 > start, u64 end) > +static int xe_stolen_insert_node_in_range(struct intel_stolen_node > *node, u64 size, > + unsigned int align, u64 > start, u64 end) > { > struct xe_device *xe = node->xe; > > @@ -41,7 +43,7 @@ int i915_gem_stolen_insert_node_in_range(struct > intel_stolen_node *node, u64 siz > return err; > } > > -int i915_gem_stolen_insert_node(struct intel_stolen_node *node, u64 > size, unsigned int align) > +static int xe_stolen_insert_node(struct intel_stolen_node *node, u64 > size, unsigned int align) > { > /* Not used on xe */ > WARN_ON(1); > @@ -49,25 +51,25 @@ int i915_gem_stolen_insert_node(struct > intel_stolen_node *node, u64 size, unsign > return -ENODEV; > } > > -void i915_gem_stolen_remove_node(struct intel_stolen_node *node) > +static void xe_stolen_remove_node(struct intel_stolen_node *node) > { > xe_bo_unpin_map_no_vm(node->bo); > node->bo = NULL; > } > > -bool i915_gem_stolen_initialized(struct drm_device *drm) > +static bool xe_stolen_initialized(struct drm_device *drm) > { > struct xe_device *xe = to_xe_device(drm); > > return ttm_manager_type(&xe->ttm, XE_PL_STOLEN); > } > > -bool i915_gem_stolen_node_allocated(const struct intel_stolen_node > *node) > +static bool xe_stolen_node_allocated(const struct intel_stolen_node > *node) > { > return node->bo; > } > > -u64 i915_gem_stolen_node_offset(const struct intel_stolen_node > *node) > +static u64 xe_stolen_node_offset(const struct intel_stolen_node > *node) > { > struct xe_res_cursor res; > > @@ -76,7 +78,7 @@ u64 i915_gem_stolen_node_offset(const struct > intel_stolen_node *node) > } > > /* Used for < gen4. These are not supported by Xe */ > -u64 i915_gem_stolen_area_address(struct drm_device *drm) > +static u64 xe_stolen_area_address(struct drm_device *drm) > { > WARN_ON(1); > > @@ -84,26 +86,26 @@ u64 i915_gem_stolen_area_address(struct > drm_device *drm) > } > > /* Used for gen9 specific WA. Gen9 is not supported by Xe */ > -u64 i915_gem_stolen_area_size(struct drm_device *drm) > +static u64 xe_stolen_area_size(struct drm_device *drm) > { > WARN_ON(1); > > return 0; > } > > -u64 i915_gem_stolen_node_address(const struct intel_stolen_node > *node) > +static u64 xe_stolen_node_address(const struct intel_stolen_node > *node) > { > struct xe_device *xe = node->xe; > > - return xe_ttm_stolen_gpu_offset(xe) + > i915_gem_stolen_node_offset(node); > + return xe_ttm_stolen_gpu_offset(xe) + > xe_stolen_node_offset(node); > } > > -u64 i915_gem_stolen_node_size(const struct intel_stolen_node *node) > +static u64 xe_stolen_node_size(const struct intel_stolen_node *node) > { > return node->bo->ttm.base.size; > } > > -struct intel_stolen_node *i915_gem_stolen_node_alloc(struct > drm_device *drm) > +static struct intel_stolen_node *xe_stolen_node_alloc(struct > drm_device *drm) > { > struct xe_device *xe = to_xe_device(drm); > struct intel_stolen_node *node; > @@ -117,7 +119,22 @@ struct intel_stolen_node > *i915_gem_stolen_node_alloc(struct drm_device *drm) > return node; > } > > -void i915_gem_stolen_node_free(const struct intel_stolen_node *node) > +static void xe_stolen_node_free(const struct intel_stolen_node > *node) > { > kfree(node); > } > + > +const struct intel_display_stolen_interface > xe_display_stolen_interface = { > + .insert_node_in_range = xe_stolen_insert_node_in_range, > + .insert_node = xe_stolen_insert_node, > + .remove_node = xe_stolen_remove_node, > + .initialized = xe_stolen_initialized, > + .node_allocated = xe_stolen_node_allocated, > + .node_offset = xe_stolen_node_offset, > + .area_address = xe_stolen_area_address, > + .area_size = xe_stolen_area_size, > + .node_address = xe_stolen_node_address, > + .node_size = xe_stolen_node_size, > + .node_alloc = xe_stolen_node_alloc, > + .node_free = xe_stolen_node_free, > +}; > diff --git a/drivers/gpu/drm/xe/display/xe_stolen.h > b/drivers/gpu/drm/xe/display/xe_stolen.h > new file mode 100644 > index 000000000000..db86b9e01242 > --- /dev/null > +++ b/drivers/gpu/drm/xe/display/xe_stolen.h > @@ -0,0 +1,9 @@ > +/* SPDX-License-Identifier: MIT */ > +/* Copyright © 2025 Intel Corporation */ > + > +#ifndef __XE_STOLEN_H__ > +#define __XE_STOLEN_H__ > + > +extern const struct intel_display_stolen_interface > xe_display_stolen_interface; > + > +#endif > diff --git a/include/drm/intel/display_parent_interface.h > b/include/drm/intel/display_parent_interface.h > index 61d1b22adc83..f590e846464d 100644 > --- a/include/drm/intel/display_parent_interface.h > +++ b/include/drm/intel/display_parent_interface.h > @@ -9,6 +9,7 @@ > struct dma_fence; > struct drm_device; > struct intel_hdcp_gsc_context; > +struct intel_stolen_node; > struct ref_tracker; > > struct intel_display_rpm_interface { > @@ -47,6 +48,22 @@ struct intel_display_rps_interface { > void (*ilk_irq_handler)(struct drm_device *drm); > }; > > +struct intel_display_stolen_interface { > + int (*insert_node_in_range)(struct intel_stolen_node *node, > u64 size, > + unsigned int align, u64 start, > u64 end); > + int (*insert_node)(struct intel_stolen_node *node, u64 size, > unsigned int align); > + void (*remove_node)(struct intel_stolen_node *node); > + bool (*initialized)(struct drm_device *drm); > + bool (*node_allocated)(const struct intel_stolen_node > *node); > + u64 (*node_offset)(const struct intel_stolen_node *node); > + u64 (*area_address)(struct drm_device *drm); > + u64 (*area_size)(struct drm_device *drm); > + u64 (*node_address)(const struct intel_stolen_node *node); > + u64 (*node_size)(const struct intel_stolen_node *node); > + struct intel_stolen_node *(*node_alloc)(struct drm_device > *drm); > + void (*node_free)(const struct intel_stolen_node *node); > +}; > + > /** > * struct intel_display_parent_interface - services parent driver > provides to display > * > @@ -72,6 +89,9 @@ struct intel_display_parent_interface { > /** @rpm: RPS interface. Optional. */ > const struct intel_display_rps_interface *rps; > > + /** @stolen: Stolen memory. */ > + const struct intel_display_stolen_interface *stolen; > + > /** @vgpu_active: Is vGPU active? Optional. */ > bool (*vgpu_active)(struct drm_device *drm); >
