]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/i915: add VMA to parent interface
authorJani Nikula <jani.nikula@intel.com>
Fri, 27 Feb 2026 17:17:12 +0000 (19:17 +0200)
committerJani Nikula <jani.nikula@intel.com>
Tue, 3 Mar 2026 14:05:58 +0000 (16:05 +0200)
It's unclear what the direction of the VMA abstraction in the parent
interface should be, but convert i915_vma_fence_id() to parent interface
for starters. This paves the way for making struct i915_vma opaque
towards display.

Reviewed-by: MichaƂ Grzelak <michal.grzelak@intel.com>
Link: https://patch.msgid.link/036f4b2d20cc1b0a7ab814beb5bb914c53b6eb53.1772212579.git.jani.nikula@intel.com
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
drivers/gpu/drm/i915/display/intel_fbc.c
drivers/gpu/drm/i915/display/intel_parent.c
drivers/gpu/drm/i915/display/intel_parent.h
drivers/gpu/drm/i915/i915_driver.c
drivers/gpu/drm/i915/i915_vma.c
drivers/gpu/drm/i915/i915_vma.h
drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h
include/drm/intel/display_parent_interface.h

index 91de3837928258407b084072abc63ef8c7fc1527..3e9b3e5324994451ace536956c2c9be57247a8f2 100644 (file)
@@ -45,7 +45,6 @@
 #include <drm/drm_fourcc.h>
 #include <drm/drm_print.h>
 
-#include "i915_vma.h"
 #include "i9xx_plane_regs.h"
 #include "intel_de.h"
 #include "intel_display_device.h"
@@ -1463,7 +1462,7 @@ static void intel_fbc_update_state(struct intel_atomic_state *state,
                    !intel_fbc_has_fences(display));
 
        if (plane_state->flags & PLANE_HAS_FENCE)
-               fbc_state->fence_id =  i915_vma_fence_id(plane_state->ggtt_vma);
+               fbc_state->fence_id = intel_parent_vma_fence_id(display, plane_state->ggtt_vma);
        else
                fbc_state->fence_id = -1;
 
@@ -1490,7 +1489,7 @@ static bool intel_fbc_is_fence_ok(const struct intel_plane_state *plane_state)
         */
        return DISPLAY_VER(display) >= 9 ||
                (plane_state->flags & PLANE_HAS_FENCE &&
-                i915_vma_fence_id(plane_state->ggtt_vma) != -1);
+                intel_parent_vma_fence_id(display, plane_state->ggtt_vma) != -1);
 }
 
 static bool intel_fbc_is_cfb_ok(const struct intel_plane_state *plane_state)
index 89f78ca1cd1562ddddc6f765d98897f9e9e66b8f..0c5962cb2f6dab38c2d49d0de89100f214c1bd33 100644 (file)
@@ -317,6 +317,15 @@ void intel_parent_stolen_node_free(struct intel_display *display, const struct i
        display->parent->stolen->node_free(node);
 }
 
+/* vma */
+int intel_parent_vma_fence_id(struct intel_display *display, const struct i915_vma *vma)
+{
+       if (!display->parent->vma)
+               return -1;
+
+       return display->parent->vma->fence_id(vma);
+}
+
 /* generic */
 void intel_parent_fence_priority_display(struct intel_display *display, struct dma_fence *fence)
 {
index 2317482ef0729f4d2bf711d0ff589e2a8a47a9aa..6e7d09133aee2826fb60d7193759d5f76244be72 100644 (file)
@@ -102,6 +102,9 @@ u64 intel_parent_stolen_node_size(struct intel_display *display, const struct in
 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);
 
+/* vma */
+int intel_parent_vma_fence_id(struct intel_display *display, const struct i915_vma *vma);
+
 /* generic */
 bool intel_parent_has_auxccs(struct intel_display *display);
 bool intel_parent_has_fenced_regions(struct intel_display *display);
index 5f77e891604db06f04c0e4aeedb87582b8c7f1c3..18f912043f90d418b5de40358090956a187ff091 100644 (file)
@@ -775,6 +775,7 @@ static const struct intel_display_parent_interface parent = {
        .rpm = &i915_display_rpm_interface,
        .rps = &i915_display_rps_interface,
        .stolen = &i915_display_stolen_interface,
+       .vma = &i915_display_vma_interface,
 
        .fence_priority_display = fence_priority_display,
        .has_auxccs = has_auxccs,
index afc192d9931b887c7fb1964151062436b10320bd..6a3a4d4244dc359b4d34b2a9edb2e175b4feff02 100644 (file)
@@ -27,6 +27,7 @@
 
 #include <drm/drm_gem.h>
 #include <drm/drm_print.h>
+#include <drm/intel/display_parent_interface.h>
 
 #include "display/intel_fb.h"
 #include "display/intel_frontbuffer.h"
@@ -2332,3 +2333,12 @@ int __init i915_vma_module_init(void)
 
        return 0;
 }
+
+static int i915_vma_fence_id(const struct i915_vma *vma)
+{
+       return vma->fence ? vma->fence->id : -1;
+}
+
+const struct intel_display_vma_interface i915_display_vma_interface = {
+       .fence_id = i915_vma_fence_id,
+};
index 8054047840aa278423803cef89561611b103387d..fa2d9b429db68b3446b76230427537e795a406a1 100644 (file)
@@ -404,11 +404,6 @@ i915_vma_unpin_fence(struct i915_vma *vma)
                __i915_vma_unpin_fence(vma);
 }
 
-static inline int i915_vma_fence_id(const struct i915_vma *vma)
-{
-       return vma->fence ? vma->fence->id : -1;
-}
-
 void i915_vma_parked(struct intel_gt *gt);
 
 static inline bool i915_vma_is_scanout(const struct i915_vma *vma)
@@ -481,4 +476,6 @@ int i915_vma_module_init(void);
 I915_SELFTEST_DECLARE(int i915_vma_get_pages(struct i915_vma *vma));
 I915_SELFTEST_DECLARE(void i915_vma_put_pages(struct i915_vma *vma));
 
+extern const struct intel_display_vma_interface i915_display_vma_interface;
+
 #endif
index c4b5adaaa99a3843fc42720f0d7d0b2e14eea21d..da1d97b48fee0b86d1bf712718a84ceae2eaa28a 100644 (file)
@@ -26,8 +26,6 @@ struct i915_vma {
        struct xe_ggtt_node *node;
 };
 
-#define i915_vma_fence_id(vma) -1
-
 static inline u32 i915_ggtt_offset(const struct i915_vma *vma)
 {
        return xe_ggtt_node_addr(vma->node);
index b4b0f58ae3eec8241510fd2725a98f554ccf1a2f..d02ab7cc1c92de74f550a1a12507e00520b73613 100644 (file)
@@ -149,6 +149,10 @@ struct intel_display_stolen_interface {
        void (*node_free)(const struct intel_stolen_node *node);
 };
 
+struct intel_display_vma_interface {
+       int (*fence_id)(const struct i915_vma *vma);
+};
+
 /**
  * struct intel_display_parent_interface - services parent driver provides to display
  *
@@ -198,6 +202,9 @@ struct intel_display_parent_interface {
        /** @stolen: Stolen memory. */
        const struct intel_display_stolen_interface *stolen;
 
+       /** @vma: VMA interface. Optional. */
+       const struct intel_display_vma_interface *vma;
+
        /* Generic independent functions */
        struct {
                /** @fence_priority_display: Set display priority. Optional. */