* [PATCH 00/19] drm/i915/overlay: Convert to parent interface
@ 2026-02-18 15:27 Ville Syrjala
2026-02-18 15:27 ` [PATCH 01/19] drm/i915/overlay: Remove GPU hang snapshot stuff Ville Syrjala
` (24 more replies)
0 siblings, 25 replies; 31+ messages in thread
From: Ville Syrjala @ 2026-02-18 15:27 UTC (permalink / raw)
To: intel-gfx; +Cc: intel-xe
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
Split the overlay code into i915 vs. display parts and introduce
and new parent interface for the display->i915 calls.
The interface is rather verbose due to the interruptible ioctl
design of the overlay code. Ideally we'd implement the overlay
as a drm plane and tell it to flip via MMIO writes to OVADD,
at which point the parent interface could be limited to just
two functions to repartition the render cache as needed.
Maybe one day...
Smoke tested on i830 and i965gm.
Ville Syrjälä (19):
drm/i915/overlay: Remove GPU hang snapshot stuff
drm/i915/overlay: Track current frontbuffer_bits
drm/i915/overlay: Extract i915_overlay_is_active()
drm/i915/overlay: Remove redundant overlay->active
drm/i915/overlay: Relocate the underrun check
drm/i915/overlay: Introduce i915_overlay_obj_lookup()
drm/i915/overlay: Use struct drm_gem_object as the type
drm/i915/overlay: Extract i915_overlay_reset()
drm/i915/overlay: Extract i915_overlay_setup()
drm/i915/overlay: Extract i915_overlay_cleanup()
drm/i915/overlay: Abstract buffer (un)pinning
drm/i915/overlay: Rename low level i915 specific functions
drm/i915/overlay: Adjust i915 specific interfaces
drm/i915/overlay: Make i830_overlay_clock_gating() i915 specific
drm/i915/overlay: s/dev_priv/i915/
drm/i915/overlay: Split 'struct intel_overlay'
drm/i915/overlay: Don't use fetch_and_zero() in display code
drm/i915/overlay: Move i915 specific code into i915_overlay.c
drm/i915/overlay: Convert overlay to parent interface
drivers/gpu/drm/i915/Makefile | 1 +
.../gpu/drm/i915/display/intel_display_regs.h | 2 -
.../drm/i915/display/intel_display_snapshot.c | 4 -
drivers/gpu/drm/i915/display/intel_overlay.c | 584 ++----------------
drivers/gpu/drm/i915/display/intel_overlay.h | 48 --
drivers/gpu/drm/i915/display/intel_parent.c | 76 +++
drivers/gpu/drm/i915/display/intel_parent.h | 26 +
drivers/gpu/drm/i915/i915_driver.c | 2 +
drivers/gpu/drm/i915/i915_drv.h | 3 +
drivers/gpu/drm/i915/i915_overlay.c | 517 ++++++++++++++++
drivers/gpu/drm/i915/i915_overlay.h | 11 +
drivers/gpu/drm/i915/i915_reg.h | 4 +
drivers/gpu/drm/xe/Makefile | 1 +
include/drm/intel/display_parent_interface.h | 33 +
14 files changed, 726 insertions(+), 586 deletions(-)
create mode 100644 drivers/gpu/drm/i915/i915_overlay.c
create mode 100644 drivers/gpu/drm/i915/i915_overlay.h
--
2.52.0
^ permalink raw reply [flat|nested] 31+ messages in thread
* [PATCH 01/19] drm/i915/overlay: Remove GPU hang snapshot stuff
2026-02-18 15:27 [PATCH 00/19] drm/i915/overlay: Convert to parent interface Ville Syrjala
@ 2026-02-18 15:27 ` Ville Syrjala
2026-02-18 15:27 ` [PATCH 02/19] drm/i915/overlay: Track current frontbuffer_bits Ville Syrjala
` (23 subsequent siblings)
24 siblings, 0 replies; 31+ messages in thread
From: Ville Syrjala @ 2026-02-18 15:27 UTC (permalink / raw)
To: intel-gfx; +Cc: intel-xe
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
The overlay snapshot stuff is a bit annoying because some of
it more or less of belongs on the gt side, and some on the
display side. Remove the whole thing to avoid having to deal
with it when splitting the overlay code around the i915
vs. display boundary. I don't think I've ever actually used
this for anything, so no real loss from my POV. And it can
always be resurrected later should the need arise.
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
.../drm/i915/display/intel_display_snapshot.c | 4 -
drivers/gpu/drm/i915/display/intel_overlay.c | 89 -------------------
drivers/gpu/drm/i915/display/intel_overlay.h | 18 ----
3 files changed, 111 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_display_snapshot.c b/drivers/gpu/drm/i915/display/intel_display_snapshot.c
index 66087302fdbc..74072562af8f 100644
--- a/drivers/gpu/drm/i915/display/intel_display_snapshot.c
+++ b/drivers/gpu/drm/i915/display/intel_display_snapshot.c
@@ -19,7 +19,6 @@ struct intel_display_snapshot {
struct intel_display_device_info info;
struct intel_display_runtime_info runtime_info;
struct intel_display_params params;
- struct intel_overlay_snapshot *overlay;
struct intel_dmc_snapshot *dmc;
struct intel_display_irq_snapshot *irq;
};
@@ -41,7 +40,6 @@ struct intel_display_snapshot *intel_display_snapshot_capture(struct intel_displ
intel_display_params_copy(&snapshot->params);
snapshot->irq = intel_display_irq_snapshot_capture(display);
- snapshot->overlay = intel_overlay_snapshot_capture(display);
snapshot->dmc = intel_dmc_snapshot_capture(display);
return snapshot;
@@ -61,7 +59,6 @@ void intel_display_snapshot_print(const struct intel_display_snapshot *snapshot,
intel_display_params_dump(&snapshot->params, display->drm->driver->name, p);
intel_display_irq_snapshot_print(snapshot->irq, p);
- intel_overlay_snapshot_print(snapshot->overlay, p);
intel_dmc_snapshot_print(snapshot->dmc, p);
}
@@ -73,7 +70,6 @@ void intel_display_snapshot_free(struct intel_display_snapshot *snapshot)
intel_display_params_free(&snapshot->params);
kfree(snapshot->irq);
- kfree(snapshot->overlay);
kfree(snapshot->dmc);
kfree(snapshot);
}
diff --git a/drivers/gpu/drm/i915/display/intel_overlay.c b/drivers/gpu/drm/i915/display/intel_overlay.c
index e7838f4d2dac..33a38d116c90 100644
--- a/drivers/gpu/drm/i915/display/intel_overlay.c
+++ b/drivers/gpu/drm/i915/display/intel_overlay.c
@@ -1464,92 +1464,3 @@ void intel_overlay_cleanup(struct intel_display *display)
kfree(overlay);
}
-
-#if IS_ENABLED(CONFIG_DRM_I915_CAPTURE_ERROR)
-
-struct intel_overlay_snapshot {
- struct overlay_registers regs;
- unsigned long base;
- u32 dovsta;
- u32 isr;
-};
-
-struct intel_overlay_snapshot *
-intel_overlay_snapshot_capture(struct intel_display *display)
-{
- struct intel_overlay *overlay = display->overlay;
- struct intel_overlay_snapshot *error;
-
- if (!overlay || !overlay->active)
- return NULL;
-
- error = kmalloc(sizeof(*error), GFP_ATOMIC);
- if (error == NULL)
- return NULL;
-
- error->dovsta = intel_de_read(display, DOVSTA);
- error->isr = intel_de_read(display, GEN2_ISR);
- error->base = overlay->flip_addr;
-
- memcpy_fromio(&error->regs, overlay->regs, sizeof(error->regs));
-
- return error;
-}
-
-void
-intel_overlay_snapshot_print(const struct intel_overlay_snapshot *error,
- struct drm_printer *p)
-{
- if (!error)
- return;
-
- drm_printf(p, "Overlay, status: 0x%08x, interrupt: 0x%08x\n",
- error->dovsta, error->isr);
- drm_printf(p, " Register file at 0x%08lx:\n", error->base);
-
-#define P(x) drm_printf(p, " " #x ": 0x%08x\n", error->regs.x)
- P(OBUF_0Y);
- P(OBUF_1Y);
- P(OBUF_0U);
- P(OBUF_0V);
- P(OBUF_1U);
- P(OBUF_1V);
- P(OSTRIDE);
- P(YRGB_VPH);
- P(UV_VPH);
- P(HORZ_PH);
- P(INIT_PHS);
- P(DWINPOS);
- P(DWINSZ);
- P(SWIDTH);
- P(SWIDTHSW);
- P(SHEIGHT);
- P(YRGBSCALE);
- P(UVSCALE);
- P(OCLRC0);
- P(OCLRC1);
- P(DCLRKV);
- P(DCLRKM);
- P(SCLRKVH);
- P(SCLRKVL);
- P(SCLRKEN);
- P(OCONFIG);
- P(OCMD);
- P(OSTART_0Y);
- P(OSTART_1Y);
- P(OSTART_0U);
- P(OSTART_0V);
- P(OSTART_1U);
- P(OSTART_1V);
- P(OTILEOFF_0Y);
- P(OTILEOFF_1Y);
- P(OTILEOFF_0U);
- P(OTILEOFF_0V);
- P(OTILEOFF_1U);
- P(OTILEOFF_1V);
- P(FASTHSCALE);
- P(UVSCALEV);
-#undef P
-}
-
-#endif
diff --git a/drivers/gpu/drm/i915/display/intel_overlay.h b/drivers/gpu/drm/i915/display/intel_overlay.h
index d259e4c74b03..4ef6882b9acb 100644
--- a/drivers/gpu/drm/i915/display/intel_overlay.h
+++ b/drivers/gpu/drm/i915/display/intel_overlay.h
@@ -13,7 +13,6 @@ struct drm_file;
struct drm_printer;
struct intel_display;
struct intel_overlay;
-struct intel_overlay_snapshot;
#ifdef I915
void intel_overlay_setup(struct intel_display *display);
@@ -55,21 +54,4 @@ static inline void intel_overlay_reset(struct intel_display *display)
}
#endif
-#if IS_ENABLED(CONFIG_DRM_I915_CAPTURE_ERROR) && defined(I915)
-struct intel_overlay_snapshot *
-intel_overlay_snapshot_capture(struct intel_display *display);
-void intel_overlay_snapshot_print(const struct intel_overlay_snapshot *error,
- struct drm_printer *p);
-#else
-static inline struct intel_overlay_snapshot *
-intel_overlay_snapshot_capture(struct intel_display *display)
-{
- return NULL;
-}
-static inline void intel_overlay_snapshot_print(const struct intel_overlay_snapshot *error,
- struct drm_printer *p)
-{
-}
-#endif
-
#endif /* __INTEL_OVERLAY_H__ */
--
2.52.0
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PATCH 02/19] drm/i915/overlay: Track current frontbuffer_bits
2026-02-18 15:27 [PATCH 00/19] drm/i915/overlay: Convert to parent interface Ville Syrjala
2026-02-18 15:27 ` [PATCH 01/19] drm/i915/overlay: Remove GPU hang snapshot stuff Ville Syrjala
@ 2026-02-18 15:27 ` Ville Syrjala
2026-02-25 10:38 ` Jani Nikula
2026-02-18 15:27 ` [PATCH 03/19] drm/i915/overlay: Extract i915_overlay_is_active() Ville Syrjala
` (22 subsequent siblings)
24 siblings, 1 reply; 31+ messages in thread
From: Ville Syrjala @ 2026-02-18 15:27 UTC (permalink / raw)
To: intel-gfx; +Cc: intel-xe
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
Store the current frontbuffer_bits in the overlay data. The
main benefit here is that we get rid of the 'crtc->pipe'
usage from intel_overlay_flip_prepare() which will have to
move to the i915 side of the parent vs. display driver split.
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
drivers/gpu/drm/i915/display/intel_overlay.c | 19 ++++++++++++-------
1 file changed, 12 insertions(+), 7 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_overlay.c b/drivers/gpu/drm/i915/display/intel_overlay.c
index 33a38d116c90..dd04e75fe3a7 100644
--- a/drivers/gpu/drm/i915/display/intel_overlay.c
+++ b/drivers/gpu/drm/i915/display/intel_overlay.c
@@ -205,6 +205,7 @@ struct intel_overlay {
struct drm_i915_gem_object *reg_bo;
struct overlay_registers __iomem *regs;
u32 flip_addr;
+ u32 frontbuffer_bits;
/* flip handling */
struct i915_active last_flip;
void (*flip_complete)(struct intel_overlay *ovl);
@@ -255,7 +256,8 @@ alloc_request(struct intel_overlay *overlay, void (*fn)(struct intel_overlay *))
}
/* overlay needs to be disable in OCMD reg */
-static int intel_overlay_on(struct intel_overlay *overlay)
+static int intel_overlay_on(struct intel_overlay *overlay,
+ u32 frontbuffer_bits)
{
struct intel_display *display = overlay->display;
struct i915_request *rq;
@@ -274,6 +276,7 @@ static int intel_overlay_on(struct intel_overlay *overlay)
}
overlay->active = true;
+ overlay->frontbuffer_bits = frontbuffer_bits;
if (display->platform.i830)
i830_overlay_clock_gating(display, false);
@@ -293,7 +296,6 @@ static void intel_overlay_flip_prepare(struct intel_overlay *overlay,
struct i915_vma *vma)
{
struct intel_display *display = overlay->display;
- enum pipe pipe = overlay->crtc->pipe;
struct intel_frontbuffer *frontbuffer = NULL;
drm_WARN_ON(display->drm, overlay->old_vma);
@@ -302,7 +304,7 @@ static void intel_overlay_flip_prepare(struct intel_overlay *overlay,
frontbuffer = intel_frontbuffer_get(intel_bo_to_drm_bo(vma->obj));
intel_frontbuffer_track(overlay->frontbuffer, frontbuffer,
- INTEL_FRONTBUFFER_OVERLAY(pipe));
+ overlay->frontbuffer_bits);
if (overlay->frontbuffer)
intel_frontbuffer_put(overlay->frontbuffer);
@@ -364,7 +366,7 @@ static void intel_overlay_release_old_vma(struct intel_overlay *overlay)
if (drm_WARN_ON(display->drm, !vma))
return;
- intel_frontbuffer_flip(display, INTEL_FRONTBUFFER_OVERLAY(overlay->crtc->pipe));
+ intel_frontbuffer_flip(display, overlay->frontbuffer_bits);
i915_vma_unpin(vma);
i915_vma_put(vma);
@@ -382,9 +384,8 @@ static void intel_overlay_off_tail(struct intel_overlay *overlay)
intel_overlay_release_old_vma(overlay);
- overlay->crtc->overlay = NULL;
- overlay->crtc = NULL;
overlay->active = false;
+ overlay->frontbuffer_bits = 0;
if (display->platform.i830)
i830_overlay_clock_gating(display, true);
@@ -506,6 +507,7 @@ void intel_overlay_reset(struct intel_display *display)
overlay->old_yscale = 0;
overlay->crtc = NULL;
overlay->active = false;
+ overlay->frontbuffer_bits = 0;
}
static int packed_depth_bytes(u32 format)
@@ -836,7 +838,7 @@ static int intel_overlay_do_put_image(struct intel_overlay *overlay,
OCONF_PIPE_A : OCONF_PIPE_B;
iowrite32(oconfig, ®s->OCONFIG);
- ret = intel_overlay_on(overlay);
+ ret = intel_overlay_on(overlay, INTEL_FRONTBUFFER_OVERLAY(pipe));
if (ret != 0)
goto out_unpin;
}
@@ -924,6 +926,9 @@ int intel_overlay_switch_off(struct intel_overlay *overlay)
iowrite32(0, &overlay->regs->OCMD);
+ overlay->crtc->overlay = NULL;
+ overlay->crtc = NULL;
+
return intel_overlay_off(overlay);
}
--
2.52.0
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PATCH 03/19] drm/i915/overlay: Extract i915_overlay_is_active()
2026-02-18 15:27 [PATCH 00/19] drm/i915/overlay: Convert to parent interface Ville Syrjala
2026-02-18 15:27 ` [PATCH 01/19] drm/i915/overlay: Remove GPU hang snapshot stuff Ville Syrjala
2026-02-18 15:27 ` [PATCH 02/19] drm/i915/overlay: Track current frontbuffer_bits Ville Syrjala
@ 2026-02-18 15:27 ` Ville Syrjala
2026-02-18 15:27 ` [PATCH 04/19] drm/i915/overlay: Remove redundant overlay->active Ville Syrjala
` (21 subsequent siblings)
24 siblings, 0 replies; 31+ messages in thread
From: Ville Syrjala @ 2026-02-18 15:27 UTC (permalink / raw)
To: intel-gfx; +Cc: intel-xe
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
Pull the "is the overlay active?" check to a helper
(i915_overlay_is_active()). This will have to move to the
i915 side of the parent vs. display driver split.
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
drivers/gpu/drm/i915/display/intel_overlay.c | 22 +++++++++++++-------
1 file changed, 15 insertions(+), 7 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_overlay.c b/drivers/gpu/drm/i915/display/intel_overlay.c
index dd04e75fe3a7..32b45e9bc18a 100644
--- a/drivers/gpu/drm/i915/display/intel_overlay.c
+++ b/drivers/gpu/drm/i915/display/intel_overlay.c
@@ -255,6 +255,14 @@ alloc_request(struct intel_overlay *overlay, void (*fn)(struct intel_overlay *))
return rq;
}
+static bool i915_overlay_is_active(struct drm_device *drm)
+{
+ struct intel_display *display = to_intel_display(drm);
+ struct intel_overlay *overlay = display->overlay;
+
+ return overlay->active;
+}
+
/* overlay needs to be disable in OCMD reg */
static int intel_overlay_on(struct intel_overlay *overlay,
u32 frontbuffer_bits)
@@ -263,7 +271,7 @@ static int intel_overlay_on(struct intel_overlay *overlay,
struct i915_request *rq;
u32 *cs;
- drm_WARN_ON(display->drm, overlay->active);
+ drm_WARN_ON(display->drm, i915_overlay_is_active(display->drm));
rq = alloc_request(overlay, NULL);
if (IS_ERR(rq))
@@ -327,7 +335,7 @@ static int intel_overlay_continue(struct intel_overlay *overlay,
u32 flip_addr = overlay->flip_addr;
u32 tmp, *cs;
- drm_WARN_ON(display->drm, !overlay->active);
+ drm_WARN_ON(display->drm, !i915_overlay_is_active(display->drm));
if (load_polyphase_filter)
flip_addr |= OFC_UPDATE;
@@ -407,7 +415,7 @@ static int intel_overlay_off(struct intel_overlay *overlay)
struct i915_request *rq;
u32 *cs, flip_addr = overlay->flip_addr;
- drm_WARN_ON(display->drm, !overlay->active);
+ drm_WARN_ON(display->drm, !i915_overlay_is_active(display->drm));
/*
* According to intel docs the overlay hw may hang (when switching
@@ -822,7 +830,7 @@ static int intel_overlay_do_put_image(struct intel_overlay *overlay,
goto out_pin_section;
}
- if (!overlay->active) {
+ if (!i915_overlay_is_active(display->drm)) {
const struct intel_crtc_state *crtc_state =
overlay->crtc->config;
u32 oconfig = 0;
@@ -917,7 +925,7 @@ int intel_overlay_switch_off(struct intel_overlay *overlay)
if (ret != 0)
return ret;
- if (!overlay->active)
+ if (!i915_overlay_is_active(display->drm))
return 0;
ret = intel_overlay_release_old_vid(overlay);
@@ -1333,7 +1341,7 @@ int intel_overlay_attrs_ioctl(struct drm_device *dev, void *data,
if (DISPLAY_VER(display) == 2)
goto out_unlock;
- if (overlay->active) {
+ if (i915_overlay_is_active(display->drm)) {
ret = -EBUSY;
goto out_unlock;
}
@@ -1462,7 +1470,7 @@ void intel_overlay_cleanup(struct intel_display *display)
* Furthermore modesetting teardown happens beforehand so the
* hardware should be off already.
*/
- drm_WARN_ON(display->drm, overlay->active);
+ drm_WARN_ON(display->drm, i915_overlay_is_active(display->drm));
i915_gem_object_put(overlay->reg_bo);
i915_active_fini(&overlay->last_flip);
--
2.52.0
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PATCH 04/19] drm/i915/overlay: Remove redundant overlay->active
2026-02-18 15:27 [PATCH 00/19] drm/i915/overlay: Convert to parent interface Ville Syrjala
` (2 preceding siblings ...)
2026-02-18 15:27 ` [PATCH 03/19] drm/i915/overlay: Extract i915_overlay_is_active() Ville Syrjala
@ 2026-02-18 15:27 ` Ville Syrjala
2026-02-18 15:27 ` [PATCH 05/19] drm/i915/overlay: Relocate the underrun check Ville Syrjala
` (20 subsequent siblings)
24 siblings, 0 replies; 31+ messages in thread
From: Ville Syrjala @ 2026-02-18 15:27 UTC (permalink / raw)
To: intel-gfx; +Cc: intel-xe
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
Now that we have overlay->frontbuffer_bits, overlay->active
is completely redundant, so remove it.
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
drivers/gpu/drm/i915/display/intel_overlay.c | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_overlay.c b/drivers/gpu/drm/i915/display/intel_overlay.c
index 32b45e9bc18a..9bd11dde29d6 100644
--- a/drivers/gpu/drm/i915/display/intel_overlay.c
+++ b/drivers/gpu/drm/i915/display/intel_overlay.c
@@ -194,7 +194,6 @@ struct intel_overlay {
struct i915_vma *vma;
struct i915_vma *old_vma;
struct intel_frontbuffer *frontbuffer;
- bool active;
bool pfit_active;
u32 pfit_vscale_ratio; /* shifted-point number, (1<<12) == 1.0 */
u32 color_key:24;
@@ -260,7 +259,7 @@ static bool i915_overlay_is_active(struct drm_device *drm)
struct intel_display *display = to_intel_display(drm);
struct intel_overlay *overlay = display->overlay;
- return overlay->active;
+ return overlay->frontbuffer_bits;
}
/* overlay needs to be disable in OCMD reg */
@@ -283,7 +282,6 @@ static int intel_overlay_on(struct intel_overlay *overlay,
return PTR_ERR(cs);
}
- overlay->active = true;
overlay->frontbuffer_bits = frontbuffer_bits;
if (display->platform.i830)
@@ -392,7 +390,6 @@ static void intel_overlay_off_tail(struct intel_overlay *overlay)
intel_overlay_release_old_vma(overlay);
- overlay->active = false;
overlay->frontbuffer_bits = 0;
if (display->platform.i830)
@@ -514,7 +511,6 @@ void intel_overlay_reset(struct intel_display *display)
overlay->old_xscale = 0;
overlay->old_yscale = 0;
overlay->crtc = NULL;
- overlay->active = false;
overlay->frontbuffer_bits = 0;
}
--
2.52.0
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PATCH 05/19] drm/i915/overlay: Relocate the underrun check
2026-02-18 15:27 [PATCH 00/19] drm/i915/overlay: Convert to parent interface Ville Syrjala
` (3 preceding siblings ...)
2026-02-18 15:27 ` [PATCH 04/19] drm/i915/overlay: Remove redundant overlay->active Ville Syrjala
@ 2026-02-18 15:27 ` Ville Syrjala
2026-02-18 15:27 ` [PATCH 06/19] drm/i915/overlay: Introduce i915_overlay_obj_lookup() Ville Syrjala
` (19 subsequent siblings)
24 siblings, 0 replies; 31+ messages in thread
From: Ville Syrjala @ 2026-02-18 15:27 UTC (permalink / raw)
To: intel-gfx; +Cc: intel-xe
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
Move the underrun check out from intel_overlay_continue()
so that the DOVSTA register access can stay on the display
side of the parent vs. display driver split.
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
drivers/gpu/drm/i915/display/intel_overlay.c | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_overlay.c b/drivers/gpu/drm/i915/display/intel_overlay.c
index 9bd11dde29d6..e1707a678acb 100644
--- a/drivers/gpu/drm/i915/display/intel_overlay.c
+++ b/drivers/gpu/drm/i915/display/intel_overlay.c
@@ -331,18 +331,13 @@ static int intel_overlay_continue(struct intel_overlay *overlay,
struct intel_display *display = overlay->display;
struct i915_request *rq;
u32 flip_addr = overlay->flip_addr;
- u32 tmp, *cs;
+ u32 *cs;
drm_WARN_ON(display->drm, !i915_overlay_is_active(display->drm));
if (load_polyphase_filter)
flip_addr |= OFC_UPDATE;
- /* check for underruns */
- tmp = intel_de_read(display, DOVSTA);
- if (tmp & (1 << 17))
- drm_dbg(display->drm, "overlay underrun, DOVSTA: %x\n", tmp);
-
rq = alloc_request(overlay, NULL);
if (IS_ERR(rq))
return PTR_ERR(rq);
@@ -810,6 +805,7 @@ static int intel_overlay_do_put_image(struct intel_overlay *overlay,
bool scale_changed = false;
struct i915_vma *vma;
int ret, tmp_width;
+ u32 tmp;
drm_WARN_ON(display->drm,
!drm_modeset_is_locked(&display->drm->mode_config.connection_mutex));
@@ -895,6 +891,11 @@ static int intel_overlay_do_put_image(struct intel_overlay *overlay,
iowrite32(overlay_cmd_reg(params), ®s->OCMD);
+ /* check for underruns */
+ tmp = intel_de_read(display, DOVSTA);
+ if (tmp & (1 << 17))
+ drm_dbg(display->drm, "overlay underrun, DOVSTA: %x\n", tmp);
+
ret = intel_overlay_continue(overlay, vma, scale_changed);
if (ret)
goto out_unpin;
--
2.52.0
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PATCH 06/19] drm/i915/overlay: Introduce i915_overlay_obj_lookup()
2026-02-18 15:27 [PATCH 00/19] drm/i915/overlay: Convert to parent interface Ville Syrjala
` (4 preceding siblings ...)
2026-02-18 15:27 ` [PATCH 05/19] drm/i915/overlay: Relocate the underrun check Ville Syrjala
@ 2026-02-18 15:27 ` Ville Syrjala
2026-02-25 9:40 ` Jani Nikula
2026-02-18 15:27 ` [PATCH 07/19] drm/i915/overlay: Use struct drm_gem_object as the type Ville Syrjala
` (18 subsequent siblings)
24 siblings, 1 reply; 31+ messages in thread
From: Ville Syrjala @ 2026-02-18 15:27 UTC (permalink / raw)
To: intel-gfx; +Cc: intel-xe
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
Extract the BO lookup and tiling check into a new
helper called i915_overlay_obj_lookup(). This will have to
move to the i915 side of the parent vs. display driver split.
There is a slight change here in that we now do the tiling
check before taking the modeset locks, but those locks don't
protect the BO tiling stuff in any way, so nothing is really
different here.
Note that the hardware should support X-tiled scanout also
for the overlay, but I guess no one ever bothered to hook
it up and test it. So the check should stay at least for now.
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
drivers/gpu/drm/i915/display/intel_overlay.c | 31 ++++++++++++++------
1 file changed, 22 insertions(+), 9 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_overlay.c b/drivers/gpu/drm/i915/display/intel_overlay.c
index e1707a678acb..5c4f8bf8ac44 100644
--- a/drivers/gpu/drm/i915/display/intel_overlay.c
+++ b/drivers/gpu/drm/i915/display/intel_overlay.c
@@ -1125,6 +1125,26 @@ static int check_overlay_src(struct intel_display *display,
return 0;
}
+static struct drm_i915_gem_object *
+i915_overlay_obj_lookup(struct drm_device *drm,
+ struct drm_file *file_priv,
+ u32 handle)
+{
+ struct drm_i915_gem_object *bo;
+
+ bo = i915_gem_object_lookup(file_priv, handle);
+ if (!bo)
+ return ERR_PTR(-ENOENT);
+
+ if (i915_gem_object_is_tiled(bo)) {
+ drm_dbg(drm, "buffer used for overlay image can not be tiled\n");
+ i915_gem_object_put(bo);
+ return ERR_PTR(-EINVAL);
+ }
+
+ return bo;
+}
+
int intel_overlay_put_image_ioctl(struct drm_device *dev, void *data,
struct drm_file *file_priv)
{
@@ -1155,19 +1175,12 @@ int intel_overlay_put_image_ioctl(struct drm_device *dev, void *data,
return -ENOENT;
crtc = to_intel_crtc(drmmode_crtc);
- new_bo = i915_gem_object_lookup(file_priv, params->bo_handle);
+ new_bo = i915_overlay_obj_lookup(dev, file_priv, params->bo_handle);
if (!new_bo)
- return -ENOENT;
+ return PTR_ERR(new_bo);
drm_modeset_lock_all(dev);
- if (i915_gem_object_is_tiled(new_bo)) {
- drm_dbg_kms(display->drm,
- "buffer used for overlay image can not be tiled\n");
- ret = -EINVAL;
- goto out_unlock;
- }
-
ret = intel_overlay_recover_from_interrupt(overlay);
if (ret != 0)
goto out_unlock;
--
2.52.0
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PATCH 07/19] drm/i915/overlay: Use struct drm_gem_object as the type
2026-02-18 15:27 [PATCH 00/19] drm/i915/overlay: Convert to parent interface Ville Syrjala
` (5 preceding siblings ...)
2026-02-18 15:27 ` [PATCH 06/19] drm/i915/overlay: Introduce i915_overlay_obj_lookup() Ville Syrjala
@ 2026-02-18 15:27 ` Ville Syrjala
2026-02-18 15:27 ` [PATCH 08/19] drm/i915/overlay: Extract i915_overlay_reset() Ville Syrjala
` (17 subsequent siblings)
24 siblings, 0 replies; 31+ messages in thread
From: Ville Syrjala @ 2026-02-18 15:27 UTC (permalink / raw)
To: intel-gfx; +Cc: intel-xe
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
Use 'struct drm_gem_object' for the BO instead of 'struct
drm_i915_gem_object', to avoid having the display side
know anything about the i915 specific BO type.
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
drivers/gpu/drm/i915/display/intel_overlay.c | 37 ++++++++++----------
1 file changed, 19 insertions(+), 18 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_overlay.c b/drivers/gpu/drm/i915/display/intel_overlay.c
index 5c4f8bf8ac44..88316c585656 100644
--- a/drivers/gpu/drm/i915/display/intel_overlay.c
+++ b/drivers/gpu/drm/i915/display/intel_overlay.c
@@ -768,8 +768,9 @@ static u32 overlay_cmd_reg(struct drm_intel_overlay_put_image *params)
return cmd;
}
-static struct i915_vma *intel_overlay_pin_fb(struct drm_i915_gem_object *new_bo)
+static struct i915_vma *intel_overlay_pin_fb(struct drm_gem_object *obj)
{
+ struct drm_i915_gem_object *new_bo = to_intel_bo(obj);
struct i915_gem_ww_ctx ww;
struct i915_vma *vma;
int ret;
@@ -795,7 +796,7 @@ static struct i915_vma *intel_overlay_pin_fb(struct drm_i915_gem_object *new_bo)
}
static int intel_overlay_do_put_image(struct intel_overlay *overlay,
- struct drm_i915_gem_object *new_bo,
+ struct drm_gem_object *obj,
struct drm_intel_overlay_put_image *params)
{
struct intel_display *display = overlay->display;
@@ -816,7 +817,7 @@ static int intel_overlay_do_put_image(struct intel_overlay *overlay,
atomic_inc(&display->restore.pending_fb_pin);
- vma = intel_overlay_pin_fb(new_bo);
+ vma = intel_overlay_pin_fb(obj);
if (IS_ERR(vma)) {
ret = PTR_ERR(vma);
goto out_pin_section;
@@ -1016,7 +1017,7 @@ static int check_overlay_scaling(struct drm_intel_overlay_put_image *rec)
static int check_overlay_src(struct intel_display *display,
struct drm_intel_overlay_put_image *rec,
- struct drm_i915_gem_object *new_bo)
+ struct drm_gem_object *obj)
{
int uv_hscale = uv_hsubsampling(rec->flags);
int uv_vscale = uv_vsubsampling(rec->flags);
@@ -1101,7 +1102,7 @@ static int check_overlay_src(struct intel_display *display,
return -EINVAL;
tmp = rec->stride_Y*rec->src_height;
- if (rec->offset_Y + tmp > new_bo->base.size)
+ if (rec->offset_Y + tmp > obj->size)
return -EINVAL;
break;
@@ -1112,12 +1113,12 @@ static int check_overlay_src(struct intel_display *display,
return -EINVAL;
tmp = rec->stride_Y * rec->src_height;
- if (rec->offset_Y + tmp > new_bo->base.size)
+ if (rec->offset_Y + tmp > obj->size)
return -EINVAL;
tmp = rec->stride_UV * (rec->src_height / uv_vscale);
- if (rec->offset_U + tmp > new_bo->base.size ||
- rec->offset_V + tmp > new_bo->base.size)
+ if (rec->offset_U + tmp > obj->size ||
+ rec->offset_V + tmp > obj->size)
return -EINVAL;
break;
}
@@ -1125,7 +1126,7 @@ static int check_overlay_src(struct intel_display *display,
return 0;
}
-static struct drm_i915_gem_object *
+static struct drm_gem_object *
i915_overlay_obj_lookup(struct drm_device *drm,
struct drm_file *file_priv,
u32 handle)
@@ -1142,7 +1143,7 @@ i915_overlay_obj_lookup(struct drm_device *drm,
return ERR_PTR(-EINVAL);
}
- return bo;
+ return intel_bo_to_drm_bo(bo);
}
int intel_overlay_put_image_ioctl(struct drm_device *dev, void *data,
@@ -1152,8 +1153,8 @@ int intel_overlay_put_image_ioctl(struct drm_device *dev, void *data,
struct drm_intel_overlay_put_image *params = data;
struct intel_overlay *overlay;
struct drm_crtc *drmmode_crtc;
+ struct drm_gem_object *obj;
struct intel_crtc *crtc;
- struct drm_i915_gem_object *new_bo;
int ret;
overlay = display->overlay;
@@ -1175,9 +1176,9 @@ int intel_overlay_put_image_ioctl(struct drm_device *dev, void *data,
return -ENOENT;
crtc = to_intel_crtc(drmmode_crtc);
- new_bo = i915_overlay_obj_lookup(dev, file_priv, params->bo_handle);
- if (!new_bo)
- return PTR_ERR(new_bo);
+ obj = i915_overlay_obj_lookup(dev, file_priv, params->bo_handle);
+ if (!obj)
+ return PTR_ERR(obj);
drm_modeset_lock_all(dev);
@@ -1224,7 +1225,7 @@ int intel_overlay_put_image_ioctl(struct drm_device *dev, void *data,
goto out_unlock;
}
- ret = check_overlay_src(display, params, new_bo);
+ ret = check_overlay_src(display, params, obj);
if (ret != 0)
goto out_unlock;
@@ -1233,18 +1234,18 @@ int intel_overlay_put_image_ioctl(struct drm_device *dev, void *data,
if (ret != 0)
goto out_unlock;
- ret = intel_overlay_do_put_image(overlay, new_bo, params);
+ ret = intel_overlay_do_put_image(overlay, obj, params);
if (ret != 0)
goto out_unlock;
drm_modeset_unlock_all(dev);
- i915_gem_object_put(new_bo);
+ drm_gem_object_put(obj);
return 0;
out_unlock:
drm_modeset_unlock_all(dev);
- i915_gem_object_put(new_bo);
+ drm_gem_object_put(obj);
return ret;
}
--
2.52.0
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PATCH 08/19] drm/i915/overlay: Extract i915_overlay_reset()
2026-02-18 15:27 [PATCH 00/19] drm/i915/overlay: Convert to parent interface Ville Syrjala
` (6 preceding siblings ...)
2026-02-18 15:27 ` [PATCH 07/19] drm/i915/overlay: Use struct drm_gem_object as the type Ville Syrjala
@ 2026-02-18 15:27 ` Ville Syrjala
2026-02-18 15:27 ` [PATCH 09/19] drm/i915/overlay: Extract i915_overlay_setup() Ville Syrjala
` (16 subsequent siblings)
24 siblings, 0 replies; 31+ messages in thread
From: Ville Syrjala @ 2026-02-18 15:27 UTC (permalink / raw)
To: intel-gfx; +Cc: intel-xe
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
overlay->frontbuffer_bits tracking will move to the i915 side
of the parent vs. display driver split, so extract the reset
part of that into a new function (i915_overlay_reset()).
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
drivers/gpu/drm/i915/display/intel_overlay.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/i915/display/intel_overlay.c b/drivers/gpu/drm/i915/display/intel_overlay.c
index 88316c585656..8c1ed540a8e3 100644
--- a/drivers/gpu/drm/i915/display/intel_overlay.c
+++ b/drivers/gpu/drm/i915/display/intel_overlay.c
@@ -496,6 +496,17 @@ static int intel_overlay_release_old_vid(struct intel_overlay *overlay)
return i915_active_wait(&overlay->last_flip);
}
+static void i915_overlay_reset(struct drm_device *drm)
+{
+ struct intel_display *display = to_intel_display(drm);
+ struct intel_overlay *overlay = display->overlay;
+
+ if (!overlay)
+ return;
+
+ overlay->frontbuffer_bits = 0;
+}
+
void intel_overlay_reset(struct intel_display *display)
{
struct intel_overlay *overlay = display->overlay;
@@ -506,7 +517,8 @@ void intel_overlay_reset(struct intel_display *display)
overlay->old_xscale = 0;
overlay->old_yscale = 0;
overlay->crtc = NULL;
- overlay->frontbuffer_bits = 0;
+
+ i915_overlay_reset(display->drm);
}
static int packed_depth_bytes(u32 format)
--
2.52.0
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PATCH 09/19] drm/i915/overlay: Extract i915_overlay_setup()
2026-02-18 15:27 [PATCH 00/19] drm/i915/overlay: Convert to parent interface Ville Syrjala
` (7 preceding siblings ...)
2026-02-18 15:27 ` [PATCH 08/19] drm/i915/overlay: Extract i915_overlay_reset() Ville Syrjala
@ 2026-02-18 15:27 ` Ville Syrjala
2026-02-18 15:27 ` [PATCH 10/19] drm/i915/overlay: Extract i915_overlay_cleanup() Ville Syrjala
` (15 subsequent siblings)
24 siblings, 0 replies; 31+ messages in thread
From: Ville Syrjala @ 2026-02-18 15:27 UTC (permalink / raw)
To: intel-gfx; +Cc: intel-xe
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
Pull the gem/gt related bits of the overlay setup into
a separate function (i915_overlay_setup()) that will eventually
move to the i915 side of the parent vs. display driver split.
For now we'll also have to pass in the overlay struct, but
that will disappear once the i915 vs. display split is completed.
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
drivers/gpu/drm/i915/display/intel_overlay.c | 40 ++++++++++++--------
1 file changed, 25 insertions(+), 15 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_overlay.c b/drivers/gpu/drm/i915/display/intel_overlay.c
index 8c1ed540a8e3..5683bddf33b4 100644
--- a/drivers/gpu/drm/i915/display/intel_overlay.c
+++ b/drivers/gpu/drm/i915/display/intel_overlay.c
@@ -1430,39 +1430,49 @@ static int get_registers(struct intel_overlay *overlay, bool use_phys)
return err;
}
-void intel_overlay_setup(struct intel_display *display)
+static int i915_overlay_setup(struct drm_device *drm,
+ struct intel_overlay *overlay,
+ bool needs_physical)
{
- struct drm_i915_private *dev_priv = to_i915(display->drm);
- struct intel_overlay *overlay;
+ struct drm_i915_private *dev_priv = to_i915(drm);
struct intel_engine_cs *engine;
- int ret;
-
- if (!HAS_OVERLAY(display))
- return;
engine = to_gt(dev_priv)->engine[RCS0];
if (!engine || !engine->kernel_context)
+ return -ENOENT;
+
+ overlay->context = engine->kernel_context;
+
+ i915_active_init(&overlay->last_flip,
+ NULL, intel_overlay_last_flip_retire, 0);
+
+ return get_registers(overlay, needs_physical);
+}
+
+void intel_overlay_setup(struct intel_display *display)
+{
+ struct intel_overlay *overlay;
+ int ret;
+
+ if (!HAS_OVERLAY(display))
return;
overlay = kzalloc(sizeof(*overlay), GFP_KERNEL);
if (!overlay)
return;
+ ret = i915_overlay_setup(display->drm, overlay,
+ OVERLAY_NEEDS_PHYSICAL(display));
+ if (ret)
+ goto out_free;
+
overlay->display = display;
- overlay->context = engine->kernel_context;
overlay->color_key = 0x0101fe;
overlay->color_key_enabled = true;
overlay->brightness = -19;
overlay->contrast = 75;
overlay->saturation = 146;
- i915_active_init(&overlay->last_flip,
- NULL, intel_overlay_last_flip_retire, 0);
-
- ret = get_registers(overlay, OVERLAY_NEEDS_PHYSICAL(display));
- if (ret)
- goto out_free;
-
memset_io(overlay->regs, 0, sizeof(struct overlay_registers));
update_polyphase_filter(overlay->regs);
update_reg_attrs(overlay, overlay->regs);
--
2.52.0
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PATCH 10/19] drm/i915/overlay: Extract i915_overlay_cleanup()
2026-02-18 15:27 [PATCH 00/19] drm/i915/overlay: Convert to parent interface Ville Syrjala
` (8 preceding siblings ...)
2026-02-18 15:27 ` [PATCH 09/19] drm/i915/overlay: Extract i915_overlay_setup() Ville Syrjala
@ 2026-02-18 15:27 ` Ville Syrjala
2026-02-18 15:27 ` [PATCH 11/19] drm/i915/overlay: Abstract buffer (un)pinning Ville Syrjala
` (14 subsequent siblings)
24 siblings, 0 replies; 31+ messages in thread
From: Ville Syrjala @ 2026-02-18 15:27 UTC (permalink / raw)
To: intel-gfx; +Cc: intel-xe
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
Pull the i915 specific bits of the overlay cleanup into
a separate function (i915_overlay_cleanup()) to accommodate
the upcoming parent vs. display driver split.
For now we'll also have to pass in the overlay struct, but
that will disappear once the i915 vs. display split is completed.
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
drivers/gpu/drm/i915/display/intel_overlay.c | 22 +++++++++++++-------
1 file changed, 14 insertions(+), 8 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_overlay.c b/drivers/gpu/drm/i915/display/intel_overlay.c
index 5683bddf33b4..9b5ae3f4f5bd 100644
--- a/drivers/gpu/drm/i915/display/intel_overlay.c
+++ b/drivers/gpu/drm/i915/display/intel_overlay.c
@@ -1490,23 +1490,29 @@ bool intel_overlay_available(struct intel_display *display)
return display->overlay;
}
-void intel_overlay_cleanup(struct intel_display *display)
+static void i915_overlay_cleanup(struct drm_device *drm,
+ struct intel_overlay *overlay)
{
- struct intel_overlay *overlay;
-
- overlay = fetch_and_zero(&display->overlay);
- if (!overlay)
- return;
-
/*
* The bo's should be free'd by the generic code already.
* Furthermore modesetting teardown happens beforehand so the
* hardware should be off already.
*/
- drm_WARN_ON(display->drm, i915_overlay_is_active(display->drm));
+ drm_WARN_ON(drm, i915_overlay_is_active(drm));
i915_gem_object_put(overlay->reg_bo);
i915_active_fini(&overlay->last_flip);
+}
+
+void intel_overlay_cleanup(struct intel_display *display)
+{
+ struct intel_overlay *overlay;
+
+ overlay = fetch_and_zero(&display->overlay);
+ if (!overlay)
+ return;
+
+ i915_overlay_cleanup(display->drm, overlay);
kfree(overlay);
}
--
2.52.0
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PATCH 11/19] drm/i915/overlay: Abstract buffer (un)pinning
2026-02-18 15:27 [PATCH 00/19] drm/i915/overlay: Convert to parent interface Ville Syrjala
` (9 preceding siblings ...)
2026-02-18 15:27 ` [PATCH 10/19] drm/i915/overlay: Extract i915_overlay_cleanup() Ville Syrjala
@ 2026-02-18 15:27 ` Ville Syrjala
2026-02-18 15:27 ` [PATCH 12/19] drm/i915/overlay: Rename low level i915 specific functions Ville Syrjala
` (13 subsequent siblings)
24 siblings, 0 replies; 31+ messages in thread
From: Ville Syrjala @ 2026-02-18 15:27 UTC (permalink / raw)
To: intel-gfx; +Cc: intel-xe
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
Make the buffer (un)pinning a bit more abstract so that
the display side of the code doesn't need to know about i915
specific things (i915_ggtt_offset() and i915_vma_unpin()).
In preparation for the full parent vs. display driver split
we'll also pass in the drm_device to these functions, although
not strictly needed yet.
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
drivers/gpu/drm/i915/display/intel_overlay.c | 24 ++++++++++++++------
1 file changed, 17 insertions(+), 7 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_overlay.c b/drivers/gpu/drm/i915/display/intel_overlay.c
index 9b5ae3f4f5bd..24579c9a7fec 100644
--- a/drivers/gpu/drm/i915/display/intel_overlay.c
+++ b/drivers/gpu/drm/i915/display/intel_overlay.c
@@ -780,7 +780,9 @@ static u32 overlay_cmd_reg(struct drm_intel_overlay_put_image *params)
return cmd;
}
-static struct i915_vma *intel_overlay_pin_fb(struct drm_gem_object *obj)
+static struct i915_vma *i915_overlay_pin_fb(struct drm_device *drm,
+ struct drm_gem_object *obj,
+ u32 *offset)
{
struct drm_i915_gem_object *new_bo = to_intel_bo(obj);
struct i915_gem_ww_ctx ww;
@@ -804,9 +806,17 @@ static struct i915_vma *intel_overlay_pin_fb(struct drm_gem_object *obj)
if (ret)
return ERR_PTR(ret);
+ *offset = i915_ggtt_offset(vma);
+
return vma;
}
+static void i915_overlay_unpin_fb(struct drm_device *drm,
+ struct i915_vma *vma)
+{
+ i915_vma_unpin(vma);
+}
+
static int intel_overlay_do_put_image(struct intel_overlay *overlay,
struct drm_gem_object *obj,
struct drm_intel_overlay_put_image *params)
@@ -818,7 +828,7 @@ static int intel_overlay_do_put_image(struct intel_overlay *overlay,
bool scale_changed = false;
struct i915_vma *vma;
int ret, tmp_width;
- u32 tmp;
+ u32 tmp, offset;
drm_WARN_ON(display->drm,
!drm_modeset_is_locked(&display->drm->mode_config.connection_mutex));
@@ -829,7 +839,7 @@ static int intel_overlay_do_put_image(struct intel_overlay *overlay,
atomic_inc(&display->restore.pending_fb_pin);
- vma = intel_overlay_pin_fb(obj);
+ vma = i915_overlay_pin_fb(display->drm, obj, &offset);
if (IS_ERR(vma)) {
ret = PTR_ERR(vma);
goto out_pin_section;
@@ -868,7 +878,7 @@ static int intel_overlay_do_put_image(struct intel_overlay *overlay,
swidth = params->src_width;
swidthsw = calc_swidthsw(display, params->offset_Y, tmp_width);
sheight = params->src_height;
- iowrite32(i915_ggtt_offset(vma) + params->offset_Y, ®s->OBUF_0Y);
+ iowrite32(offset + params->offset_Y, ®s->OBUF_0Y);
ostride = params->stride_Y;
if (params->flags & I915_OVERLAY_YUV_PLANAR) {
@@ -885,9 +895,9 @@ static int intel_overlay_do_put_image(struct intel_overlay *overlay,
params->src_width / uv_hscale);
swidthsw |= max(tmp_U, tmp_V) << 16;
- iowrite32(i915_ggtt_offset(vma) + params->offset_U,
+ iowrite32(offset + params->offset_U,
®s->OBUF_0U);
- iowrite32(i915_ggtt_offset(vma) + params->offset_V,
+ iowrite32(offset + params->offset_V,
®s->OBUF_0V);
ostride |= params->stride_UV << 16;
@@ -916,7 +926,7 @@ static int intel_overlay_do_put_image(struct intel_overlay *overlay,
return 0;
out_unpin:
- i915_vma_unpin(vma);
+ i915_overlay_unpin_fb(display->drm, vma);
out_pin_section:
atomic_dec(&display->restore.pending_fb_pin);
--
2.52.0
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PATCH 12/19] drm/i915/overlay: Rename low level i915 specific functions
2026-02-18 15:27 [PATCH 00/19] drm/i915/overlay: Convert to parent interface Ville Syrjala
` (10 preceding siblings ...)
2026-02-18 15:27 ` [PATCH 11/19] drm/i915/overlay: Abstract buffer (un)pinning Ville Syrjala
@ 2026-02-18 15:27 ` Ville Syrjala
2026-02-18 15:28 ` [PATCH 13/19] drm/i915/overlay: Adjust i915 specific interfaces Ville Syrjala
` (12 subsequent siblings)
24 siblings, 0 replies; 31+ messages in thread
From: Ville Syrjala @ 2026-02-18 15:27 UTC (permalink / raw)
To: intel-gfx; +Cc: intel-xe
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
Some of the lower level functions in the overlay code will
move to the i915 side of the upcoming parent vs. display
driver split. Move all such functions to the "i915_overlay_"
to make it easier to see what belongs where.
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
drivers/gpu/drm/i915/display/intel_overlay.c | 29 ++++++++++----------
1 file changed, 14 insertions(+), 15 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_overlay.c b/drivers/gpu/drm/i915/display/intel_overlay.c
index 24579c9a7fec..7b9bb83ed72f 100644
--- a/drivers/gpu/drm/i915/display/intel_overlay.c
+++ b/drivers/gpu/drm/i915/display/intel_overlay.c
@@ -298,8 +298,8 @@ static int intel_overlay_on(struct intel_overlay *overlay,
return i915_active_wait(&overlay->last_flip);
}
-static void intel_overlay_flip_prepare(struct intel_overlay *overlay,
- struct i915_vma *vma)
+static void i915_overlay_flip_prepare(struct intel_overlay *overlay,
+ struct i915_vma *vma)
{
struct intel_display *display = overlay->display;
struct intel_frontbuffer *frontbuffer = NULL;
@@ -352,13 +352,13 @@ static int intel_overlay_continue(struct intel_overlay *overlay,
*cs++ = flip_addr;
intel_ring_advance(rq, cs);
- intel_overlay_flip_prepare(overlay, vma);
+ i915_overlay_flip_prepare(overlay, vma);
i915_request_add(rq);
return 0;
}
-static void intel_overlay_release_old_vma(struct intel_overlay *overlay)
+static void i915_overlay_release_old_vma(struct intel_overlay *overlay)
{
struct intel_display *display = overlay->display;
struct i915_vma *vma;
@@ -373,17 +373,16 @@ static void intel_overlay_release_old_vma(struct intel_overlay *overlay)
i915_vma_put(vma);
}
-static void
-intel_overlay_release_old_vid_tail(struct intel_overlay *overlay)
+static void i915_overlay_release_old_vid_tail(struct intel_overlay *overlay)
{
- intel_overlay_release_old_vma(overlay);
+ i915_overlay_release_old_vma(overlay);
}
-static void intel_overlay_off_tail(struct intel_overlay *overlay)
+static void i915_overlay_off_tail(struct intel_overlay *overlay)
{
struct intel_display *display = overlay->display;
- intel_overlay_release_old_vma(overlay);
+ i915_overlay_release_old_vma(overlay);
overlay->frontbuffer_bits = 0;
@@ -391,7 +390,7 @@ static void intel_overlay_off_tail(struct intel_overlay *overlay)
i830_overlay_clock_gating(display, true);
}
-static void intel_overlay_last_flip_retire(struct i915_active *active)
+static void i915_overlay_last_flip_retire(struct i915_active *active)
{
struct intel_overlay *overlay =
container_of(active, typeof(*overlay), last_flip);
@@ -417,7 +416,7 @@ static int intel_overlay_off(struct intel_overlay *overlay)
*/
flip_addr |= OFC_UPDATE;
- rq = alloc_request(overlay, intel_overlay_off_tail);
+ rq = alloc_request(overlay, i915_overlay_off_tail);
if (IS_ERR(rq))
return PTR_ERR(rq);
@@ -439,7 +438,7 @@ static int intel_overlay_off(struct intel_overlay *overlay)
intel_ring_advance(rq, cs);
- intel_overlay_flip_prepare(overlay, NULL);
+ i915_overlay_flip_prepare(overlay, NULL);
i915_request_add(rq);
return i915_active_wait(&overlay->last_flip);
@@ -473,11 +472,11 @@ static int intel_overlay_release_old_vid(struct intel_overlay *overlay)
return 0;
if (!(intel_de_read(display, GEN2_ISR) & I915_OVERLAY_PLANE_FLIP_PENDING_INTERRUPT)) {
- intel_overlay_release_old_vid_tail(overlay);
+ i915_overlay_release_old_vid_tail(overlay);
return 0;
}
- rq = alloc_request(overlay, intel_overlay_release_old_vid_tail);
+ rq = alloc_request(overlay, i915_overlay_release_old_vid_tail);
if (IS_ERR(rq))
return PTR_ERR(rq);
@@ -1454,7 +1453,7 @@ static int i915_overlay_setup(struct drm_device *drm,
overlay->context = engine->kernel_context;
i915_active_init(&overlay->last_flip,
- NULL, intel_overlay_last_flip_retire, 0);
+ NULL, i915_overlay_last_flip_retire, 0);
return get_registers(overlay, needs_physical);
}
--
2.52.0
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PATCH 13/19] drm/i915/overlay: Adjust i915 specific interfaces
2026-02-18 15:27 [PATCH 00/19] drm/i915/overlay: Convert to parent interface Ville Syrjala
` (11 preceding siblings ...)
2026-02-18 15:27 ` [PATCH 12/19] drm/i915/overlay: Rename low level i915 specific functions Ville Syrjala
@ 2026-02-18 15:28 ` Ville Syrjala
2026-02-18 15:28 ` [PATCH 14/19] drm/i915/overlay: Make i830_overlay_clock_gating() i915 specific Ville Syrjala
` (11 subsequent siblings)
24 siblings, 0 replies; 31+ messages in thread
From: Ville Syrjala @ 2026-02-18 15:28 UTC (permalink / raw)
To: intel-gfx; +Cc: intel-xe
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
Adjust the names ("i915_overlay_" prefix) and calling
convention (pass the driver agnostic 'struct drm_device'()
of the functions that will provide the remainder of the
parent driver interface to be used by the overlay display
code.
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
drivers/gpu/drm/i915/display/intel_overlay.c | 51 +++++++++++---------
1 file changed, 29 insertions(+), 22 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_overlay.c b/drivers/gpu/drm/i915/display/intel_overlay.c
index 7b9bb83ed72f..f51673cf94de 100644
--- a/drivers/gpu/drm/i915/display/intel_overlay.c
+++ b/drivers/gpu/drm/i915/display/intel_overlay.c
@@ -263,14 +263,15 @@ static bool i915_overlay_is_active(struct drm_device *drm)
}
/* overlay needs to be disable in OCMD reg */
-static int intel_overlay_on(struct intel_overlay *overlay,
- u32 frontbuffer_bits)
+static int i915_overlay_on(struct drm_device *drm,
+ u32 frontbuffer_bits)
{
- struct intel_display *display = overlay->display;
+ struct intel_display *display = to_intel_display(drm);
+ struct intel_overlay *overlay = display->overlay;
struct i915_request *rq;
u32 *cs;
- drm_WARN_ON(display->drm, i915_overlay_is_active(display->drm));
+ drm_WARN_ON(drm, i915_overlay_is_active(drm));
rq = alloc_request(overlay, NULL);
if (IS_ERR(rq))
@@ -324,16 +325,17 @@ static void i915_overlay_flip_prepare(struct intel_overlay *overlay,
}
/* overlay needs to be enabled in OCMD reg */
-static int intel_overlay_continue(struct intel_overlay *overlay,
- struct i915_vma *vma,
- bool load_polyphase_filter)
+static int i915_overlay_continue(struct drm_device *drm,
+ struct i915_vma *vma,
+ bool load_polyphase_filter)
{
- struct intel_display *display = overlay->display;
+ struct intel_display *display = to_intel_display(drm);
+ struct intel_overlay *overlay = display->overlay;
struct i915_request *rq;
u32 flip_addr = overlay->flip_addr;
u32 *cs;
- drm_WARN_ON(display->drm, !i915_overlay_is_active(display->drm));
+ drm_WARN_ON(drm, !i915_overlay_is_active(drm));
if (load_polyphase_filter)
flip_addr |= OFC_UPDATE;
@@ -400,13 +402,14 @@ static void i915_overlay_last_flip_retire(struct i915_active *active)
}
/* overlay needs to be disabled in OCMD reg */
-static int intel_overlay_off(struct intel_overlay *overlay)
+static int i915_overlay_off(struct drm_device *drm)
{
- struct intel_display *display = overlay->display;
+ struct intel_display *display = to_intel_display(drm);
+ struct intel_overlay *overlay = display->overlay;
struct i915_request *rq;
u32 *cs, flip_addr = overlay->flip_addr;
- drm_WARN_ON(display->drm, !i915_overlay_is_active(display->drm));
+ drm_WARN_ON(drm, !i915_overlay_is_active(drm));
/*
* According to intel docs the overlay hw may hang (when switching
@@ -448,8 +451,11 @@ static int intel_overlay_off(struct intel_overlay *overlay)
* Recover from an interruption due to a signal.
* We have to be careful not to repeat work forever an make forward progress.
*/
-static int intel_overlay_recover_from_interrupt(struct intel_overlay *overlay)
+static int i915_overlay_recover_from_interrupt(struct drm_device *drm)
{
+ struct intel_display *display = to_intel_display(drm);
+ struct intel_overlay *overlay = display->overlay;
+
return i915_active_wait(&overlay->last_flip);
}
@@ -458,9 +464,10 @@ static int intel_overlay_recover_from_interrupt(struct intel_overlay *overlay)
* Needs to be called before the overlay register are changed
* via intel_overlay_(un)map_regs.
*/
-static int intel_overlay_release_old_vid(struct intel_overlay *overlay)
+static int i915_overlay_release_old_vid(struct drm_device *drm)
{
- struct intel_display *display = overlay->display;
+ struct intel_display *display = to_intel_display(drm);
+ struct intel_overlay *overlay = display->overlay;
struct i915_request *rq;
u32 *cs;
@@ -832,7 +839,7 @@ static int intel_overlay_do_put_image(struct intel_overlay *overlay,
drm_WARN_ON(display->drm,
!drm_modeset_is_locked(&display->drm->mode_config.connection_mutex));
- ret = intel_overlay_release_old_vid(overlay);
+ ret = i915_overlay_release_old_vid(display->drm);
if (ret != 0)
return ret;
@@ -860,7 +867,7 @@ static int intel_overlay_do_put_image(struct intel_overlay *overlay,
OCONF_PIPE_A : OCONF_PIPE_B;
iowrite32(oconfig, ®s->OCONFIG);
- ret = intel_overlay_on(overlay, INTEL_FRONTBUFFER_OVERLAY(pipe));
+ ret = i915_overlay_on(display->drm, INTEL_FRONTBUFFER_OVERLAY(pipe));
if (ret != 0)
goto out_unpin;
}
@@ -918,7 +925,7 @@ static int intel_overlay_do_put_image(struct intel_overlay *overlay,
if (tmp & (1 << 17))
drm_dbg(display->drm, "overlay underrun, DOVSTA: %x\n", tmp);
- ret = intel_overlay_continue(overlay, vma, scale_changed);
+ ret = i915_overlay_continue(display->drm, vma, scale_changed);
if (ret)
goto out_unpin;
@@ -940,14 +947,14 @@ int intel_overlay_switch_off(struct intel_overlay *overlay)
drm_WARN_ON(display->drm,
!drm_modeset_is_locked(&display->drm->mode_config.connection_mutex));
- ret = intel_overlay_recover_from_interrupt(overlay);
+ ret = i915_overlay_recover_from_interrupt(display->drm);
if (ret != 0)
return ret;
if (!i915_overlay_is_active(display->drm))
return 0;
- ret = intel_overlay_release_old_vid(overlay);
+ ret = i915_overlay_release_old_vid(display->drm);
if (ret != 0)
return ret;
@@ -956,7 +963,7 @@ int intel_overlay_switch_off(struct intel_overlay *overlay)
overlay->crtc->overlay = NULL;
overlay->crtc = NULL;
- return intel_overlay_off(overlay);
+ return i915_overlay_off(display->drm);
}
static int check_overlay_possible_on_crtc(struct intel_overlay *overlay,
@@ -1203,7 +1210,7 @@ int intel_overlay_put_image_ioctl(struct drm_device *dev, void *data,
drm_modeset_lock_all(dev);
- ret = intel_overlay_recover_from_interrupt(overlay);
+ ret = i915_overlay_recover_from_interrupt(dev);
if (ret != 0)
goto out_unlock;
--
2.52.0
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PATCH 14/19] drm/i915/overlay: Make i830_overlay_clock_gating() i915 specific
2026-02-18 15:27 [PATCH 00/19] drm/i915/overlay: Convert to parent interface Ville Syrjala
` (12 preceding siblings ...)
2026-02-18 15:28 ` [PATCH 13/19] drm/i915/overlay: Adjust i915 specific interfaces Ville Syrjala
@ 2026-02-18 15:28 ` Ville Syrjala
2026-02-18 15:28 ` [PATCH 15/19] drm/i915/overlay: s/dev_priv/i915/ Ville Syrjala
` (10 subsequent siblings)
24 siblings, 0 replies; 31+ messages in thread
From: Ville Syrjala @ 2026-02-18 15:28 UTC (permalink / raw)
To: intel-gfx; +Cc: intel-xe
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
i830_overlay_clock_gating() will remain on the i915 side of the
parent vs. display driver split. Stop using display specific stuff
inside it.
The one annoyance here is access to the display engine's
DSPCLK_GATE_D register. The proper way to deal with that might
be to move it to the display side, but that seems a bit hard right
now. So leave it where it is for now.
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
drivers/gpu/drm/i915/display/intel_overlay.c | 24 ++++++++++++--------
1 file changed, 15 insertions(+), 9 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_overlay.c b/drivers/gpu/drm/i915/display/intel_overlay.c
index f51673cf94de..1b792926e076 100644
--- a/drivers/gpu/drm/i915/display/intel_overlay.c
+++ b/drivers/gpu/drm/i915/display/intel_overlay.c
@@ -210,17 +210,21 @@ struct intel_overlay {
void (*flip_complete)(struct intel_overlay *ovl);
};
-static void i830_overlay_clock_gating(struct intel_display *display,
+static void i830_overlay_clock_gating(struct drm_i915_private *i915,
bool enable)
{
- struct pci_dev *pdev = to_pci_dev(display->drm->dev);
+ struct pci_dev *pdev = to_pci_dev(i915->drm.dev);
u8 val;
- /* WA_OVERLAY_CLKGATE:alm */
+ /*
+ * WA_OVERLAY_CLKGATE:alm
+ *
+ * FIXME should perhaps be done on the display side?
+ */
if (enable)
- intel_de_write(display, DSPCLK_GATE_D, 0);
+ intel_uncore_write(&i915->uncore, DSPCLK_GATE_D, 0);
else
- intel_de_write(display, DSPCLK_GATE_D, OVRUNIT_CLOCK_GATE_DISABLE);
+ intel_uncore_write(&i915->uncore, DSPCLK_GATE_D, OVRUNIT_CLOCK_GATE_DISABLE);
/* WA_DISABLE_L2CACHE_CLOCK_GATING:alm */
pci_bus_read_config_byte(pdev->bus,
@@ -266,6 +270,7 @@ static bool i915_overlay_is_active(struct drm_device *drm)
static int i915_overlay_on(struct drm_device *drm,
u32 frontbuffer_bits)
{
+ struct drm_i915_private *i915 = to_i915(drm);
struct intel_display *display = to_intel_display(drm);
struct intel_overlay *overlay = display->overlay;
struct i915_request *rq;
@@ -285,8 +290,8 @@ static int i915_overlay_on(struct drm_device *drm,
overlay->frontbuffer_bits = frontbuffer_bits;
- if (display->platform.i830)
- i830_overlay_clock_gating(display, false);
+ if (IS_I830(i915))
+ i830_overlay_clock_gating(i915, false);
*cs++ = MI_OVERLAY_FLIP | MI_OVERLAY_ON;
*cs++ = overlay->flip_addr | OFC_UPDATE;
@@ -383,13 +388,14 @@ static void i915_overlay_release_old_vid_tail(struct intel_overlay *overlay)
static void i915_overlay_off_tail(struct intel_overlay *overlay)
{
struct intel_display *display = overlay->display;
+ struct drm_i915_private *i915 = to_i915(display->drm);
i915_overlay_release_old_vma(overlay);
overlay->frontbuffer_bits = 0;
- if (display->platform.i830)
- i830_overlay_clock_gating(display, true);
+ if (IS_I830(i915))
+ i830_overlay_clock_gating(i915, true);
}
static void i915_overlay_last_flip_retire(struct i915_active *active)
--
2.52.0
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PATCH 15/19] drm/i915/overlay: s/dev_priv/i915/
2026-02-18 15:27 [PATCH 00/19] drm/i915/overlay: Convert to parent interface Ville Syrjala
` (13 preceding siblings ...)
2026-02-18 15:28 ` [PATCH 14/19] drm/i915/overlay: Make i830_overlay_clock_gating() i915 specific Ville Syrjala
@ 2026-02-18 15:28 ` Ville Syrjala
2026-02-18 15:28 ` [PATCH 16/19] drm/i915/overlay: Split 'struct intel_overlay' Ville Syrjala
` (9 subsequent siblings)
24 siblings, 0 replies; 31+ messages in thread
From: Ville Syrjala @ 2026-02-18 15:28 UTC (permalink / raw)
To: intel-gfx; +Cc: intel-xe
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
Rename the one lingering 'dev_priv' variable to the
more modern 'i915' in the overlay code.
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
drivers/gpu/drm/i915/display/intel_overlay.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_overlay.c b/drivers/gpu/drm/i915/display/intel_overlay.c
index 1b792926e076..04e9ee278cd2 100644
--- a/drivers/gpu/drm/i915/display/intel_overlay.c
+++ b/drivers/gpu/drm/i915/display/intel_overlay.c
@@ -1456,10 +1456,10 @@ static int i915_overlay_setup(struct drm_device *drm,
struct intel_overlay *overlay,
bool needs_physical)
{
- struct drm_i915_private *dev_priv = to_i915(drm);
+ struct drm_i915_private *i915 = to_i915(drm);
struct intel_engine_cs *engine;
- engine = to_gt(dev_priv)->engine[RCS0];
+ engine = to_gt(i915)->engine[RCS0];
if (!engine || !engine->kernel_context)
return -ENOENT;
--
2.52.0
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PATCH 16/19] drm/i915/overlay: Split 'struct intel_overlay'
2026-02-18 15:27 [PATCH 00/19] drm/i915/overlay: Convert to parent interface Ville Syrjala
` (14 preceding siblings ...)
2026-02-18 15:28 ` [PATCH 15/19] drm/i915/overlay: s/dev_priv/i915/ Ville Syrjala
@ 2026-02-18 15:28 ` Ville Syrjala
2026-02-18 15:28 ` [PATCH 17/19] drm/i915/overlay: Don't use fetch_and_zero() in display code Ville Syrjala
` (8 subsequent siblings)
24 siblings, 0 replies; 31+ messages in thread
From: Ville Syrjala @ 2026-02-18 15:28 UTC (permalink / raw)
To: intel-gfx; +Cc: intel-xe
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
Split the i915 driver specific bits from 'struct intel_overlay'
into a seaarate 'struct i915_overlay'. The latter will move to
the i915 side of the parent vs. display driver split.
The display side will also need to know the virtual address of
the register map. That now gets passed as the return value
from i915_overlay_setup(), so that the display side doesn't
need to know how the mapping was achieved.
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
drivers/gpu/drm/i915/display/intel_overlay.c | 130 +++++++++++--------
drivers/gpu/drm/i915/i915_drv.h | 3 +
2 files changed, 81 insertions(+), 52 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_overlay.c b/drivers/gpu/drm/i915/display/intel_overlay.c
index 04e9ee278cd2..8b06c2cff7f2 100644
--- a/drivers/gpu/drm/i915/display/intel_overlay.c
+++ b/drivers/gpu/drm/i915/display/intel_overlay.c
@@ -187,27 +187,32 @@ struct overlay_registers {
u16 RESERVEDG[0x100 / 2 - N_HORIZ_UV_TAPS * N_PHASES];
};
-struct intel_overlay {
- struct intel_display *display;
+struct i915_overlay {
+ struct drm_i915_private *i915;
struct intel_context *context;
- struct intel_crtc *crtc;
struct i915_vma *vma;
struct i915_vma *old_vma;
struct intel_frontbuffer *frontbuffer;
+ /* register access */
+ struct drm_i915_gem_object *reg_bo;
+ void __iomem *regs;
+ u32 flip_addr;
+ u32 frontbuffer_bits;
+ /* flip handling */
+ struct i915_active last_flip;
+ void (*flip_complete)(struct i915_overlay *overlay);
+};
+
+struct intel_overlay {
+ struct intel_display *display;
+ struct intel_crtc *crtc;
bool pfit_active;
u32 pfit_vscale_ratio; /* shifted-point number, (1<<12) == 1.0 */
u32 color_key:24;
u32 color_key_enabled:1;
u32 brightness, contrast, saturation;
u32 old_xscale, old_yscale;
- /* register access */
- struct drm_i915_gem_object *reg_bo;
struct overlay_registers __iomem *regs;
- u32 flip_addr;
- u32 frontbuffer_bits;
- /* flip handling */
- struct i915_active last_flip;
- void (*flip_complete)(struct intel_overlay *ovl);
};
static void i830_overlay_clock_gating(struct drm_i915_private *i915,
@@ -238,7 +243,7 @@ static void i830_overlay_clock_gating(struct drm_i915_private *i915,
}
static struct i915_request *
-alloc_request(struct intel_overlay *overlay, void (*fn)(struct intel_overlay *))
+alloc_request(struct i915_overlay *overlay, void (*fn)(struct i915_overlay *))
{
struct i915_request *rq;
int err;
@@ -260,8 +265,8 @@ alloc_request(struct intel_overlay *overlay, void (*fn)(struct intel_overlay *))
static bool i915_overlay_is_active(struct drm_device *drm)
{
- struct intel_display *display = to_intel_display(drm);
- struct intel_overlay *overlay = display->overlay;
+ struct drm_i915_private *i915 = to_i915(drm);
+ struct i915_overlay *overlay = i915->overlay;
return overlay->frontbuffer_bits;
}
@@ -271,8 +276,7 @@ static int i915_overlay_on(struct drm_device *drm,
u32 frontbuffer_bits)
{
struct drm_i915_private *i915 = to_i915(drm);
- struct intel_display *display = to_intel_display(drm);
- struct intel_overlay *overlay = display->overlay;
+ struct i915_overlay *overlay = i915->overlay;
struct i915_request *rq;
u32 *cs;
@@ -304,13 +308,13 @@ static int i915_overlay_on(struct drm_device *drm,
return i915_active_wait(&overlay->last_flip);
}
-static void i915_overlay_flip_prepare(struct intel_overlay *overlay,
+static void i915_overlay_flip_prepare(struct i915_overlay *overlay,
struct i915_vma *vma)
{
- struct intel_display *display = overlay->display;
+ struct drm_i915_private *i915 = overlay->i915;
struct intel_frontbuffer *frontbuffer = NULL;
- drm_WARN_ON(display->drm, overlay->old_vma);
+ drm_WARN_ON(&i915->drm, overlay->old_vma);
if (vma)
frontbuffer = intel_frontbuffer_get(intel_bo_to_drm_bo(vma->obj));
@@ -334,8 +338,8 @@ static int i915_overlay_continue(struct drm_device *drm,
struct i915_vma *vma,
bool load_polyphase_filter)
{
- struct intel_display *display = to_intel_display(drm);
- struct intel_overlay *overlay = display->overlay;
+ struct drm_i915_private *i915 = to_i915(drm);
+ struct i915_overlay *overlay = i915->overlay;
struct i915_request *rq;
u32 flip_addr = overlay->flip_addr;
u32 *cs;
@@ -365,13 +369,14 @@ static int i915_overlay_continue(struct drm_device *drm,
return 0;
}
-static void i915_overlay_release_old_vma(struct intel_overlay *overlay)
+static void i915_overlay_release_old_vma(struct i915_overlay *overlay)
{
- struct intel_display *display = overlay->display;
+ struct drm_i915_private *i915 = overlay->i915;
+ struct intel_display *display = i915->display;
struct i915_vma *vma;
vma = fetch_and_zero(&overlay->old_vma);
- if (drm_WARN_ON(display->drm, !vma))
+ if (drm_WARN_ON(&i915->drm, !vma))
return;
intel_frontbuffer_flip(display, overlay->frontbuffer_bits);
@@ -380,15 +385,14 @@ static void i915_overlay_release_old_vma(struct intel_overlay *overlay)
i915_vma_put(vma);
}
-static void i915_overlay_release_old_vid_tail(struct intel_overlay *overlay)
+static void i915_overlay_release_old_vid_tail(struct i915_overlay *overlay)
{
i915_overlay_release_old_vma(overlay);
}
-static void i915_overlay_off_tail(struct intel_overlay *overlay)
+static void i915_overlay_off_tail(struct i915_overlay *overlay)
{
- struct intel_display *display = overlay->display;
- struct drm_i915_private *i915 = to_i915(display->drm);
+ struct drm_i915_private *i915 = overlay->i915;
i915_overlay_release_old_vma(overlay);
@@ -400,7 +404,7 @@ static void i915_overlay_off_tail(struct intel_overlay *overlay)
static void i915_overlay_last_flip_retire(struct i915_active *active)
{
- struct intel_overlay *overlay =
+ struct i915_overlay *overlay =
container_of(active, typeof(*overlay), last_flip);
if (overlay->flip_complete)
@@ -410,8 +414,8 @@ static void i915_overlay_last_flip_retire(struct i915_active *active)
/* overlay needs to be disabled in OCMD reg */
static int i915_overlay_off(struct drm_device *drm)
{
- struct intel_display *display = to_intel_display(drm);
- struct intel_overlay *overlay = display->overlay;
+ struct drm_i915_private *i915 = to_i915(drm);
+ struct i915_overlay *overlay = i915->overlay;
struct i915_request *rq;
u32 *cs, flip_addr = overlay->flip_addr;
@@ -459,8 +463,8 @@ static int i915_overlay_off(struct drm_device *drm)
*/
static int i915_overlay_recover_from_interrupt(struct drm_device *drm)
{
- struct intel_display *display = to_intel_display(drm);
- struct intel_overlay *overlay = display->overlay;
+ struct drm_i915_private *i915 = to_i915(drm);
+ struct i915_overlay *overlay = i915->overlay;
return i915_active_wait(&overlay->last_flip);
}
@@ -472,8 +476,8 @@ static int i915_overlay_recover_from_interrupt(struct drm_device *drm)
*/
static int i915_overlay_release_old_vid(struct drm_device *drm)
{
- struct intel_display *display = to_intel_display(drm);
- struct intel_overlay *overlay = display->overlay;
+ struct drm_i915_private *i915 = to_i915(drm);
+ struct i915_overlay *overlay = i915->overlay;
struct i915_request *rq;
u32 *cs;
@@ -484,7 +488,7 @@ static int i915_overlay_release_old_vid(struct drm_device *drm)
if (!overlay->old_vma)
return 0;
- if (!(intel_de_read(display, GEN2_ISR) & I915_OVERLAY_PLANE_FLIP_PENDING_INTERRUPT)) {
+ if (!(intel_uncore_read(&i915->uncore, GEN2_ISR) & I915_OVERLAY_PLANE_FLIP_PENDING_INTERRUPT)) {
i915_overlay_release_old_vid_tail(overlay);
return 0;
}
@@ -510,8 +514,8 @@ static int i915_overlay_release_old_vid(struct drm_device *drm)
static void i915_overlay_reset(struct drm_device *drm)
{
- struct intel_display *display = to_intel_display(drm);
- struct intel_overlay *overlay = display->overlay;
+ struct drm_i915_private *i915 = to_i915(drm);
+ struct i915_overlay *overlay = i915->overlay;
if (!overlay)
return;
@@ -1412,10 +1416,9 @@ int intel_overlay_attrs_ioctl(struct drm_device *dev, void *data,
return ret;
}
-static int get_registers(struct intel_overlay *overlay, bool use_phys)
+static int get_registers(struct i915_overlay *overlay, bool use_phys)
{
- struct intel_display *display = overlay->display;
- struct drm_i915_private *i915 = to_i915(display->drm);
+ struct drm_i915_private *i915 = overlay->i915;
struct drm_i915_gem_object *obj;
struct i915_vma *vma;
int err;
@@ -1452,29 +1455,43 @@ static int get_registers(struct intel_overlay *overlay, bool use_phys)
return err;
}
-static int i915_overlay_setup(struct drm_device *drm,
- struct intel_overlay *overlay,
- bool needs_physical)
+static void __iomem *i915_overlay_setup(struct drm_device *drm,
+ bool needs_physical)
{
struct drm_i915_private *i915 = to_i915(drm);
struct intel_engine_cs *engine;
+ struct i915_overlay *overlay;
+ int ret;
engine = to_gt(i915)->engine[RCS0];
if (!engine || !engine->kernel_context)
- return -ENOENT;
+ return ERR_PTR(-ENOENT);
+ overlay = kzalloc(sizeof(*overlay), GFP_KERNEL);
+ if (!overlay)
+ return ERR_PTR(-ENOMEM);
+
+ overlay->i915 = i915;
overlay->context = engine->kernel_context;
i915_active_init(&overlay->last_flip,
NULL, i915_overlay_last_flip_retire, 0);
- return get_registers(overlay, needs_physical);
+ ret = get_registers(overlay, needs_physical);
+ if (ret) {
+ kfree(overlay);
+ return ERR_PTR(ret);
+ }
+
+ i915->overlay = overlay;
+
+ return overlay->regs;
}
void intel_overlay_setup(struct intel_display *display)
{
struct intel_overlay *overlay;
- int ret;
+ void __iomem *regs;
if (!HAS_OVERLAY(display))
return;
@@ -1483,12 +1500,13 @@ void intel_overlay_setup(struct intel_display *display)
if (!overlay)
return;
- ret = i915_overlay_setup(display->drm, overlay,
- OVERLAY_NEEDS_PHYSICAL(display));
- if (ret)
+ regs = i915_overlay_setup(display->drm,
+ OVERLAY_NEEDS_PHYSICAL(display));
+ if (IS_ERR(regs))
goto out_free;
overlay->display = display;
+ overlay->regs = regs;
overlay->color_key = 0x0101fe;
overlay->color_key_enabled = true;
overlay->brightness = -19;
@@ -1512,9 +1530,15 @@ bool intel_overlay_available(struct intel_display *display)
return display->overlay;
}
-static void i915_overlay_cleanup(struct drm_device *drm,
- struct intel_overlay *overlay)
+static void i915_overlay_cleanup(struct drm_device *drm)
{
+ struct drm_i915_private *i915 = to_i915(drm);
+ struct i915_overlay *overlay;
+
+ overlay = fetch_and_zero(&i915->overlay);
+ if (!overlay)
+ return;
+
/*
* The bo's should be free'd by the generic code already.
* Furthermore modesetting teardown happens beforehand so the
@@ -1524,6 +1548,8 @@ static void i915_overlay_cleanup(struct drm_device *drm,
i915_gem_object_put(overlay->reg_bo);
i915_active_fini(&overlay->last_flip);
+
+ kfree(overlay);
}
void intel_overlay_cleanup(struct intel_display *display)
@@ -1534,7 +1560,7 @@ void intel_overlay_cleanup(struct intel_display *display)
if (!overlay)
return;
- i915_overlay_cleanup(display->drm, overlay);
+ i915_overlay_cleanup(display->drm);
kfree(overlay);
}
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 44ba620325bc..dd380382c00e 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -61,6 +61,7 @@
#include "intel_uncore.h"
struct drm_i915_clock_gating_funcs;
+struct i915_overlay;
struct intel_display;
struct intel_pxp;
struct vlv_s0ix_state;
@@ -307,6 +308,8 @@ struct drm_i915_private {
struct intel_pxp *pxp;
+ struct i915_overlay *overlay;
+
struct i915_pmu pmu;
/* The TTM device structure. */
--
2.52.0
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PATCH 17/19] drm/i915/overlay: Don't use fetch_and_zero() in display code
2026-02-18 15:27 [PATCH 00/19] drm/i915/overlay: Convert to parent interface Ville Syrjala
` (15 preceding siblings ...)
2026-02-18 15:28 ` [PATCH 16/19] drm/i915/overlay: Split 'struct intel_overlay' Ville Syrjala
@ 2026-02-18 15:28 ` Ville Syrjala
2026-02-25 9:47 ` Jani Nikula
2026-02-18 15:28 ` [PATCH 18/19] drm/i915/overlay: Move i915 specific code into i915_overlay.c Ville Syrjala
` (7 subsequent siblings)
24 siblings, 1 reply; 31+ messages in thread
From: Ville Syrjala @ 2026-02-18 15:28 UTC (permalink / raw)
To: intel-gfx; +Cc: intel-xe
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
We don't have fetch_and_zero() on the display side, so stop
using it in the display side intel_overlay_cleanup(). Fortunately
we don't really have anything to do here apart from freeing the
data. And we'll keep on clearing the pointer, just in case something
somewhere cares about it.
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
drivers/gpu/drm/i915/display/intel_overlay.c | 9 ++-------
1 file changed, 2 insertions(+), 7 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_overlay.c b/drivers/gpu/drm/i915/display/intel_overlay.c
index 8b06c2cff7f2..6a2af1f356ed 100644
--- a/drivers/gpu/drm/i915/display/intel_overlay.c
+++ b/drivers/gpu/drm/i915/display/intel_overlay.c
@@ -1554,13 +1554,8 @@ static void i915_overlay_cleanup(struct drm_device *drm)
void intel_overlay_cleanup(struct intel_display *display)
{
- struct intel_overlay *overlay;
-
- overlay = fetch_and_zero(&display->overlay);
- if (!overlay)
- return;
-
i915_overlay_cleanup(display->drm);
- kfree(overlay);
+ kfree(display->overlay);
+ display->overlay = NULL;
}
--
2.52.0
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PATCH 18/19] drm/i915/overlay: Move i915 specific code into i915_overlay.c
2026-02-18 15:27 [PATCH 00/19] drm/i915/overlay: Convert to parent interface Ville Syrjala
` (16 preceding siblings ...)
2026-02-18 15:28 ` [PATCH 17/19] drm/i915/overlay: Don't use fetch_and_zero() in display code Ville Syrjala
@ 2026-02-18 15:28 ` Ville Syrjala
2026-02-18 15:28 ` [PATCH 19/19] drm/i915/overlay: Convert overlay to parent interface Ville Syrjala
` (6 subsequent siblings)
24 siblings, 0 replies; 31+ messages in thread
From: Ville Syrjala @ 2026-02-18 15:28 UTC (permalink / raw)
To: intel-gfx; +Cc: intel-xe
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
Relocate the i915 driver specific parts of the overlay code
into i915_overlay.c. This leaves intel_overlay.c with just
the display specific code.
The one annoyance here is the DSPCLK_GATE_D register access
being done from i830_overlay_clock_gating(). The register
definition lives on the display side as we do need to access
it on other platforms there. Since it's just one register
and bit, I decided to just duplicate that part in i915_reg.h.
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
drivers/gpu/drm/i915/Makefile | 1 +
.../gpu/drm/i915/display/intel_display_regs.h | 2 -
drivers/gpu/drm/i915/display/intel_overlay.c | 490 +----------------
drivers/gpu/drm/i915/i915_overlay.c | 500 ++++++++++++++++++
drivers/gpu/drm/i915/i915_overlay.h | 43 ++
drivers/gpu/drm/i915/i915_reg.h | 4 +
6 files changed, 550 insertions(+), 490 deletions(-)
create mode 100644 drivers/gpu/drm/i915/i915_overlay.c
create mode 100644 drivers/gpu/drm/i915/i915_overlay.h
diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile
index 7d726e8c21bf..f731b9a44b3f 100644
--- a/drivers/gpu/drm/i915/Makefile
+++ b/drivers/gpu/drm/i915/Makefile
@@ -80,6 +80,7 @@ i915-y += \
i915_dsb_buffer.o \
i915_hdcp_gsc.o \
i915_initial_plane.o \
+ i915_overlay.o \
i915_panic.o
# "Graphics Technology" (aka we talk to the gpu)
diff --git a/drivers/gpu/drm/i915/display/intel_display_regs.h b/drivers/gpu/drm/i915/display/intel_display_regs.h
index 49e2a9e3ee0e..4746e9ebd920 100644
--- a/drivers/gpu/drm/i915/display/intel_display_regs.h
+++ b/drivers/gpu/drm/i915/display/intel_display_regs.h
@@ -117,8 +117,6 @@
#define VLV_ERROR_PAGE_TABLE (1 << 4)
#define VLV_ERROR_CLAIM (1 << 0)
-#define GEN2_ISR _MMIO(0x20ac)
-
#define VLV_ERROR_REGS I915_ERROR_REGS(VLV_EMR, VLV_EIR)
#define _MBUS_ABOX0_CTL 0x45038
diff --git a/drivers/gpu/drm/i915/display/intel_overlay.c b/drivers/gpu/drm/i915/display/intel_overlay.c
index 6a2af1f356ed..bc7e2b3cbda1 100644
--- a/drivers/gpu/drm/i915/display/intel_overlay.c
+++ b/drivers/gpu/drm/i915/display/intel_overlay.c
@@ -27,24 +27,16 @@
*/
#include <drm/drm_fourcc.h>
+#include <drm/drm_gem.h>
#include <drm/drm_print.h>
-#include <drm/intel/intel_gmd_interrupt_regs.h>
-#include "gem/i915_gem_internal.h"
-#include "gem/i915_gem_object_frontbuffer.h"
-#include "gem/i915_gem_pm.h"
-
-#include "gt/intel_gpu_commands.h"
-#include "gt/intel_ring.h"
-
-#include "i915_drv.h"
+#include "i915_overlay.h"
#include "intel_color_regs.h"
#include "intel_de.h"
#include "intel_display_regs.h"
#include "intel_display_types.h"
#include "intel_frontbuffer.h"
#include "intel_overlay.h"
-#include "intel_pci_config.h"
#include "intel_pfit_regs.h"
/* Limits for overlay size. According to intel doc, the real limits are:
@@ -121,9 +113,6 @@
#define RGB8I_TO_COLORKEY(c) \
((((c) & 0xff) << 16) | (((c) & 0xff) << 8) | (((c) & 0xff) << 0))
-/* overlay flip addr flag */
-#define OFC_UPDATE 0x1
-
/* polyphase filter coefficients */
#define N_HORIZ_Y_TAPS 5
#define N_VERT_Y_TAPS 3
@@ -187,22 +176,6 @@ struct overlay_registers {
u16 RESERVEDG[0x100 / 2 - N_HORIZ_UV_TAPS * N_PHASES];
};
-struct i915_overlay {
- struct drm_i915_private *i915;
- struct intel_context *context;
- struct i915_vma *vma;
- struct i915_vma *old_vma;
- struct intel_frontbuffer *frontbuffer;
- /* register access */
- struct drm_i915_gem_object *reg_bo;
- void __iomem *regs;
- u32 flip_addr;
- u32 frontbuffer_bits;
- /* flip handling */
- struct i915_active last_flip;
- void (*flip_complete)(struct i915_overlay *overlay);
-};
-
struct intel_overlay {
struct intel_display *display;
struct intel_crtc *crtc;
@@ -215,314 +188,6 @@ struct intel_overlay {
struct overlay_registers __iomem *regs;
};
-static void i830_overlay_clock_gating(struct drm_i915_private *i915,
- bool enable)
-{
- struct pci_dev *pdev = to_pci_dev(i915->drm.dev);
- u8 val;
-
- /*
- * WA_OVERLAY_CLKGATE:alm
- *
- * FIXME should perhaps be done on the display side?
- */
- if (enable)
- intel_uncore_write(&i915->uncore, DSPCLK_GATE_D, 0);
- else
- intel_uncore_write(&i915->uncore, DSPCLK_GATE_D, OVRUNIT_CLOCK_GATE_DISABLE);
-
- /* WA_DISABLE_L2CACHE_CLOCK_GATING:alm */
- pci_bus_read_config_byte(pdev->bus,
- PCI_DEVFN(0, 0), I830_CLOCK_GATE, &val);
- if (enable)
- val &= ~I830_L2_CACHE_CLOCK_GATE_DISABLE;
- else
- val |= I830_L2_CACHE_CLOCK_GATE_DISABLE;
- pci_bus_write_config_byte(pdev->bus,
- PCI_DEVFN(0, 0), I830_CLOCK_GATE, val);
-}
-
-static struct i915_request *
-alloc_request(struct i915_overlay *overlay, void (*fn)(struct i915_overlay *))
-{
- struct i915_request *rq;
- int err;
-
- overlay->flip_complete = fn;
-
- rq = i915_request_create(overlay->context);
- if (IS_ERR(rq))
- return rq;
-
- err = i915_active_add_request(&overlay->last_flip, rq);
- if (err) {
- i915_request_add(rq);
- return ERR_PTR(err);
- }
-
- return rq;
-}
-
-static bool i915_overlay_is_active(struct drm_device *drm)
-{
- struct drm_i915_private *i915 = to_i915(drm);
- struct i915_overlay *overlay = i915->overlay;
-
- return overlay->frontbuffer_bits;
-}
-
-/* overlay needs to be disable in OCMD reg */
-static int i915_overlay_on(struct drm_device *drm,
- u32 frontbuffer_bits)
-{
- struct drm_i915_private *i915 = to_i915(drm);
- struct i915_overlay *overlay = i915->overlay;
- struct i915_request *rq;
- u32 *cs;
-
- drm_WARN_ON(drm, i915_overlay_is_active(drm));
-
- rq = alloc_request(overlay, NULL);
- if (IS_ERR(rq))
- return PTR_ERR(rq);
-
- cs = intel_ring_begin(rq, 4);
- if (IS_ERR(cs)) {
- i915_request_add(rq);
- return PTR_ERR(cs);
- }
-
- overlay->frontbuffer_bits = frontbuffer_bits;
-
- if (IS_I830(i915))
- i830_overlay_clock_gating(i915, false);
-
- *cs++ = MI_OVERLAY_FLIP | MI_OVERLAY_ON;
- *cs++ = overlay->flip_addr | OFC_UPDATE;
- *cs++ = MI_WAIT_FOR_EVENT | MI_WAIT_FOR_OVERLAY_FLIP;
- *cs++ = MI_NOOP;
- intel_ring_advance(rq, cs);
-
- i915_request_add(rq);
-
- return i915_active_wait(&overlay->last_flip);
-}
-
-static void i915_overlay_flip_prepare(struct i915_overlay *overlay,
- struct i915_vma *vma)
-{
- struct drm_i915_private *i915 = overlay->i915;
- struct intel_frontbuffer *frontbuffer = NULL;
-
- drm_WARN_ON(&i915->drm, overlay->old_vma);
-
- if (vma)
- frontbuffer = intel_frontbuffer_get(intel_bo_to_drm_bo(vma->obj));
-
- intel_frontbuffer_track(overlay->frontbuffer, frontbuffer,
- overlay->frontbuffer_bits);
-
- if (overlay->frontbuffer)
- intel_frontbuffer_put(overlay->frontbuffer);
- overlay->frontbuffer = frontbuffer;
-
- overlay->old_vma = overlay->vma;
- if (vma)
- overlay->vma = i915_vma_get(vma);
- else
- overlay->vma = NULL;
-}
-
-/* overlay needs to be enabled in OCMD reg */
-static int i915_overlay_continue(struct drm_device *drm,
- struct i915_vma *vma,
- bool load_polyphase_filter)
-{
- struct drm_i915_private *i915 = to_i915(drm);
- struct i915_overlay *overlay = i915->overlay;
- struct i915_request *rq;
- u32 flip_addr = overlay->flip_addr;
- u32 *cs;
-
- drm_WARN_ON(drm, !i915_overlay_is_active(drm));
-
- if (load_polyphase_filter)
- flip_addr |= OFC_UPDATE;
-
- rq = alloc_request(overlay, NULL);
- if (IS_ERR(rq))
- return PTR_ERR(rq);
-
- cs = intel_ring_begin(rq, 2);
- if (IS_ERR(cs)) {
- i915_request_add(rq);
- return PTR_ERR(cs);
- }
-
- *cs++ = MI_OVERLAY_FLIP | MI_OVERLAY_CONTINUE;
- *cs++ = flip_addr;
- intel_ring_advance(rq, cs);
-
- i915_overlay_flip_prepare(overlay, vma);
- i915_request_add(rq);
-
- return 0;
-}
-
-static void i915_overlay_release_old_vma(struct i915_overlay *overlay)
-{
- struct drm_i915_private *i915 = overlay->i915;
- struct intel_display *display = i915->display;
- struct i915_vma *vma;
-
- vma = fetch_and_zero(&overlay->old_vma);
- if (drm_WARN_ON(&i915->drm, !vma))
- return;
-
- intel_frontbuffer_flip(display, overlay->frontbuffer_bits);
-
- i915_vma_unpin(vma);
- i915_vma_put(vma);
-}
-
-static void i915_overlay_release_old_vid_tail(struct i915_overlay *overlay)
-{
- i915_overlay_release_old_vma(overlay);
-}
-
-static void i915_overlay_off_tail(struct i915_overlay *overlay)
-{
- struct drm_i915_private *i915 = overlay->i915;
-
- i915_overlay_release_old_vma(overlay);
-
- overlay->frontbuffer_bits = 0;
-
- if (IS_I830(i915))
- i830_overlay_clock_gating(i915, true);
-}
-
-static void i915_overlay_last_flip_retire(struct i915_active *active)
-{
- struct i915_overlay *overlay =
- container_of(active, typeof(*overlay), last_flip);
-
- if (overlay->flip_complete)
- overlay->flip_complete(overlay);
-}
-
-/* overlay needs to be disabled in OCMD reg */
-static int i915_overlay_off(struct drm_device *drm)
-{
- struct drm_i915_private *i915 = to_i915(drm);
- struct i915_overlay *overlay = i915->overlay;
- struct i915_request *rq;
- u32 *cs, flip_addr = overlay->flip_addr;
-
- drm_WARN_ON(drm, !i915_overlay_is_active(drm));
-
- /*
- * According to intel docs the overlay hw may hang (when switching
- * off) without loading the filter coeffs. It is however unclear whether
- * this applies to the disabling of the overlay or to the switching off
- * of the hw. Do it in both cases.
- */
- flip_addr |= OFC_UPDATE;
-
- rq = alloc_request(overlay, i915_overlay_off_tail);
- if (IS_ERR(rq))
- return PTR_ERR(rq);
-
- cs = intel_ring_begin(rq, 6);
- if (IS_ERR(cs)) {
- i915_request_add(rq);
- return PTR_ERR(cs);
- }
-
- /* wait for overlay to go idle */
- *cs++ = MI_OVERLAY_FLIP | MI_OVERLAY_CONTINUE;
- *cs++ = flip_addr;
- *cs++ = MI_WAIT_FOR_EVENT | MI_WAIT_FOR_OVERLAY_FLIP;
-
- /* turn overlay off */
- *cs++ = MI_OVERLAY_FLIP | MI_OVERLAY_OFF;
- *cs++ = flip_addr;
- *cs++ = MI_WAIT_FOR_EVENT | MI_WAIT_FOR_OVERLAY_FLIP;
-
- intel_ring_advance(rq, cs);
-
- i915_overlay_flip_prepare(overlay, NULL);
- i915_request_add(rq);
-
- return i915_active_wait(&overlay->last_flip);
-}
-
-/*
- * Recover from an interruption due to a signal.
- * We have to be careful not to repeat work forever an make forward progress.
- */
-static int i915_overlay_recover_from_interrupt(struct drm_device *drm)
-{
- struct drm_i915_private *i915 = to_i915(drm);
- struct i915_overlay *overlay = i915->overlay;
-
- return i915_active_wait(&overlay->last_flip);
-}
-
-/*
- * Wait for pending overlay flip and release old frame.
- * Needs to be called before the overlay register are changed
- * via intel_overlay_(un)map_regs.
- */
-static int i915_overlay_release_old_vid(struct drm_device *drm)
-{
- struct drm_i915_private *i915 = to_i915(drm);
- struct i915_overlay *overlay = i915->overlay;
- struct i915_request *rq;
- u32 *cs;
-
- /*
- * Only wait if there is actually an old frame to release to
- * guarantee forward progress.
- */
- if (!overlay->old_vma)
- return 0;
-
- if (!(intel_uncore_read(&i915->uncore, GEN2_ISR) & I915_OVERLAY_PLANE_FLIP_PENDING_INTERRUPT)) {
- i915_overlay_release_old_vid_tail(overlay);
- return 0;
- }
-
- rq = alloc_request(overlay, i915_overlay_release_old_vid_tail);
- if (IS_ERR(rq))
- return PTR_ERR(rq);
-
- cs = intel_ring_begin(rq, 2);
- if (IS_ERR(cs)) {
- i915_request_add(rq);
- return PTR_ERR(cs);
- }
-
- *cs++ = MI_WAIT_FOR_EVENT | MI_WAIT_FOR_OVERLAY_FLIP;
- *cs++ = MI_NOOP;
- intel_ring_advance(rq, cs);
-
- i915_request_add(rq);
-
- return i915_active_wait(&overlay->last_flip);
-}
-
-static void i915_overlay_reset(struct drm_device *drm)
-{
- struct drm_i915_private *i915 = to_i915(drm);
- struct i915_overlay *overlay = i915->overlay;
-
- if (!overlay)
- return;
-
- overlay->frontbuffer_bits = 0;
-}
-
void intel_overlay_reset(struct intel_display *display)
{
struct intel_overlay *overlay = display->overlay;
@@ -796,43 +461,6 @@ static u32 overlay_cmd_reg(struct drm_intel_overlay_put_image *params)
return cmd;
}
-static struct i915_vma *i915_overlay_pin_fb(struct drm_device *drm,
- struct drm_gem_object *obj,
- u32 *offset)
-{
- struct drm_i915_gem_object *new_bo = to_intel_bo(obj);
- struct i915_gem_ww_ctx ww;
- struct i915_vma *vma;
- int ret;
-
- i915_gem_ww_ctx_init(&ww, true);
-retry:
- ret = i915_gem_object_lock(new_bo, &ww);
- if (!ret) {
- vma = i915_gem_object_pin_to_display_plane(new_bo, &ww, 0, 0,
- NULL, PIN_MAPPABLE);
- ret = PTR_ERR_OR_ZERO(vma);
- }
- if (ret == -EDEADLK) {
- ret = i915_gem_ww_ctx_backoff(&ww);
- if (!ret)
- goto retry;
- }
- i915_gem_ww_ctx_fini(&ww);
- if (ret)
- return ERR_PTR(ret);
-
- *offset = i915_ggtt_offset(vma);
-
- return vma;
-}
-
-static void i915_overlay_unpin_fb(struct drm_device *drm,
- struct i915_vma *vma)
-{
- i915_vma_unpin(vma);
-}
-
static int intel_overlay_do_put_image(struct intel_overlay *overlay,
struct drm_gem_object *obj,
struct drm_intel_overlay_put_image *params)
@@ -1164,26 +792,6 @@ static int check_overlay_src(struct intel_display *display,
return 0;
}
-static struct drm_gem_object *
-i915_overlay_obj_lookup(struct drm_device *drm,
- struct drm_file *file_priv,
- u32 handle)
-{
- struct drm_i915_gem_object *bo;
-
- bo = i915_gem_object_lookup(file_priv, handle);
- if (!bo)
- return ERR_PTR(-ENOENT);
-
- if (i915_gem_object_is_tiled(bo)) {
- drm_dbg(drm, "buffer used for overlay image can not be tiled\n");
- i915_gem_object_put(bo);
- return ERR_PTR(-EINVAL);
- }
-
- return intel_bo_to_drm_bo(bo);
-}
-
int intel_overlay_put_image_ioctl(struct drm_device *dev, void *data,
struct drm_file *file_priv)
{
@@ -1416,78 +1024,6 @@ int intel_overlay_attrs_ioctl(struct drm_device *dev, void *data,
return ret;
}
-static int get_registers(struct i915_overlay *overlay, bool use_phys)
-{
- struct drm_i915_private *i915 = overlay->i915;
- struct drm_i915_gem_object *obj;
- struct i915_vma *vma;
- int err;
-
- obj = i915_gem_object_create_stolen(i915, PAGE_SIZE);
- if (IS_ERR(obj))
- obj = i915_gem_object_create_internal(i915, PAGE_SIZE);
- if (IS_ERR(obj))
- return PTR_ERR(obj);
-
- vma = i915_gem_object_ggtt_pin(obj, NULL, 0, 0, PIN_MAPPABLE);
- if (IS_ERR(vma)) {
- err = PTR_ERR(vma);
- goto err_put_bo;
- }
-
- if (use_phys)
- overlay->flip_addr = sg_dma_address(obj->mm.pages->sgl);
- else
- overlay->flip_addr = i915_ggtt_offset(vma);
- overlay->regs = i915_vma_pin_iomap(vma);
- i915_vma_unpin(vma);
-
- if (IS_ERR(overlay->regs)) {
- err = PTR_ERR(overlay->regs);
- goto err_put_bo;
- }
-
- overlay->reg_bo = obj;
- return 0;
-
-err_put_bo:
- i915_gem_object_put(obj);
- return err;
-}
-
-static void __iomem *i915_overlay_setup(struct drm_device *drm,
- bool needs_physical)
-{
- struct drm_i915_private *i915 = to_i915(drm);
- struct intel_engine_cs *engine;
- struct i915_overlay *overlay;
- int ret;
-
- engine = to_gt(i915)->engine[RCS0];
- if (!engine || !engine->kernel_context)
- return ERR_PTR(-ENOENT);
-
- overlay = kzalloc(sizeof(*overlay), GFP_KERNEL);
- if (!overlay)
- return ERR_PTR(-ENOMEM);
-
- overlay->i915 = i915;
- overlay->context = engine->kernel_context;
-
- i915_active_init(&overlay->last_flip,
- NULL, i915_overlay_last_flip_retire, 0);
-
- ret = get_registers(overlay, needs_physical);
- if (ret) {
- kfree(overlay);
- return ERR_PTR(ret);
- }
-
- i915->overlay = overlay;
-
- return overlay->regs;
-}
-
void intel_overlay_setup(struct intel_display *display)
{
struct intel_overlay *overlay;
@@ -1530,28 +1066,6 @@ bool intel_overlay_available(struct intel_display *display)
return display->overlay;
}
-static void i915_overlay_cleanup(struct drm_device *drm)
-{
- struct drm_i915_private *i915 = to_i915(drm);
- struct i915_overlay *overlay;
-
- overlay = fetch_and_zero(&i915->overlay);
- if (!overlay)
- return;
-
- /*
- * The bo's should be free'd by the generic code already.
- * Furthermore modesetting teardown happens beforehand so the
- * hardware should be off already.
- */
- drm_WARN_ON(drm, i915_overlay_is_active(drm));
-
- i915_gem_object_put(overlay->reg_bo);
- i915_active_fini(&overlay->last_flip);
-
- kfree(overlay);
-}
-
void intel_overlay_cleanup(struct intel_display *display)
{
i915_overlay_cleanup(display->drm);
diff --git a/drivers/gpu/drm/i915/i915_overlay.c b/drivers/gpu/drm/i915/i915_overlay.c
new file mode 100644
index 000000000000..e87b0a4f7ef4
--- /dev/null
+++ b/drivers/gpu/drm/i915/i915_overlay.c
@@ -0,0 +1,500 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright 2026, Intel Corporation.
+ */
+
+#include <drm/drm_print.h>
+
+#include <drm/intel/intel_gmd_interrupt_regs.h>
+
+#include "gem/i915_gem_internal.h"
+#include "gem/i915_gem_object_frontbuffer.h"
+#include "gem/i915_gem_pm.h"
+
+#include "gt/intel_gpu_commands.h"
+#include "gt/intel_ring.h"
+
+#include "i915_drv.h"
+#include "i915_overlay.h"
+#include "i915_reg.h"
+#include "intel_pci_config.h"
+
+#include "display/intel_frontbuffer.h"
+
+/* overlay flip addr flag */
+#define OFC_UPDATE 0x1
+
+struct i915_overlay {
+ struct drm_i915_private *i915;
+ struct intel_context *context;
+ struct i915_vma *vma;
+ struct i915_vma *old_vma;
+ struct intel_frontbuffer *frontbuffer;
+ /* register access */
+ struct drm_i915_gem_object *reg_bo;
+ void __iomem *regs;
+ u32 flip_addr;
+ u32 frontbuffer_bits;
+ /* flip handling */
+ struct i915_active last_flip;
+ void (*flip_complete)(struct i915_overlay *overlay);
+};
+
+static void i830_overlay_clock_gating(struct drm_i915_private *i915,
+ bool enable)
+{
+ struct pci_dev *pdev = to_pci_dev(i915->drm.dev);
+ u8 val;
+
+ /*
+ * WA_OVERLAY_CLKGATE:alm
+ *
+ * FIXME should perhaps be done on the display side?
+ */
+ if (enable)
+ intel_uncore_write(&i915->uncore, DSPCLK_GATE_D, 0);
+ else
+ intel_uncore_write(&i915->uncore, DSPCLK_GATE_D, OVRUNIT_CLOCK_GATE_DISABLE);
+
+ /* WA_DISABLE_L2CACHE_CLOCK_GATING:alm */
+ pci_bus_read_config_byte(pdev->bus,
+ PCI_DEVFN(0, 0), I830_CLOCK_GATE, &val);
+ if (enable)
+ val &= ~I830_L2_CACHE_CLOCK_GATE_DISABLE;
+ else
+ val |= I830_L2_CACHE_CLOCK_GATE_DISABLE;
+ pci_bus_write_config_byte(pdev->bus,
+ PCI_DEVFN(0, 0), I830_CLOCK_GATE, val);
+}
+
+static struct i915_request *
+alloc_request(struct i915_overlay *overlay, void (*fn)(struct i915_overlay *))
+{
+ struct i915_request *rq;
+ int err;
+
+ overlay->flip_complete = fn;
+
+ rq = i915_request_create(overlay->context);
+ if (IS_ERR(rq))
+ return rq;
+
+ err = i915_active_add_request(&overlay->last_flip, rq);
+ if (err) {
+ i915_request_add(rq);
+ return ERR_PTR(err);
+ }
+
+ return rq;
+}
+
+bool i915_overlay_is_active(struct drm_device *drm)
+{
+ struct drm_i915_private *i915 = to_i915(drm);
+ struct i915_overlay *overlay = i915->overlay;
+
+ return overlay->frontbuffer_bits;
+}
+
+/* overlay needs to be disable in OCMD reg */
+int i915_overlay_on(struct drm_device *drm,
+ u32 frontbuffer_bits)
+{
+ struct drm_i915_private *i915 = to_i915(drm);
+ struct i915_overlay *overlay = i915->overlay;
+ struct i915_request *rq;
+ u32 *cs;
+
+ drm_WARN_ON(drm, i915_overlay_is_active(drm));
+
+ rq = alloc_request(overlay, NULL);
+ if (IS_ERR(rq))
+ return PTR_ERR(rq);
+
+ cs = intel_ring_begin(rq, 4);
+ if (IS_ERR(cs)) {
+ i915_request_add(rq);
+ return PTR_ERR(cs);
+ }
+
+ overlay->frontbuffer_bits = frontbuffer_bits;
+
+ if (IS_I830(i915))
+ i830_overlay_clock_gating(i915, false);
+
+ *cs++ = MI_OVERLAY_FLIP | MI_OVERLAY_ON;
+ *cs++ = overlay->flip_addr | OFC_UPDATE;
+ *cs++ = MI_WAIT_FOR_EVENT | MI_WAIT_FOR_OVERLAY_FLIP;
+ *cs++ = MI_NOOP;
+ intel_ring_advance(rq, cs);
+
+ i915_request_add(rq);
+
+ return i915_active_wait(&overlay->last_flip);
+}
+
+static void i915_overlay_flip_prepare(struct i915_overlay *overlay,
+ struct i915_vma *vma)
+{
+ struct drm_i915_private *i915 = overlay->i915;
+ struct intel_frontbuffer *frontbuffer = NULL;
+
+ drm_WARN_ON(&i915->drm, overlay->old_vma);
+
+ if (vma)
+ frontbuffer = intel_frontbuffer_get(intel_bo_to_drm_bo(vma->obj));
+
+ intel_frontbuffer_track(overlay->frontbuffer, frontbuffer,
+ overlay->frontbuffer_bits);
+
+ if (overlay->frontbuffer)
+ intel_frontbuffer_put(overlay->frontbuffer);
+ overlay->frontbuffer = frontbuffer;
+
+ overlay->old_vma = overlay->vma;
+ if (vma)
+ overlay->vma = i915_vma_get(vma);
+ else
+ overlay->vma = NULL;
+}
+
+/* overlay needs to be enabled in OCMD reg */
+int i915_overlay_continue(struct drm_device *drm,
+ struct i915_vma *vma,
+ bool load_polyphase_filter)
+{
+ struct drm_i915_private *i915 = to_i915(drm);
+ struct i915_overlay *overlay = i915->overlay;
+ struct i915_request *rq;
+ u32 flip_addr = overlay->flip_addr;
+ u32 *cs;
+
+ drm_WARN_ON(drm, !i915_overlay_is_active(drm));
+
+ if (load_polyphase_filter)
+ flip_addr |= OFC_UPDATE;
+
+ rq = alloc_request(overlay, NULL);
+ if (IS_ERR(rq))
+ return PTR_ERR(rq);
+
+ cs = intel_ring_begin(rq, 2);
+ if (IS_ERR(cs)) {
+ i915_request_add(rq);
+ return PTR_ERR(cs);
+ }
+
+ *cs++ = MI_OVERLAY_FLIP | MI_OVERLAY_CONTINUE;
+ *cs++ = flip_addr;
+ intel_ring_advance(rq, cs);
+
+ i915_overlay_flip_prepare(overlay, vma);
+ i915_request_add(rq);
+
+ return 0;
+}
+
+static void i915_overlay_release_old_vma(struct i915_overlay *overlay)
+{
+ struct drm_i915_private *i915 = overlay->i915;
+ struct intel_display *display = i915->display;
+ struct i915_vma *vma;
+
+ vma = fetch_and_zero(&overlay->old_vma);
+ if (drm_WARN_ON(&i915->drm, !vma))
+ return;
+
+ intel_frontbuffer_flip(display, overlay->frontbuffer_bits);
+
+ i915_vma_unpin(vma);
+ i915_vma_put(vma);
+}
+
+static void i915_overlay_release_old_vid_tail(struct i915_overlay *overlay)
+{
+ i915_overlay_release_old_vma(overlay);
+}
+
+static void i915_overlay_off_tail(struct i915_overlay *overlay)
+{
+ struct drm_i915_private *i915 = overlay->i915;
+
+ i915_overlay_release_old_vma(overlay);
+
+ overlay->frontbuffer_bits = 0;
+
+ if (IS_I830(i915))
+ i830_overlay_clock_gating(i915, true);
+}
+
+static void i915_overlay_last_flip_retire(struct i915_active *active)
+{
+ struct i915_overlay *overlay =
+ container_of(active, typeof(*overlay), last_flip);
+
+ if (overlay->flip_complete)
+ overlay->flip_complete(overlay);
+}
+
+/* overlay needs to be disabled in OCMD reg */
+int i915_overlay_off(struct drm_device *drm)
+{
+ struct drm_i915_private *i915 = to_i915(drm);
+ struct i915_overlay *overlay = i915->overlay;
+ struct i915_request *rq;
+ u32 *cs, flip_addr = overlay->flip_addr;
+
+ drm_WARN_ON(drm, !i915_overlay_is_active(drm));
+
+ /*
+ * According to intel docs the overlay hw may hang (when switching
+ * off) without loading the filter coeffs. It is however unclear whether
+ * this applies to the disabling of the overlay or to the switching off
+ * of the hw. Do it in both cases.
+ */
+ flip_addr |= OFC_UPDATE;
+
+ rq = alloc_request(overlay, i915_overlay_off_tail);
+ if (IS_ERR(rq))
+ return PTR_ERR(rq);
+
+ cs = intel_ring_begin(rq, 6);
+ if (IS_ERR(cs)) {
+ i915_request_add(rq);
+ return PTR_ERR(cs);
+ }
+
+ /* wait for overlay to go idle */
+ *cs++ = MI_OVERLAY_FLIP | MI_OVERLAY_CONTINUE;
+ *cs++ = flip_addr;
+ *cs++ = MI_WAIT_FOR_EVENT | MI_WAIT_FOR_OVERLAY_FLIP;
+
+ /* turn overlay off */
+ *cs++ = MI_OVERLAY_FLIP | MI_OVERLAY_OFF;
+ *cs++ = flip_addr;
+ *cs++ = MI_WAIT_FOR_EVENT | MI_WAIT_FOR_OVERLAY_FLIP;
+
+ intel_ring_advance(rq, cs);
+
+ i915_overlay_flip_prepare(overlay, NULL);
+ i915_request_add(rq);
+
+ return i915_active_wait(&overlay->last_flip);
+}
+
+/*
+ * Recover from an interruption due to a signal.
+ * We have to be careful not to repeat work forever an make forward progress.
+ */
+int i915_overlay_recover_from_interrupt(struct drm_device *drm)
+{
+ struct drm_i915_private *i915 = to_i915(drm);
+ struct i915_overlay *overlay = i915->overlay;
+
+ return i915_active_wait(&overlay->last_flip);
+}
+
+/*
+ * Wait for pending overlay flip and release old frame.
+ * Needs to be called before the overlay register are changed
+ * via intel_overlay_(un)map_regs.
+ */
+int i915_overlay_release_old_vid(struct drm_device *drm)
+{
+ struct drm_i915_private *i915 = to_i915(drm);
+ struct i915_overlay *overlay = i915->overlay;
+ struct i915_request *rq;
+ u32 *cs;
+
+ /*
+ * Only wait if there is actually an old frame to release to
+ * guarantee forward progress.
+ */
+ if (!overlay->old_vma)
+ return 0;
+
+ if (!(intel_uncore_read(&i915->uncore, GEN2_ISR) & I915_OVERLAY_PLANE_FLIP_PENDING_INTERRUPT)) {
+ i915_overlay_release_old_vid_tail(overlay);
+ return 0;
+ }
+
+ rq = alloc_request(overlay, i915_overlay_release_old_vid_tail);
+ if (IS_ERR(rq))
+ return PTR_ERR(rq);
+
+ cs = intel_ring_begin(rq, 2);
+ if (IS_ERR(cs)) {
+ i915_request_add(rq);
+ return PTR_ERR(cs);
+ }
+
+ *cs++ = MI_WAIT_FOR_EVENT | MI_WAIT_FOR_OVERLAY_FLIP;
+ *cs++ = MI_NOOP;
+ intel_ring_advance(rq, cs);
+
+ i915_request_add(rq);
+
+ return i915_active_wait(&overlay->last_flip);
+}
+
+void i915_overlay_reset(struct drm_device *drm)
+{
+ struct drm_i915_private *i915 = to_i915(drm);
+ struct i915_overlay *overlay = i915->overlay;
+
+ if (!overlay)
+ return;
+
+ overlay->frontbuffer_bits = 0;
+}
+
+struct i915_vma *i915_overlay_pin_fb(struct drm_device *drm,
+ struct drm_gem_object *obj,
+ u32 *offset)
+{
+ struct drm_i915_gem_object *new_bo = to_intel_bo(obj);
+ struct i915_gem_ww_ctx ww;
+ struct i915_vma *vma;
+ int ret;
+
+ i915_gem_ww_ctx_init(&ww, true);
+retry:
+ ret = i915_gem_object_lock(new_bo, &ww);
+ if (!ret) {
+ vma = i915_gem_object_pin_to_display_plane(new_bo, &ww, 0, 0,
+ NULL, PIN_MAPPABLE);
+ ret = PTR_ERR_OR_ZERO(vma);
+ }
+ if (ret == -EDEADLK) {
+ ret = i915_gem_ww_ctx_backoff(&ww);
+ if (!ret)
+ goto retry;
+ }
+ i915_gem_ww_ctx_fini(&ww);
+ if (ret)
+ return ERR_PTR(ret);
+
+ *offset = i915_ggtt_offset(vma);
+
+ return vma;
+}
+
+void i915_overlay_unpin_fb(struct drm_device *drm,
+ struct i915_vma *vma)
+{
+ i915_vma_unpin(vma);
+}
+
+struct drm_gem_object *
+i915_overlay_obj_lookup(struct drm_device *drm,
+ struct drm_file *file_priv,
+ u32 handle)
+{
+ struct drm_i915_gem_object *bo;
+
+ bo = i915_gem_object_lookup(file_priv, handle);
+ if (!bo)
+ return ERR_PTR(-ENOENT);
+
+ if (i915_gem_object_is_tiled(bo)) {
+ drm_dbg(drm, "buffer used for overlay image can not be tiled\n");
+ i915_gem_object_put(bo);
+ return ERR_PTR(-EINVAL);
+ }
+
+ return intel_bo_to_drm_bo(bo);
+}
+
+static int get_registers(struct i915_overlay *overlay, bool use_phys)
+{
+ struct drm_i915_private *i915 = overlay->i915;
+ struct drm_i915_gem_object *obj;
+ struct i915_vma *vma;
+ int err;
+
+ obj = i915_gem_object_create_stolen(i915, PAGE_SIZE);
+ if (IS_ERR(obj))
+ obj = i915_gem_object_create_internal(i915, PAGE_SIZE);
+ if (IS_ERR(obj))
+ return PTR_ERR(obj);
+
+ vma = i915_gem_object_ggtt_pin(obj, NULL, 0, 0, PIN_MAPPABLE);
+ if (IS_ERR(vma)) {
+ err = PTR_ERR(vma);
+ goto err_put_bo;
+ }
+
+ if (use_phys)
+ overlay->flip_addr = sg_dma_address(obj->mm.pages->sgl);
+ else
+ overlay->flip_addr = i915_ggtt_offset(vma);
+ overlay->regs = i915_vma_pin_iomap(vma);
+ i915_vma_unpin(vma);
+
+ if (IS_ERR(overlay->regs)) {
+ err = PTR_ERR(overlay->regs);
+ goto err_put_bo;
+ }
+
+ overlay->reg_bo = obj;
+ return 0;
+
+err_put_bo:
+ i915_gem_object_put(obj);
+ return err;
+}
+
+void __iomem *i915_overlay_setup(struct drm_device *drm,
+ bool needs_physical)
+{
+ struct drm_i915_private *i915 = to_i915(drm);
+ struct intel_engine_cs *engine;
+ struct i915_overlay *overlay;
+ int ret;
+
+ engine = to_gt(i915)->engine[RCS0];
+ if (!engine || !engine->kernel_context)
+ return ERR_PTR(-ENOENT);
+
+ overlay = kzalloc(sizeof(*overlay), GFP_KERNEL);
+ if (!overlay)
+ return ERR_PTR(-ENOMEM);
+
+ overlay->i915 = i915;
+ overlay->context = engine->kernel_context;
+
+ i915_active_init(&overlay->last_flip,
+ NULL, i915_overlay_last_flip_retire, 0);
+
+ ret = get_registers(overlay, needs_physical);
+ if (ret) {
+ kfree(overlay);
+ return ERR_PTR(ret);
+ }
+
+ i915->overlay = overlay;
+
+ return overlay->regs;
+}
+
+void i915_overlay_cleanup(struct drm_device *drm)
+{
+ struct drm_i915_private *i915 = to_i915(drm);
+ struct i915_overlay *overlay;
+
+ overlay = fetch_and_zero(&i915->overlay);
+ if (!overlay)
+ return;
+
+ /*
+ * The bo's should be free'd by the generic code already.
+ * Furthermore modesetting teardown happens beforehand so the
+ * hardware should be off already.
+ */
+ drm_WARN_ON(drm, i915_overlay_is_active(drm));
+
+ i915_gem_object_put(overlay->reg_bo);
+ i915_active_fini(&overlay->last_flip);
+
+ kfree(overlay);
+}
diff --git a/drivers/gpu/drm/i915/i915_overlay.h b/drivers/gpu/drm/i915/i915_overlay.h
new file mode 100644
index 000000000000..f553de2abeaa
--- /dev/null
+++ b/drivers/gpu/drm/i915/i915_overlay.h
@@ -0,0 +1,43 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2026 Intel Corporation
+ */
+
+#ifndef __I915_OVERLAY_H__
+#define __I915_OVERLAY_H__
+
+#include <linux/types.h>
+
+struct drm_device;
+struct drm_file;
+struct drm_gem_object;
+struct i915_vma;
+
+bool i915_overlay_is_active(struct drm_device *drm);
+int i915_overlay_on(struct drm_device *drm,
+ u32 frontbuffer_bits);
+int i915_overlay_continue(struct drm_device *drm,
+ struct i915_vma *vma,
+ bool load_polyphase_filter);
+int i915_overlay_off(struct drm_device *drm);
+int i915_overlay_recover_from_interrupt(struct drm_device *drm);
+int i915_overlay_release_old_vid(struct drm_device *drm);
+
+void i915_overlay_reset(struct drm_device *drm);
+
+struct i915_vma *i915_overlay_pin_fb(struct drm_device *drm,
+ struct drm_gem_object *obj,
+ u32 *offset);
+void i915_overlay_unpin_fb(struct drm_device *drm,
+ struct i915_vma *vma);
+
+struct drm_gem_object *
+i915_overlay_obj_lookup(struct drm_device *drm,
+ struct drm_file *file_priv,
+ u32 handle);
+
+void __iomem *i915_overlay_setup(struct drm_device *drm,
+ bool needs_physical);
+void i915_overlay_cleanup(struct drm_device *drm);
+
+#endif /* __I915_OVERLAY_H__ */
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index 784d99afde64..5d99b99b0c57 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -338,6 +338,7 @@
#define GEN2_IER _MMIO(0x20a0)
#define GEN2_IIR _MMIO(0x20a4)
#define GEN2_IMR _MMIO(0x20a8)
+#define GEN2_ISR _MMIO(0x20ac)
#define GEN2_IRQ_REGS I915_IRQ_REGS(GEN2_IMR, \
GEN2_IER, \
@@ -777,4 +778,7 @@
#define MTL_MEDIA_GSI_BASE 0x380000
+#define DSPCLK_GATE_D _MMIO(0x6200)
+# define OVRUNIT_CLOCK_GATE_DISABLE (1 << 3)
+
#endif /* _I915_REG_H_ */
--
2.52.0
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PATCH 19/19] drm/i915/overlay: Convert overlay to parent interface
2026-02-18 15:27 [PATCH 00/19] drm/i915/overlay: Convert to parent interface Ville Syrjala
` (17 preceding siblings ...)
2026-02-18 15:28 ` [PATCH 18/19] drm/i915/overlay: Move i915 specific code into i915_overlay.c Ville Syrjala
@ 2026-02-18 15:28 ` Ville Syrjala
2026-02-18 18:09 ` ✗ CI.checkpatch: warning for drm/i915/overlay: Convert " Patchwork
` (5 subsequent siblings)
24 siblings, 0 replies; 31+ messages in thread
From: Ville Syrjala @ 2026-02-18 15:28 UTC (permalink / raw)
To: intel-gfx; +Cc: intel-xe
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
Convert the direct i915_overlay_*() calls from the display
side to go over a new parent interface instead.
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
drivers/gpu/drm/i915/display/intel_overlay.c | 36 +++++-----
drivers/gpu/drm/i915/display/intel_overlay.h | 30 --------
drivers/gpu/drm/i915/display/intel_parent.c | 76 ++++++++++++++++++++
drivers/gpu/drm/i915/display/intel_parent.h | 26 +++++++
drivers/gpu/drm/i915/i915_driver.c | 2 +
drivers/gpu/drm/i915/i915_overlay.c | 57 +++++++++------
drivers/gpu/drm/i915/i915_overlay.h | 34 +--------
drivers/gpu/drm/xe/Makefile | 1 +
include/drm/intel/display_parent_interface.h | 33 +++++++++
9 files changed, 194 insertions(+), 101 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_overlay.c b/drivers/gpu/drm/i915/display/intel_overlay.c
index bc7e2b3cbda1..9fa753aa8790 100644
--- a/drivers/gpu/drm/i915/display/intel_overlay.c
+++ b/drivers/gpu/drm/i915/display/intel_overlay.c
@@ -30,13 +30,13 @@
#include <drm/drm_gem.h>
#include <drm/drm_print.h>
-#include "i915_overlay.h"
#include "intel_color_regs.h"
#include "intel_de.h"
#include "intel_display_regs.h"
#include "intel_display_types.h"
#include "intel_frontbuffer.h"
#include "intel_overlay.h"
+#include "intel_parent.h"
#include "intel_pfit_regs.h"
/* Limits for overlay size. According to intel doc, the real limits are:
@@ -199,7 +199,7 @@ void intel_overlay_reset(struct intel_display *display)
overlay->old_yscale = 0;
overlay->crtc = NULL;
- i915_overlay_reset(display->drm);
+ intel_parent_overlay_reset(display);
}
static int packed_depth_bytes(u32 format)
@@ -477,19 +477,19 @@ static int intel_overlay_do_put_image(struct intel_overlay *overlay,
drm_WARN_ON(display->drm,
!drm_modeset_is_locked(&display->drm->mode_config.connection_mutex));
- ret = i915_overlay_release_old_vid(display->drm);
+ ret = intel_parent_overlay_release_old_vid(display);
if (ret != 0)
return ret;
atomic_inc(&display->restore.pending_fb_pin);
- vma = i915_overlay_pin_fb(display->drm, obj, &offset);
+ vma = intel_parent_overlay_pin_fb(display, obj, &offset);
if (IS_ERR(vma)) {
ret = PTR_ERR(vma);
goto out_pin_section;
}
- if (!i915_overlay_is_active(display->drm)) {
+ if (!intel_parent_overlay_is_active(display)) {
const struct intel_crtc_state *crtc_state =
overlay->crtc->config;
u32 oconfig = 0;
@@ -505,7 +505,7 @@ static int intel_overlay_do_put_image(struct intel_overlay *overlay,
OCONF_PIPE_A : OCONF_PIPE_B;
iowrite32(oconfig, ®s->OCONFIG);
- ret = i915_overlay_on(display->drm, INTEL_FRONTBUFFER_OVERLAY(pipe));
+ ret = intel_parent_overlay_on(display, INTEL_FRONTBUFFER_OVERLAY(pipe));
if (ret != 0)
goto out_unpin;
}
@@ -563,14 +563,14 @@ static int intel_overlay_do_put_image(struct intel_overlay *overlay,
if (tmp & (1 << 17))
drm_dbg(display->drm, "overlay underrun, DOVSTA: %x\n", tmp);
- ret = i915_overlay_continue(display->drm, vma, scale_changed);
+ ret = intel_parent_overlay_continue(display, vma, scale_changed);
if (ret)
goto out_unpin;
return 0;
out_unpin:
- i915_overlay_unpin_fb(display->drm, vma);
+ intel_parent_overlay_unpin_fb(display, vma);
out_pin_section:
atomic_dec(&display->restore.pending_fb_pin);
@@ -585,14 +585,14 @@ int intel_overlay_switch_off(struct intel_overlay *overlay)
drm_WARN_ON(display->drm,
!drm_modeset_is_locked(&display->drm->mode_config.connection_mutex));
- ret = i915_overlay_recover_from_interrupt(display->drm);
+ ret = intel_parent_overlay_recover_from_interrupt(display);
if (ret != 0)
return ret;
- if (!i915_overlay_is_active(display->drm))
+ if (!intel_parent_overlay_is_active(display))
return 0;
- ret = i915_overlay_release_old_vid(display->drm);
+ ret = intel_parent_overlay_release_old_vid(display);
if (ret != 0)
return ret;
@@ -601,7 +601,7 @@ int intel_overlay_switch_off(struct intel_overlay *overlay)
overlay->crtc->overlay = NULL;
overlay->crtc = NULL;
- return i915_overlay_off(display->drm);
+ return intel_parent_overlay_off(display);
}
static int check_overlay_possible_on_crtc(struct intel_overlay *overlay,
@@ -822,13 +822,13 @@ int intel_overlay_put_image_ioctl(struct drm_device *dev, void *data,
return -ENOENT;
crtc = to_intel_crtc(drmmode_crtc);
- obj = i915_overlay_obj_lookup(dev, file_priv, params->bo_handle);
+ obj = intel_parent_overlay_obj_lookup(display, file_priv, params->bo_handle);
if (!obj)
return PTR_ERR(obj);
drm_modeset_lock_all(dev);
- ret = i915_overlay_recover_from_interrupt(dev);
+ ret = intel_parent_overlay_recover_from_interrupt(display);
if (ret != 0)
goto out_unlock;
@@ -998,7 +998,7 @@ int intel_overlay_attrs_ioctl(struct drm_device *dev, void *data,
if (DISPLAY_VER(display) == 2)
goto out_unlock;
- if (i915_overlay_is_active(display->drm)) {
+ if (intel_parent_overlay_is_active(display)) {
ret = -EBUSY;
goto out_unlock;
}
@@ -1036,8 +1036,8 @@ void intel_overlay_setup(struct intel_display *display)
if (!overlay)
return;
- regs = i915_overlay_setup(display->drm,
- OVERLAY_NEEDS_PHYSICAL(display));
+ regs = intel_parent_overlay_setup(display,
+ OVERLAY_NEEDS_PHYSICAL(display));
if (IS_ERR(regs))
goto out_free;
@@ -1068,7 +1068,7 @@ bool intel_overlay_available(struct intel_display *display)
void intel_overlay_cleanup(struct intel_display *display)
{
- i915_overlay_cleanup(display->drm);
+ intel_parent_overlay_cleanup(display);
kfree(display->overlay);
display->overlay = NULL;
diff --git a/drivers/gpu/drm/i915/display/intel_overlay.h b/drivers/gpu/drm/i915/display/intel_overlay.h
index 4ef6882b9acb..a4291d6dd528 100644
--- a/drivers/gpu/drm/i915/display/intel_overlay.h
+++ b/drivers/gpu/drm/i915/display/intel_overlay.h
@@ -14,7 +14,6 @@ struct drm_printer;
struct intel_display;
struct intel_overlay;
-#ifdef I915
void intel_overlay_setup(struct intel_display *display);
bool intel_overlay_available(struct intel_display *display);
void intel_overlay_cleanup(struct intel_display *display);
@@ -24,34 +23,5 @@ int intel_overlay_put_image_ioctl(struct drm_device *dev, void *data,
int intel_overlay_attrs_ioctl(struct drm_device *dev, void *data,
struct drm_file *file_priv);
void intel_overlay_reset(struct intel_display *display);
-#else
-static inline void intel_overlay_setup(struct intel_display *display)
-{
-}
-static inline bool intel_overlay_available(struct intel_display *display)
-{
- return false;
-}
-static inline void intel_overlay_cleanup(struct intel_display *display)
-{
-}
-static inline int intel_overlay_switch_off(struct intel_overlay *overlay)
-{
- return 0;
-}
-static inline int intel_overlay_put_image_ioctl(struct drm_device *dev, void *data,
- struct drm_file *file_priv)
-{
- return 0;
-}
-static inline int intel_overlay_attrs_ioctl(struct drm_device *dev, void *data,
- struct drm_file *file_priv)
-{
- return 0;
-}
-static inline void intel_overlay_reset(struct intel_display *display)
-{
-}
-#endif
#endif /* __INTEL_OVERLAY_H__ */
diff --git a/drivers/gpu/drm/i915/display/intel_parent.c b/drivers/gpu/drm/i915/display/intel_parent.c
index 7f73695a0444..77c9fd259ed0 100644
--- a/drivers/gpu/drm/i915/display/intel_parent.c
+++ b/drivers/gpu/drm/i915/display/intel_parent.c
@@ -59,6 +59,82 @@ void intel_parent_irq_synchronize(struct intel_display *display)
display->parent->irq->synchronize(display->drm);
}
+/* overlay */
+bool intel_parent_overlay_is_active(struct intel_display *display)
+{
+ return display->parent->overlay->is_active(display->drm);
+}
+
+int intel_parent_overlay_on(struct intel_display *display,
+ u32 frontbuffer_bits)
+{
+ return display->parent->overlay->overlay_on(display->drm,
+ frontbuffer_bits);
+}
+
+int intel_parent_overlay_continue(struct intel_display *display,
+ struct i915_vma *vma,
+ bool load_polyphase_filter)
+{
+ return display->parent->overlay->overlay_continue(display->drm, vma,
+ load_polyphase_filter);
+}
+
+int intel_parent_overlay_off(struct intel_display *display)
+{
+ return display->parent->overlay->overlay_off(display->drm);
+}
+
+int intel_parent_overlay_recover_from_interrupt(struct intel_display *display)
+{
+ return display->parent->overlay->recover_from_interrupt(display->drm);
+}
+
+int intel_parent_overlay_release_old_vid(struct intel_display *display)
+{
+ return display->parent->overlay->release_old_vid(display->drm);
+}
+
+void intel_parent_overlay_reset(struct intel_display *display)
+{
+ display->parent->overlay->reset(display->drm);
+}
+
+struct i915_vma *intel_parent_overlay_pin_fb(struct intel_display *display,
+ struct drm_gem_object *obj,
+ u32 *offset)
+{
+ return display->parent->overlay->pin_fb(display->drm, obj, offset);
+}
+
+void intel_parent_overlay_unpin_fb(struct intel_display *display,
+ struct i915_vma *vma)
+{
+ return display->parent->overlay->unpin_fb(display->drm, vma);
+}
+
+struct drm_gem_object *intel_parent_overlay_obj_lookup(struct intel_display *display,
+ struct drm_file *filp,
+ u32 handle)
+{
+ return display->parent->overlay->obj_lookup(display->drm,
+ filp, handle);
+}
+
+void __iomem *intel_parent_overlay_setup(struct intel_display *display,
+ bool needs_physical)
+{
+ if (drm_WARN_ON_ONCE(display->drm, !display->parent->overlay))
+ return ERR_PTR(-ENODEV);
+
+ return display->parent->overlay->setup(display->drm, needs_physical);
+}
+
+void intel_parent_overlay_cleanup(struct intel_display *display)
+{
+ display->parent->overlay->cleanup(display->drm);
+}
+
/* panic */
struct intel_panic *intel_parent_panic_alloc(struct intel_display *display)
{
diff --git a/drivers/gpu/drm/i915/display/intel_parent.h b/drivers/gpu/drm/i915/display/intel_parent.h
index 04782bb26b61..91c37d68348a 100644
--- a/drivers/gpu/drm/i915/display/intel_parent.h
+++ b/drivers/gpu/drm/i915/display/intel_parent.h
@@ -7,7 +7,10 @@
#include <linux/types.h>
struct dma_fence;
+struct drm_file;
+struct drm_gem_object;
struct drm_scanout_buffer;
+struct i915_vma;
struct intel_display;
struct intel_hdcp_gsc_context;
struct intel_panic;
@@ -27,6 +30,29 @@ void intel_parent_hdcp_gsc_context_free(struct intel_display *display,
bool intel_parent_irq_enabled(struct intel_display *display);
void intel_parent_irq_synchronize(struct intel_display *display);
+/* overlay */
+bool intel_parent_overlay_is_active(struct intel_display *display);
+int intel_parent_overlay_on(struct intel_display *display,
+ u32 frontbuffer_bits);
+int intel_parent_overlay_continue(struct intel_display *display,
+ struct i915_vma *vma,
+ bool load_polyphase_filter);
+int intel_parent_overlay_off(struct intel_display *display);
+int intel_parent_overlay_recover_from_interrupt(struct intel_display *display);
+int intel_parent_overlay_release_old_vid(struct intel_display *display);
+void intel_parent_overlay_reset(struct intel_display *display);
+struct i915_vma *intel_parent_overlay_pin_fb(struct intel_display *display,
+ struct drm_gem_object *obj,
+ u32 *offset);
+void intel_parent_overlay_unpin_fb(struct intel_display *display,
+ struct i915_vma *vma);
+struct drm_gem_object *intel_parent_overlay_obj_lookup(struct intel_display *display,
+ struct drm_file *filp,
+ u32 handle);
+void __iomem *intel_parent_overlay_setup(struct intel_display *display,
+ bool needs_physical);
+void intel_parent_overlay_cleanup(struct intel_display *display);
+
/* panic */
struct intel_panic *intel_parent_panic_alloc(struct intel_display *display);
int intel_parent_panic_setup(struct intel_display *display, struct intel_panic *panic, struct drm_scanout_buffer *sb);
diff --git a/drivers/gpu/drm/i915/i915_driver.c b/drivers/gpu/drm/i915/i915_driver.c
index 6d8fbf845bc2..5a3b0309216f 100644
--- a/drivers/gpu/drm/i915/i915_driver.c
+++ b/drivers/gpu/drm/i915/i915_driver.c
@@ -106,6 +106,7 @@
#include "i915_ioctl.h"
#include "i915_irq.h"
#include "i915_memcpy.h"
+#include "i915_overlay.h"
#include "i915_panic.h"
#include "i915_perf.h"
#include "i915_query.h"
@@ -765,6 +766,7 @@ static const struct intel_display_parent_interface parent = {
.hdcp = &i915_display_hdcp_interface,
.initial_plane = &i915_display_initial_plane_interface,
.irq = &i915_display_irq_interface,
+ .overlay = &i915_display_overlay_interface,
.panic = &i915_display_panic_interface,
.pc8 = &i915_display_pc8_interface,
.pcode = &i915_display_pcode_interface,
diff --git a/drivers/gpu/drm/i915/i915_overlay.c b/drivers/gpu/drm/i915/i915_overlay.c
index e87b0a4f7ef4..d154cce59d95 100644
--- a/drivers/gpu/drm/i915/i915_overlay.c
+++ b/drivers/gpu/drm/i915/i915_overlay.c
@@ -5,6 +5,7 @@
#include <drm/drm_print.h>
+#include <drm/intel/display_parent_interface.h>
#include <drm/intel/intel_gmd_interrupt_regs.h>
#include "gem/i915_gem_internal.h"
@@ -88,7 +89,7 @@ alloc_request(struct i915_overlay *overlay, void (*fn)(struct i915_overlay *))
return rq;
}
-bool i915_overlay_is_active(struct drm_device *drm)
+static bool i915_overlay_is_active(struct drm_device *drm)
{
struct drm_i915_private *i915 = to_i915(drm);
struct i915_overlay *overlay = i915->overlay;
@@ -97,8 +98,8 @@ bool i915_overlay_is_active(struct drm_device *drm)
}
/* overlay needs to be disable in OCMD reg */
-int i915_overlay_on(struct drm_device *drm,
- u32 frontbuffer_bits)
+static int i915_overlay_on(struct drm_device *drm,
+ u32 frontbuffer_bits)
{
struct drm_i915_private *i915 = to_i915(drm);
struct i915_overlay *overlay = i915->overlay;
@@ -159,9 +160,9 @@ static void i915_overlay_flip_prepare(struct i915_overlay *overlay,
}
/* overlay needs to be enabled in OCMD reg */
-int i915_overlay_continue(struct drm_device *drm,
- struct i915_vma *vma,
- bool load_polyphase_filter)
+static int i915_overlay_continue(struct drm_device *drm,
+ struct i915_vma *vma,
+ bool load_polyphase_filter)
{
struct drm_i915_private *i915 = to_i915(drm);
struct i915_overlay *overlay = i915->overlay;
@@ -210,7 +211,8 @@ static void i915_overlay_release_old_vma(struct i915_overlay *overlay)
i915_vma_put(vma);
}
-static void i915_overlay_release_old_vid_tail(struct i915_overlay *overlay)
+static void
+i915_overlay_release_old_vid_tail(struct i915_overlay *overlay)
{
i915_overlay_release_old_vma(overlay);
}
@@ -237,7 +239,7 @@ static void i915_overlay_last_flip_retire(struct i915_active *active)
}
/* overlay needs to be disabled in OCMD reg */
-int i915_overlay_off(struct drm_device *drm)
+static int i915_overlay_off(struct drm_device *drm)
{
struct drm_i915_private *i915 = to_i915(drm);
struct i915_overlay *overlay = i915->overlay;
@@ -286,7 +288,7 @@ int i915_overlay_off(struct drm_device *drm)
* Recover from an interruption due to a signal.
* We have to be careful not to repeat work forever an make forward progress.
*/
-int i915_overlay_recover_from_interrupt(struct drm_device *drm)
+static int i915_overlay_recover_from_interrupt(struct drm_device *drm)
{
struct drm_i915_private *i915 = to_i915(drm);
struct i915_overlay *overlay = i915->overlay;
@@ -299,7 +301,7 @@ int i915_overlay_recover_from_interrupt(struct drm_device *drm)
* Needs to be called before the overlay register are changed
* via intel_overlay_(un)map_regs.
*/
-int i915_overlay_release_old_vid(struct drm_device *drm)
+static int i915_overlay_release_old_vid(struct drm_device *drm)
{
struct drm_i915_private *i915 = to_i915(drm);
struct i915_overlay *overlay = i915->overlay;
@@ -337,7 +339,7 @@ int i915_overlay_release_old_vid(struct drm_device *drm)
return i915_active_wait(&overlay->last_flip);
}
-void i915_overlay_reset(struct drm_device *drm)
+static void i915_overlay_reset(struct drm_device *drm)
{
struct drm_i915_private *i915 = to_i915(drm);
struct i915_overlay *overlay = i915->overlay;
@@ -348,9 +350,9 @@ void i915_overlay_reset(struct drm_device *drm)
overlay->frontbuffer_bits = 0;
}
-struct i915_vma *i915_overlay_pin_fb(struct drm_device *drm,
- struct drm_gem_object *obj,
- u32 *offset)
+static struct i915_vma *i915_overlay_pin_fb(struct drm_device *drm,
+ struct drm_gem_object *obj,
+ u32 *offset)
{
struct drm_i915_gem_object *new_bo = to_intel_bo(obj);
struct i915_gem_ww_ctx ww;
@@ -379,13 +381,13 @@ struct i915_vma *i915_overlay_pin_fb(struct drm_device *drm,
return vma;
}
-void i915_overlay_unpin_fb(struct drm_device *drm,
- struct i915_vma *vma)
+static void i915_overlay_unpin_fb(struct drm_device *drm,
+ struct i915_vma *vma)
{
i915_vma_unpin(vma);
}
-struct drm_gem_object *
+static struct drm_gem_object *
i915_overlay_obj_lookup(struct drm_device *drm,
struct drm_file *file_priv,
u32 handle)
@@ -444,8 +446,8 @@ static int get_registers(struct i915_overlay *overlay, bool use_phys)
return err;
}
-void __iomem *i915_overlay_setup(struct drm_device *drm,
- bool needs_physical)
+static void __iomem *i915_overlay_setup(struct drm_device *drm,
+ bool needs_physical)
{
struct drm_i915_private *i915 = to_i915(drm);
struct intel_engine_cs *engine;
@@ -477,7 +479,7 @@ void __iomem *i915_overlay_setup(struct drm_device *drm,
return overlay->regs;
}
-void i915_overlay_cleanup(struct drm_device *drm)
+static void i915_overlay_cleanup(struct drm_device *drm)
{
struct drm_i915_private *i915 = to_i915(drm);
struct i915_overlay *overlay;
@@ -498,3 +500,18 @@ void i915_overlay_cleanup(struct drm_device *drm)
kfree(overlay);
}
+
+const struct intel_display_overlay_interface i915_display_overlay_interface = {
+ .is_active = i915_overlay_is_active,
+ .overlay_on = i915_overlay_on,
+ .overlay_continue = i915_overlay_continue,
+ .overlay_off = i915_overlay_off,
+ .recover_from_interrupt = i915_overlay_recover_from_interrupt,
+ .release_old_vid = i915_overlay_release_old_vid,
+ .reset = i915_overlay_reset,
+ .obj_lookup = i915_overlay_obj_lookup,
+ .pin_fb = i915_overlay_pin_fb,
+ .unpin_fb = i915_overlay_unpin_fb,
+ .setup = i915_overlay_setup,
+ .cleanup = i915_overlay_cleanup,
+};
diff --git a/drivers/gpu/drm/i915/i915_overlay.h b/drivers/gpu/drm/i915/i915_overlay.h
index f553de2abeaa..f8053eb8d189 100644
--- a/drivers/gpu/drm/i915/i915_overlay.h
+++ b/drivers/gpu/drm/i915/i915_overlay.h
@@ -6,38 +6,6 @@
#ifndef __I915_OVERLAY_H__
#define __I915_OVERLAY_H__
-#include <linux/types.h>
-
-struct drm_device;
-struct drm_file;
-struct drm_gem_object;
-struct i915_vma;
-
-bool i915_overlay_is_active(struct drm_device *drm);
-int i915_overlay_on(struct drm_device *drm,
- u32 frontbuffer_bits);
-int i915_overlay_continue(struct drm_device *drm,
- struct i915_vma *vma,
- bool load_polyphase_filter);
-int i915_overlay_off(struct drm_device *drm);
-int i915_overlay_recover_from_interrupt(struct drm_device *drm);
-int i915_overlay_release_old_vid(struct drm_device *drm);
-
-void i915_overlay_reset(struct drm_device *drm);
-
-struct i915_vma *i915_overlay_pin_fb(struct drm_device *drm,
- struct drm_gem_object *obj,
- u32 *offset);
-void i915_overlay_unpin_fb(struct drm_device *drm,
- struct i915_vma *vma);
-
-struct drm_gem_object *
-i915_overlay_obj_lookup(struct drm_device *drm,
- struct drm_file *file_priv,
- u32 handle);
-
-void __iomem *i915_overlay_setup(struct drm_device *drm,
- bool needs_physical);
-void i915_overlay_cleanup(struct drm_device *drm);
+extern const struct intel_display_overlay_interface i915_display_overlay_interface;
#endif /* __I915_OVERLAY_H__ */
diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
index 41ec698b3cc1..119e830498a8 100644
--- a/drivers/gpu/drm/xe/Makefile
+++ b/drivers/gpu/drm/xe/Makefile
@@ -304,6 +304,7 @@ xe-$(CONFIG_DRM_XE_DISPLAY) += \
i915-display/intel_modeset_lock.o \
i915-display/intel_modeset_setup.o \
i915-display/intel_modeset_verify.o \
+ i915-display/intel_overlay.o \
i915-display/intel_panel.o \
i915-display/intel_parent.o \
i915-display/intel_pch.o \
diff --git a/include/drm/intel/display_parent_interface.h b/include/drm/intel/display_parent_interface.h
index 41f4afe7928c..8b248b914b88 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_crtc;
struct drm_device;
+struct drm_file;
struct drm_framebuffer;
struct drm_gem_object;
struct drm_plane_state;
@@ -55,6 +56,35 @@ struct intel_display_irq_interface {
void (*synchronize)(struct drm_device *drm);
};
+struct intel_display_overlay_interface {
+ bool (*is_active)(struct drm_device *drm);
+
+ int (*overlay_on)(struct drm_device *drm,
+ u32 frontbuffer_bits);
+ int (*overlay_continue)(struct drm_device *drm,
+ struct i915_vma *vma,
+ bool load_polyphase_filter);
+ int (*overlay_off)(struct drm_device *drm);
+ int (*recover_from_interrupt)(struct drm_device *drm);
+ int (*release_old_vid)(struct drm_device *drm);
+
+ void (*reset)(struct drm_device *drm);
+
+ struct i915_vma *(*pin_fb)(struct drm_device *drm,
+ struct drm_gem_object *obj,
+ u32 *offset);
+ void (*unpin_fb)(struct drm_device *drm,
+ struct i915_vma *vma);
+
+ struct drm_gem_object *(*obj_lookup)(struct drm_device *drm,
+ struct drm_file *filp,
+ u32 handle);
+
+ void __iomem *(*setup)(struct drm_device *drm,
+ bool needs_physical);
+ void (*cleanup)(struct drm_device *drm);
+};
+
struct intel_display_panic_interface {
struct intel_panic *(*alloc)(void);
int (*setup)(struct intel_panic *panic, struct drm_scanout_buffer *sb);
@@ -139,6 +169,9 @@ struct intel_display_parent_interface {
/** @panic: Panic interface */
const struct intel_display_panic_interface *panic;
+ /** @overlay: Overlay. Optional. */
+ const struct intel_display_overlay_interface *overlay;
+
/** @pc8: PC8 interface. Optional. */
const struct intel_display_pc8_interface *pc8;
--
2.52.0
^ permalink raw reply related [flat|nested] 31+ messages in thread
* ✗ CI.checkpatch: warning for drm/i915/overlay: Convert to parent interface
2026-02-18 15:27 [PATCH 00/19] drm/i915/overlay: Convert to parent interface Ville Syrjala
` (18 preceding siblings ...)
2026-02-18 15:28 ` [PATCH 19/19] drm/i915/overlay: Convert overlay to parent interface Ville Syrjala
@ 2026-02-18 18:09 ` Patchwork
2026-02-18 18:11 ` ✓ CI.KUnit: success " Patchwork
` (4 subsequent siblings)
24 siblings, 0 replies; 31+ messages in thread
From: Patchwork @ 2026-02-18 18:09 UTC (permalink / raw)
To: Ville Syrjala; +Cc: intel-xe
== Series Details ==
Series: drm/i915/overlay: Convert to parent interface
URL : https://patchwork.freedesktop.org/series/161766/
State : warning
== Summary ==
+ KERNEL=/kernel
+ git clone https://gitlab.freedesktop.org/drm/maintainer-tools mt
Cloning into 'mt'...
warning: redirecting to https://gitlab.freedesktop.org/drm/maintainer-tools.git/
+ git -C mt rev-list -n1 origin/master
1f57ba1afceae32108bd24770069f764d940a0e4
+ cd /kernel
+ git config --global --add safe.directory /kernel
+ git log -n1
commit 3400700dcd0cb0100d6c73ceebf3da9b57d3e598
Author: Ville Syrjälä <ville.syrjala@linux.intel.com>
Date: Wed Feb 18 17:28:06 2026 +0200
drm/i915/overlay: Convert overlay to parent interface
Convert the direct i915_overlay_*() calls from the display
side to go over a new parent interface instead.
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
+ /mt/dim checkpatch 7ee0795cb4f30c9ccc2b8a580faebcefbdf150c5 drm-intel
2426bcc6bbd1 drm/i915/overlay: Remove GPU hang snapshot stuff
3f10c8c9e15d drm/i915/overlay: Track current frontbuffer_bits
468ea564aacd drm/i915/overlay: Extract i915_overlay_is_active()
5f01e6bebbfe drm/i915/overlay: Remove redundant overlay->active
1efe83e2e0fd drm/i915/overlay: Relocate the underrun check
809f621944f1 drm/i915/overlay: Introduce i915_overlay_obj_lookup()
5db8f9526076 drm/i915/overlay: Use struct drm_gem_object as the type
6282a0e75bcd drm/i915/overlay: Extract i915_overlay_reset()
d945c0183c9f drm/i915/overlay: Extract i915_overlay_setup()
d759343536b9 drm/i915/overlay: Extract i915_overlay_cleanup()
9f056485c415 drm/i915/overlay: Abstract buffer (un)pinning
d08867d38223 drm/i915/overlay: Rename low level i915 specific functions
6dc9c3f55a9c drm/i915/overlay: Adjust i915 specific interfaces
303d34959cc3 drm/i915/overlay: Make i830_overlay_clock_gating() i915 specific
e77291afdf4c drm/i915/overlay: s/dev_priv/i915/
bd3ef7eeb160 drm/i915/overlay: Split 'struct intel_overlay'
-:209: WARNING:LONG_LINE: line length of 104 exceeds 100 columns
#209: FILE: drivers/gpu/drm/i915/display/intel_overlay.c:491:
+ if (!(intel_uncore_read(&i915->uncore, GEN2_ISR) & I915_OVERLAY_PLANE_FLIP_PENDING_INTERRUPT)) {
total: 0 errors, 1 warnings, 0 checks, 311 lines checked
4d2d34efe4a5 drm/i915/overlay: Don't use fetch_and_zero() in display code
735b4e24c871 drm/i915/overlay: Move i915 specific code into i915_overlay.c
-:605: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating?
#605:
new file mode 100644
-:925: WARNING:LONG_LINE: line length of 104 exceeds 100 columns
#925: FILE: drivers/gpu/drm/i915/i915_overlay.c:316:
+ if (!(intel_uncore_read(&i915->uncore, GEN2_ISR) & I915_OVERLAY_PLANE_FLIP_PENDING_INTERRUPT)) {
total: 0 errors, 2 warnings, 0 checks, 1118 lines checked
3400700dcd0c drm/i915/overlay: Convert overlay to parent interface
^ permalink raw reply [flat|nested] 31+ messages in thread
* ✓ CI.KUnit: success for drm/i915/overlay: Convert to parent interface
2026-02-18 15:27 [PATCH 00/19] drm/i915/overlay: Convert to parent interface Ville Syrjala
` (19 preceding siblings ...)
2026-02-18 18:09 ` ✗ CI.checkpatch: warning for drm/i915/overlay: Convert " Patchwork
@ 2026-02-18 18:11 ` Patchwork
2026-02-18 18:26 ` ✗ CI.checksparse: warning " Patchwork
` (3 subsequent siblings)
24 siblings, 0 replies; 31+ messages in thread
From: Patchwork @ 2026-02-18 18:11 UTC (permalink / raw)
To: Ville Syrjala; +Cc: intel-xe
== Series Details ==
Series: drm/i915/overlay: Convert to parent interface
URL : https://patchwork.freedesktop.org/series/161766/
State : success
== Summary ==
+ trap cleanup EXIT
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig
[18:09:59] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[18:10:03] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[18:10:35] Starting KUnit Kernel (1/1)...
[18:10:35] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[18:10:35] ================== guc_buf (11 subtests) ===================
[18:10:35] [PASSED] test_smallest
[18:10:35] [PASSED] test_largest
[18:10:35] [PASSED] test_granular
[18:10:35] [PASSED] test_unique
[18:10:35] [PASSED] test_overlap
[18:10:35] [PASSED] test_reusable
[18:10:35] [PASSED] test_too_big
[18:10:35] [PASSED] test_flush
[18:10:35] [PASSED] test_lookup
[18:10:35] [PASSED] test_data
[18:10:35] [PASSED] test_class
[18:10:35] ===================== [PASSED] guc_buf =====================
[18:10:35] =================== guc_dbm (7 subtests) ===================
[18:10:35] [PASSED] test_empty
[18:10:35] [PASSED] test_default
[18:10:35] ======================== test_size ========================
[18:10:35] [PASSED] 4
[18:10:35] [PASSED] 8
[18:10:35] [PASSED] 32
[18:10:35] [PASSED] 256
[18:10:35] ==================== [PASSED] test_size ====================
[18:10:35] ======================= test_reuse ========================
[18:10:35] [PASSED] 4
[18:10:35] [PASSED] 8
[18:10:35] [PASSED] 32
[18:10:35] [PASSED] 256
[18:10:35] =================== [PASSED] test_reuse ====================
[18:10:35] =================== test_range_overlap ====================
[18:10:35] [PASSED] 4
[18:10:35] [PASSED] 8
[18:10:35] [PASSED] 32
[18:10:35] [PASSED] 256
[18:10:35] =============== [PASSED] test_range_overlap ================
[18:10:35] =================== test_range_compact ====================
[18:10:35] [PASSED] 4
[18:10:35] [PASSED] 8
[18:10:35] [PASSED] 32
[18:10:35] [PASSED] 256
[18:10:35] =============== [PASSED] test_range_compact ================
[18:10:35] ==================== test_range_spare =====================
[18:10:35] [PASSED] 4
[18:10:35] [PASSED] 8
[18:10:35] [PASSED] 32
[18:10:35] [PASSED] 256
[18:10:35] ================ [PASSED] test_range_spare =================
[18:10:35] ===================== [PASSED] guc_dbm =====================
[18:10:35] =================== guc_idm (6 subtests) ===================
[18:10:35] [PASSED] bad_init
[18:10:35] [PASSED] no_init
[18:10:35] [PASSED] init_fini
[18:10:35] [PASSED] check_used
[18:10:35] [PASSED] check_quota
[18:10:35] [PASSED] check_all
[18:10:35] ===================== [PASSED] guc_idm =====================
[18:10:35] ================== no_relay (3 subtests) ===================
[18:10:35] [PASSED] xe_drops_guc2pf_if_not_ready
[18:10:35] [PASSED] xe_drops_guc2vf_if_not_ready
[18:10:35] [PASSED] xe_rejects_send_if_not_ready
[18:10:35] ==================== [PASSED] no_relay =====================
[18:10:35] ================== pf_relay (14 subtests) ==================
[18:10:35] [PASSED] pf_rejects_guc2pf_too_short
[18:10:35] [PASSED] pf_rejects_guc2pf_too_long
[18:10:35] [PASSED] pf_rejects_guc2pf_no_payload
[18:10:35] [PASSED] pf_fails_no_payload
[18:10:35] [PASSED] pf_fails_bad_origin
[18:10:35] [PASSED] pf_fails_bad_type
[18:10:35] [PASSED] pf_txn_reports_error
[18:10:35] [PASSED] pf_txn_sends_pf2guc
[18:10:35] [PASSED] pf_sends_pf2guc
[18:10:35] [SKIPPED] pf_loopback_nop
[18:10:35] [SKIPPED] pf_loopback_echo
[18:10:35] [SKIPPED] pf_loopback_fail
[18:10:35] [SKIPPED] pf_loopback_busy
[18:10:35] [SKIPPED] pf_loopback_retry
[18:10:35] ==================== [PASSED] pf_relay =====================
[18:10:35] ================== vf_relay (3 subtests) ===================
[18:10:35] [PASSED] vf_rejects_guc2vf_too_short
[18:10:35] [PASSED] vf_rejects_guc2vf_too_long
[18:10:35] [PASSED] vf_rejects_guc2vf_no_payload
[18:10:35] ==================== [PASSED] vf_relay =====================
[18:10:35] ================ pf_gt_config (6 subtests) =================
[18:10:35] [PASSED] fair_contexts_1vf
[18:10:35] [PASSED] fair_doorbells_1vf
[18:10:35] [PASSED] fair_ggtt_1vf
[18:10:35] ====================== fair_contexts ======================
[18:10:35] [PASSED] 1 VF
[18:10:35] [PASSED] 2 VFs
[18:10:35] [PASSED] 3 VFs
[18:10:35] [PASSED] 4 VFs
[18:10:35] [PASSED] 5 VFs
[18:10:35] [PASSED] 6 VFs
[18:10:35] [PASSED] 7 VFs
[18:10:35] [PASSED] 8 VFs
[18:10:35] [PASSED] 9 VFs
[18:10:35] [PASSED] 10 VFs
[18:10:35] [PASSED] 11 VFs
[18:10:35] [PASSED] 12 VFs
[18:10:35] [PASSED] 13 VFs
[18:10:35] [PASSED] 14 VFs
[18:10:35] [PASSED] 15 VFs
[18:10:35] [PASSED] 16 VFs
[18:10:35] [PASSED] 17 VFs
[18:10:35] [PASSED] 18 VFs
[18:10:35] [PASSED] 19 VFs
[18:10:35] [PASSED] 20 VFs
[18:10:35] [PASSED] 21 VFs
[18:10:35] [PASSED] 22 VFs
[18:10:35] [PASSED] 23 VFs
[18:10:35] [PASSED] 24 VFs
[18:10:35] [PASSED] 25 VFs
[18:10:35] [PASSED] 26 VFs
[18:10:35] [PASSED] 27 VFs
[18:10:35] [PASSED] 28 VFs
[18:10:35] [PASSED] 29 VFs
[18:10:35] [PASSED] 30 VFs
[18:10:35] [PASSED] 31 VFs
[18:10:35] [PASSED] 32 VFs
[18:10:35] [PASSED] 33 VFs
[18:10:35] [PASSED] 34 VFs
[18:10:35] [PASSED] 35 VFs
[18:10:35] [PASSED] 36 VFs
[18:10:35] [PASSED] 37 VFs
[18:10:35] [PASSED] 38 VFs
[18:10:35] [PASSED] 39 VFs
[18:10:35] [PASSED] 40 VFs
[18:10:35] [PASSED] 41 VFs
[18:10:35] [PASSED] 42 VFs
[18:10:35] [PASSED] 43 VFs
[18:10:35] [PASSED] 44 VFs
[18:10:35] [PASSED] 45 VFs
[18:10:35] [PASSED] 46 VFs
[18:10:35] [PASSED] 47 VFs
[18:10:35] [PASSED] 48 VFs
[18:10:35] [PASSED] 49 VFs
[18:10:35] [PASSED] 50 VFs
[18:10:35] [PASSED] 51 VFs
[18:10:35] [PASSED] 52 VFs
[18:10:35] [PASSED] 53 VFs
[18:10:35] [PASSED] 54 VFs
[18:10:35] [PASSED] 55 VFs
[18:10:35] [PASSED] 56 VFs
[18:10:35] [PASSED] 57 VFs
[18:10:35] [PASSED] 58 VFs
[18:10:35] [PASSED] 59 VFs
[18:10:35] [PASSED] 60 VFs
[18:10:35] [PASSED] 61 VFs
[18:10:35] [PASSED] 62 VFs
[18:10:35] [PASSED] 63 VFs
[18:10:35] ================== [PASSED] fair_contexts ==================
[18:10:35] ===================== fair_doorbells ======================
[18:10:35] [PASSED] 1 VF
[18:10:35] [PASSED] 2 VFs
[18:10:35] [PASSED] 3 VFs
[18:10:35] [PASSED] 4 VFs
[18:10:35] [PASSED] 5 VFs
[18:10:35] [PASSED] 6 VFs
[18:10:35] [PASSED] 7 VFs
[18:10:35] [PASSED] 8 VFs
[18:10:35] [PASSED] 9 VFs
[18:10:35] [PASSED] 10 VFs
[18:10:35] [PASSED] 11 VFs
[18:10:35] [PASSED] 12 VFs
[18:10:35] [PASSED] 13 VFs
[18:10:35] [PASSED] 14 VFs
[18:10:35] [PASSED] 15 VFs
[18:10:35] [PASSED] 16 VFs
[18:10:35] [PASSED] 17 VFs
[18:10:35] [PASSED] 18 VFs
[18:10:35] [PASSED] 19 VFs
[18:10:35] [PASSED] 20 VFs
[18:10:35] [PASSED] 21 VFs
[18:10:35] [PASSED] 22 VFs
[18:10:35] [PASSED] 23 VFs
[18:10:35] [PASSED] 24 VFs
[18:10:35] [PASSED] 25 VFs
[18:10:35] [PASSED] 26 VFs
[18:10:35] [PASSED] 27 VFs
[18:10:35] [PASSED] 28 VFs
[18:10:35] [PASSED] 29 VFs
[18:10:35] [PASSED] 30 VFs
[18:10:35] [PASSED] 31 VFs
[18:10:35] [PASSED] 32 VFs
[18:10:35] [PASSED] 33 VFs
[18:10:35] [PASSED] 34 VFs
[18:10:35] [PASSED] 35 VFs
[18:10:35] [PASSED] 36 VFs
[18:10:35] [PASSED] 37 VFs
[18:10:35] [PASSED] 38 VFs
[18:10:35] [PASSED] 39 VFs
[18:10:35] [PASSED] 40 VFs
[18:10:35] [PASSED] 41 VFs
[18:10:35] [PASSED] 42 VFs
[18:10:35] [PASSED] 43 VFs
[18:10:35] [PASSED] 44 VFs
[18:10:35] [PASSED] 45 VFs
[18:10:35] [PASSED] 46 VFs
[18:10:35] [PASSED] 47 VFs
[18:10:35] [PASSED] 48 VFs
[18:10:35] [PASSED] 49 VFs
[18:10:35] [PASSED] 50 VFs
[18:10:35] [PASSED] 51 VFs
[18:10:35] [PASSED] 52 VFs
[18:10:35] [PASSED] 53 VFs
[18:10:35] [PASSED] 54 VFs
[18:10:35] [PASSED] 55 VFs
[18:10:35] [PASSED] 56 VFs
[18:10:35] [PASSED] 57 VFs
[18:10:35] [PASSED] 58 VFs
[18:10:35] [PASSED] 59 VFs
[18:10:35] [PASSED] 60 VFs
[18:10:35] [PASSED] 61 VFs
[18:10:35] [PASSED] 62 VFs
[18:10:35] [PASSED] 63 VFs
[18:10:35] ================= [PASSED] fair_doorbells ==================
[18:10:35] ======================== fair_ggtt ========================
[18:10:35] [PASSED] 1 VF
[18:10:35] [PASSED] 2 VFs
[18:10:35] [PASSED] 3 VFs
[18:10:35] [PASSED] 4 VFs
[18:10:35] [PASSED] 5 VFs
[18:10:35] [PASSED] 6 VFs
[18:10:35] [PASSED] 7 VFs
[18:10:35] [PASSED] 8 VFs
[18:10:35] [PASSED] 9 VFs
[18:10:35] [PASSED] 10 VFs
[18:10:35] [PASSED] 11 VFs
[18:10:35] [PASSED] 12 VFs
[18:10:35] [PASSED] 13 VFs
[18:10:35] [PASSED] 14 VFs
[18:10:35] [PASSED] 15 VFs
[18:10:35] [PASSED] 16 VFs
[18:10:35] [PASSED] 17 VFs
[18:10:35] [PASSED] 18 VFs
[18:10:35] [PASSED] 19 VFs
[18:10:35] [PASSED] 20 VFs
[18:10:35] [PASSED] 21 VFs
[18:10:35] [PASSED] 22 VFs
[18:10:35] [PASSED] 23 VFs
[18:10:35] [PASSED] 24 VFs
[18:10:35] [PASSED] 25 VFs
[18:10:35] [PASSED] 26 VFs
[18:10:35] [PASSED] 27 VFs
[18:10:35] [PASSED] 28 VFs
[18:10:35] [PASSED] 29 VFs
[18:10:35] [PASSED] 30 VFs
[18:10:35] [PASSED] 31 VFs
[18:10:35] [PASSED] 32 VFs
[18:10:35] [PASSED] 33 VFs
[18:10:35] [PASSED] 34 VFs
[18:10:35] [PASSED] 35 VFs
[18:10:35] [PASSED] 36 VFs
[18:10:35] [PASSED] 37 VFs
[18:10:35] [PASSED] 38 VFs
[18:10:35] [PASSED] 39 VFs
[18:10:35] [PASSED] 40 VFs
[18:10:35] [PASSED] 41 VFs
[18:10:35] [PASSED] 42 VFs
[18:10:35] [PASSED] 43 VFs
[18:10:35] [PASSED] 44 VFs
[18:10:35] [PASSED] 45 VFs
[18:10:35] [PASSED] 46 VFs
[18:10:35] [PASSED] 47 VFs
[18:10:35] [PASSED] 48 VFs
[18:10:35] [PASSED] 49 VFs
[18:10:35] [PASSED] 50 VFs
[18:10:35] [PASSED] 51 VFs
[18:10:35] [PASSED] 52 VFs
[18:10:35] [PASSED] 53 VFs
[18:10:35] [PASSED] 54 VFs
[18:10:35] [PASSED] 55 VFs
[18:10:35] [PASSED] 56 VFs
[18:10:35] [PASSED] 57 VFs
[18:10:35] [PASSED] 58 VFs
[18:10:35] [PASSED] 59 VFs
[18:10:35] [PASSED] 60 VFs
[18:10:35] [PASSED] 61 VFs
[18:10:35] [PASSED] 62 VFs
[18:10:35] [PASSED] 63 VFs
[18:10:35] ==================== [PASSED] fair_ggtt ====================
[18:10:35] ================== [PASSED] pf_gt_config ===================
[18:10:35] ===================== lmtt (1 subtest) =====================
[18:10:35] ======================== test_ops =========================
[18:10:35] [PASSED] 2-level
[18:10:35] [PASSED] multi-level
[18:10:35] ==================== [PASSED] test_ops =====================
[18:10:35] ====================== [PASSED] lmtt =======================
[18:10:35] ================= pf_service (11 subtests) =================
[18:10:35] [PASSED] pf_negotiate_any
[18:10:35] [PASSED] pf_negotiate_base_match
[18:10:35] [PASSED] pf_negotiate_base_newer
[18:10:35] [PASSED] pf_negotiate_base_next
[18:10:35] [SKIPPED] pf_negotiate_base_older
[18:10:35] [PASSED] pf_negotiate_base_prev
[18:10:35] [PASSED] pf_negotiate_latest_match
[18:10:35] [PASSED] pf_negotiate_latest_newer
[18:10:35] [PASSED] pf_negotiate_latest_next
[18:10:35] [SKIPPED] pf_negotiate_latest_older
[18:10:35] [SKIPPED] pf_negotiate_latest_prev
[18:10:35] =================== [PASSED] pf_service ====================
[18:10:35] ================= xe_guc_g2g (2 subtests) ==================
[18:10:35] ============== xe_live_guc_g2g_kunit_default ==============
[18:10:35] ========= [SKIPPED] xe_live_guc_g2g_kunit_default ==========
[18:10:35] ============== xe_live_guc_g2g_kunit_allmem ===============
[18:10:35] ========== [SKIPPED] xe_live_guc_g2g_kunit_allmem ==========
[18:10:35] =================== [SKIPPED] xe_guc_g2g ===================
[18:10:35] =================== xe_mocs (2 subtests) ===================
[18:10:35] ================ xe_live_mocs_kernel_kunit ================
[18:10:35] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============
[18:10:35] ================ xe_live_mocs_reset_kunit =================
[18:10:35] ============ [SKIPPED] xe_live_mocs_reset_kunit ============
[18:10:35] ==================== [SKIPPED] xe_mocs =====================
[18:10:35] ================= xe_migrate (2 subtests) ==================
[18:10:35] ================= xe_migrate_sanity_kunit =================
[18:10:35] ============ [SKIPPED] xe_migrate_sanity_kunit =============
[18:10:35] ================== xe_validate_ccs_kunit ==================
[18:10:35] ============= [SKIPPED] xe_validate_ccs_kunit ==============
[18:10:35] =================== [SKIPPED] xe_migrate ===================
[18:10:35] ================== xe_dma_buf (1 subtest) ==================
[18:10:35] ==================== xe_dma_buf_kunit =====================
[18:10:35] ================ [SKIPPED] xe_dma_buf_kunit ================
[18:10:35] =================== [SKIPPED] xe_dma_buf ===================
[18:10:35] ================= xe_bo_shrink (1 subtest) =================
[18:10:35] =================== xe_bo_shrink_kunit ====================
[18:10:35] =============== [SKIPPED] xe_bo_shrink_kunit ===============
[18:10:35] ================== [SKIPPED] xe_bo_shrink ==================
[18:10:35] ==================== xe_bo (2 subtests) ====================
[18:10:35] ================== xe_ccs_migrate_kunit ===================
[18:10:35] ============== [SKIPPED] xe_ccs_migrate_kunit ==============
[18:10:35] ==================== xe_bo_evict_kunit ====================
[18:10:35] =============== [SKIPPED] xe_bo_evict_kunit ================
[18:10:35] ===================== [SKIPPED] xe_bo ======================
[18:10:35] ==================== args (13 subtests) ====================
[18:10:35] [PASSED] count_args_test
[18:10:35] [PASSED] call_args_example
[18:10:35] [PASSED] call_args_test
[18:10:35] [PASSED] drop_first_arg_example
[18:10:35] [PASSED] drop_first_arg_test
[18:10:35] [PASSED] first_arg_example
[18:10:35] [PASSED] first_arg_test
[18:10:35] [PASSED] last_arg_example
[18:10:35] [PASSED] last_arg_test
[18:10:35] [PASSED] pick_arg_example
[18:10:35] [PASSED] if_args_example
[18:10:35] [PASSED] if_args_test
[18:10:35] [PASSED] sep_comma_example
[18:10:35] ====================== [PASSED] args =======================
[18:10:35] =================== xe_pci (3 subtests) ====================
[18:10:35] ==================== check_graphics_ip ====================
[18:10:35] [PASSED] 12.00 Xe_LP
[18:10:35] [PASSED] 12.10 Xe_LP+
[18:10:35] [PASSED] 12.55 Xe_HPG
[18:10:35] [PASSED] 12.60 Xe_HPC
[18:10:35] [PASSED] 12.70 Xe_LPG
[18:10:35] [PASSED] 12.71 Xe_LPG
[18:10:35] [PASSED] 12.74 Xe_LPG+
[18:10:35] [PASSED] 20.01 Xe2_HPG
[18:10:35] [PASSED] 20.02 Xe2_HPG
[18:10:35] [PASSED] 20.04 Xe2_LPG
[18:10:35] [PASSED] 30.00 Xe3_LPG
[18:10:35] [PASSED] 30.01 Xe3_LPG
[18:10:35] [PASSED] 30.03 Xe3_LPG
[18:10:35] [PASSED] 30.04 Xe3_LPG
[18:10:35] [PASSED] 30.05 Xe3_LPG
[18:10:35] [PASSED] 35.10 Xe3p_LPG
[18:10:35] [PASSED] 35.11 Xe3p_XPC
[18:10:35] ================ [PASSED] check_graphics_ip ================
[18:10:35] ===================== check_media_ip ======================
[18:10:35] [PASSED] 12.00 Xe_M
[18:10:35] [PASSED] 12.55 Xe_HPM
[18:10:35] [PASSED] 13.00 Xe_LPM+
[18:10:35] [PASSED] 13.01 Xe2_HPM
[18:10:35] [PASSED] 20.00 Xe2_LPM
[18:10:35] [PASSED] 30.00 Xe3_LPM
[18:10:35] [PASSED] 30.02 Xe3_LPM
[18:10:35] [PASSED] 35.00 Xe3p_LPM
[18:10:35] [PASSED] 35.03 Xe3p_HPM
[18:10:35] ================= [PASSED] check_media_ip ==================
[18:10:35] =================== check_platform_desc ===================
[18:10:35] [PASSED] 0x9A60 (TIGERLAKE)
[18:10:35] [PASSED] 0x9A68 (TIGERLAKE)
[18:10:35] [PASSED] 0x9A70 (TIGERLAKE)
[18:10:35] [PASSED] 0x9A40 (TIGERLAKE)
[18:10:35] [PASSED] 0x9A49 (TIGERLAKE)
[18:10:35] [PASSED] 0x9A59 (TIGERLAKE)
[18:10:35] [PASSED] 0x9A78 (TIGERLAKE)
[18:10:35] [PASSED] 0x9AC0 (TIGERLAKE)
[18:10:35] [PASSED] 0x9AC9 (TIGERLAKE)
[18:10:35] [PASSED] 0x9AD9 (TIGERLAKE)
[18:10:35] [PASSED] 0x9AF8 (TIGERLAKE)
[18:10:35] [PASSED] 0x4C80 (ROCKETLAKE)
[18:10:35] [PASSED] 0x4C8A (ROCKETLAKE)
[18:10:35] [PASSED] 0x4C8B (ROCKETLAKE)
[18:10:35] [PASSED] 0x4C8C (ROCKETLAKE)
[18:10:35] [PASSED] 0x4C90 (ROCKETLAKE)
[18:10:35] [PASSED] 0x4C9A (ROCKETLAKE)
[18:10:35] [PASSED] 0x4680 (ALDERLAKE_S)
[18:10:35] [PASSED] 0x4682 (ALDERLAKE_S)
[18:10:35] [PASSED] 0x4688 (ALDERLAKE_S)
[18:10:35] [PASSED] 0x468A (ALDERLAKE_S)
[18:10:35] [PASSED] 0x468B (ALDERLAKE_S)
[18:10:35] [PASSED] 0x4690 (ALDERLAKE_S)
[18:10:35] [PASSED] 0x4692 (ALDERLAKE_S)
[18:10:35] [PASSED] 0x4693 (ALDERLAKE_S)
[18:10:35] [PASSED] 0x46A0 (ALDERLAKE_P)
[18:10:35] [PASSED] 0x46A1 (ALDERLAKE_P)
[18:10:35] [PASSED] 0x46A2 (ALDERLAKE_P)
[18:10:35] [PASSED] 0x46A3 (ALDERLAKE_P)
[18:10:35] [PASSED] 0x46A6 (ALDERLAKE_P)
[18:10:35] [PASSED] 0x46A8 (ALDERLAKE_P)
[18:10:35] [PASSED] 0x46AA (ALDERLAKE_P)
[18:10:35] [PASSED] 0x462A (ALDERLAKE_P)
[18:10:35] [PASSED] 0x4626 (ALDERLAKE_P)
stty: 'standard input': Inappropriate ioctl for device
[18:10:35] [PASSED] 0x4628 (ALDERLAKE_P)
[18:10:35] [PASSED] 0x46B0 (ALDERLAKE_P)
[18:10:35] [PASSED] 0x46B1 (ALDERLAKE_P)
[18:10:35] [PASSED] 0x46B2 (ALDERLAKE_P)
[18:10:35] [PASSED] 0x46B3 (ALDERLAKE_P)
[18:10:35] [PASSED] 0x46C0 (ALDERLAKE_P)
[18:10:35] [PASSED] 0x46C1 (ALDERLAKE_P)
[18:10:35] [PASSED] 0x46C2 (ALDERLAKE_P)
[18:10:35] [PASSED] 0x46C3 (ALDERLAKE_P)
[18:10:35] [PASSED] 0x46D0 (ALDERLAKE_N)
[18:10:35] [PASSED] 0x46D1 (ALDERLAKE_N)
[18:10:35] [PASSED] 0x46D2 (ALDERLAKE_N)
[18:10:35] [PASSED] 0x46D3 (ALDERLAKE_N)
[18:10:35] [PASSED] 0x46D4 (ALDERLAKE_N)
[18:10:35] [PASSED] 0xA721 (ALDERLAKE_P)
[18:10:35] [PASSED] 0xA7A1 (ALDERLAKE_P)
[18:10:35] [PASSED] 0xA7A9 (ALDERLAKE_P)
[18:10:35] [PASSED] 0xA7AC (ALDERLAKE_P)
[18:10:35] [PASSED] 0xA7AD (ALDERLAKE_P)
[18:10:35] [PASSED] 0xA720 (ALDERLAKE_P)
[18:10:35] [PASSED] 0xA7A0 (ALDERLAKE_P)
[18:10:35] [PASSED] 0xA7A8 (ALDERLAKE_P)
[18:10:35] [PASSED] 0xA7AA (ALDERLAKE_P)
[18:10:35] [PASSED] 0xA7AB (ALDERLAKE_P)
[18:10:35] [PASSED] 0xA780 (ALDERLAKE_S)
[18:10:35] [PASSED] 0xA781 (ALDERLAKE_S)
[18:10:35] [PASSED] 0xA782 (ALDERLAKE_S)
[18:10:35] [PASSED] 0xA783 (ALDERLAKE_S)
[18:10:35] [PASSED] 0xA788 (ALDERLAKE_S)
[18:10:35] [PASSED] 0xA789 (ALDERLAKE_S)
[18:10:35] [PASSED] 0xA78A (ALDERLAKE_S)
[18:10:35] [PASSED] 0xA78B (ALDERLAKE_S)
[18:10:35] [PASSED] 0x4905 (DG1)
[18:10:35] [PASSED] 0x4906 (DG1)
[18:10:35] [PASSED] 0x4907 (DG1)
[18:10:35] [PASSED] 0x4908 (DG1)
[18:10:35] [PASSED] 0x4909 (DG1)
[18:10:35] [PASSED] 0x56C0 (DG2)
[18:10:35] [PASSED] 0x56C2 (DG2)
[18:10:35] [PASSED] 0x56C1 (DG2)
[18:10:35] [PASSED] 0x7D51 (METEORLAKE)
[18:10:35] [PASSED] 0x7DD1 (METEORLAKE)
[18:10:35] [PASSED] 0x7D41 (METEORLAKE)
[18:10:35] [PASSED] 0x7D67 (METEORLAKE)
[18:10:35] [PASSED] 0xB640 (METEORLAKE)
[18:10:35] [PASSED] 0x56A0 (DG2)
[18:10:35] [PASSED] 0x56A1 (DG2)
[18:10:35] [PASSED] 0x56A2 (DG2)
[18:10:35] [PASSED] 0x56BE (DG2)
[18:10:35] [PASSED] 0x56BF (DG2)
[18:10:35] [PASSED] 0x5690 (DG2)
[18:10:35] [PASSED] 0x5691 (DG2)
[18:10:35] [PASSED] 0x5692 (DG2)
[18:10:35] [PASSED] 0x56A5 (DG2)
[18:10:35] [PASSED] 0x56A6 (DG2)
[18:10:35] [PASSED] 0x56B0 (DG2)
[18:10:35] [PASSED] 0x56B1 (DG2)
[18:10:35] [PASSED] 0x56BA (DG2)
[18:10:35] [PASSED] 0x56BB (DG2)
[18:10:35] [PASSED] 0x56BC (DG2)
[18:10:35] [PASSED] 0x56BD (DG2)
[18:10:35] [PASSED] 0x5693 (DG2)
[18:10:35] [PASSED] 0x5694 (DG2)
[18:10:35] [PASSED] 0x5695 (DG2)
[18:10:35] [PASSED] 0x56A3 (DG2)
[18:10:35] [PASSED] 0x56A4 (DG2)
[18:10:35] [PASSED] 0x56B2 (DG2)
[18:10:35] [PASSED] 0x56B3 (DG2)
[18:10:35] [PASSED] 0x5696 (DG2)
[18:10:35] [PASSED] 0x5697 (DG2)
[18:10:35] [PASSED] 0xB69 (PVC)
[18:10:35] [PASSED] 0xB6E (PVC)
[18:10:35] [PASSED] 0xBD4 (PVC)
[18:10:35] [PASSED] 0xBD5 (PVC)
[18:10:35] [PASSED] 0xBD6 (PVC)
[18:10:35] [PASSED] 0xBD7 (PVC)
[18:10:35] [PASSED] 0xBD8 (PVC)
[18:10:35] [PASSED] 0xBD9 (PVC)
[18:10:35] [PASSED] 0xBDA (PVC)
[18:10:35] [PASSED] 0xBDB (PVC)
[18:10:35] [PASSED] 0xBE0 (PVC)
[18:10:35] [PASSED] 0xBE1 (PVC)
[18:10:35] [PASSED] 0xBE5 (PVC)
[18:10:35] [PASSED] 0x7D40 (METEORLAKE)
[18:10:35] [PASSED] 0x7D45 (METEORLAKE)
[18:10:35] [PASSED] 0x7D55 (METEORLAKE)
[18:10:35] [PASSED] 0x7D60 (METEORLAKE)
[18:10:35] [PASSED] 0x7DD5 (METEORLAKE)
[18:10:35] [PASSED] 0x6420 (LUNARLAKE)
[18:10:35] [PASSED] 0x64A0 (LUNARLAKE)
[18:10:35] [PASSED] 0x64B0 (LUNARLAKE)
[18:10:35] [PASSED] 0xE202 (BATTLEMAGE)
[18:10:35] [PASSED] 0xE209 (BATTLEMAGE)
[18:10:35] [PASSED] 0xE20B (BATTLEMAGE)
[18:10:35] [PASSED] 0xE20C (BATTLEMAGE)
[18:10:35] [PASSED] 0xE20D (BATTLEMAGE)
[18:10:35] [PASSED] 0xE210 (BATTLEMAGE)
[18:10:35] [PASSED] 0xE211 (BATTLEMAGE)
[18:10:35] [PASSED] 0xE212 (BATTLEMAGE)
[18:10:35] [PASSED] 0xE216 (BATTLEMAGE)
[18:10:35] [PASSED] 0xE220 (BATTLEMAGE)
[18:10:35] [PASSED] 0xE221 (BATTLEMAGE)
[18:10:35] [PASSED] 0xE222 (BATTLEMAGE)
[18:10:35] [PASSED] 0xE223 (BATTLEMAGE)
[18:10:35] [PASSED] 0xB080 (PANTHERLAKE)
[18:10:35] [PASSED] 0xB081 (PANTHERLAKE)
[18:10:35] [PASSED] 0xB082 (PANTHERLAKE)
[18:10:35] [PASSED] 0xB083 (PANTHERLAKE)
[18:10:35] [PASSED] 0xB084 (PANTHERLAKE)
[18:10:35] [PASSED] 0xB085 (PANTHERLAKE)
[18:10:35] [PASSED] 0xB086 (PANTHERLAKE)
[18:10:35] [PASSED] 0xB087 (PANTHERLAKE)
[18:10:35] [PASSED] 0xB08F (PANTHERLAKE)
[18:10:35] [PASSED] 0xB090 (PANTHERLAKE)
[18:10:35] [PASSED] 0xB0A0 (PANTHERLAKE)
[18:10:35] [PASSED] 0xB0B0 (PANTHERLAKE)
[18:10:35] [PASSED] 0xFD80 (PANTHERLAKE)
[18:10:35] [PASSED] 0xFD81 (PANTHERLAKE)
[18:10:35] [PASSED] 0xD740 (NOVALAKE_S)
[18:10:35] [PASSED] 0xD741 (NOVALAKE_S)
[18:10:35] [PASSED] 0xD742 (NOVALAKE_S)
[18:10:35] [PASSED] 0xD743 (NOVALAKE_S)
[18:10:35] [PASSED] 0xD744 (NOVALAKE_S)
[18:10:35] [PASSED] 0xD745 (NOVALAKE_S)
[18:10:35] [PASSED] 0x674C (CRESCENTISLAND)
[18:10:35] [PASSED] 0xD750 (NOVALAKE_P)
[18:10:35] [PASSED] 0xD751 (NOVALAKE_P)
[18:10:35] [PASSED] 0xD752 (NOVALAKE_P)
[18:10:35] [PASSED] 0xD753 (NOVALAKE_P)
[18:10:35] [PASSED] 0xD754 (NOVALAKE_P)
[18:10:35] [PASSED] 0xD755 (NOVALAKE_P)
[18:10:35] [PASSED] 0xD756 (NOVALAKE_P)
[18:10:35] [PASSED] 0xD757 (NOVALAKE_P)
[18:10:35] [PASSED] 0xD75F (NOVALAKE_P)
[18:10:35] =============== [PASSED] check_platform_desc ===============
[18:10:35] ===================== [PASSED] xe_pci ======================
[18:10:35] =================== xe_rtp (2 subtests) ====================
[18:10:35] =============== xe_rtp_process_to_sr_tests ================
[18:10:35] [PASSED] coalesce-same-reg
[18:10:35] [PASSED] no-match-no-add
[18:10:35] [PASSED] match-or
[18:10:35] [PASSED] match-or-xfail
[18:10:35] [PASSED] no-match-no-add-multiple-rules
[18:10:35] [PASSED] two-regs-two-entries
[18:10:35] [PASSED] clr-one-set-other
[18:10:35] [PASSED] set-field
[18:10:35] [PASSED] conflict-duplicate
[18:10:35] [PASSED] conflict-not-disjoint
[18:10:35] [PASSED] conflict-reg-type
[18:10:35] =========== [PASSED] xe_rtp_process_to_sr_tests ============
[18:10:35] ================== xe_rtp_process_tests ===================
[18:10:35] [PASSED] active1
[18:10:35] [PASSED] active2
[18:10:35] [PASSED] active-inactive
[18:10:35] [PASSED] inactive-active
[18:10:35] [PASSED] inactive-1st_or_active-inactive
[18:10:35] [PASSED] inactive-2nd_or_active-inactive
[18:10:35] [PASSED] inactive-last_or_active-inactive
[18:10:35] [PASSED] inactive-no_or_active-inactive
[18:10:35] ============== [PASSED] xe_rtp_process_tests ===============
[18:10:35] ===================== [PASSED] xe_rtp ======================
[18:10:35] ==================== xe_wa (1 subtest) =====================
[18:10:35] ======================== xe_wa_gt =========================
[18:10:35] [PASSED] TIGERLAKE B0
[18:10:35] [PASSED] DG1 A0
[18:10:35] [PASSED] DG1 B0
[18:10:35] [PASSED] ALDERLAKE_S A0
[18:10:35] [PASSED] ALDERLAKE_S B0
[18:10:35] [PASSED] ALDERLAKE_S C0
[18:10:35] [PASSED] ALDERLAKE_S D0
[18:10:35] [PASSED] ALDERLAKE_P A0
[18:10:35] [PASSED] ALDERLAKE_P B0
[18:10:35] [PASSED] ALDERLAKE_P C0
[18:10:35] [PASSED] ALDERLAKE_S RPLS D0
[18:10:35] [PASSED] ALDERLAKE_P RPLU E0
[18:10:35] [PASSED] DG2 G10 C0
[18:10:35] [PASSED] DG2 G11 B1
[18:10:35] [PASSED] DG2 G12 A1
[18:10:35] [PASSED] METEORLAKE 12.70(Xe_LPG) A0 13.00(Xe_LPM+) A0
[18:10:35] [PASSED] METEORLAKE 12.71(Xe_LPG) A0 13.00(Xe_LPM+) A0
[18:10:35] [PASSED] METEORLAKE 12.74(Xe_LPG+) A0 13.00(Xe_LPM+) A0
[18:10:35] [PASSED] LUNARLAKE 20.04(Xe2_LPG) A0 20.00(Xe2_LPM) A0
[18:10:35] [PASSED] LUNARLAKE 20.04(Xe2_LPG) B0 20.00(Xe2_LPM) A0
[18:10:35] [PASSED] BATTLEMAGE 20.01(Xe2_HPG) A0 13.01(Xe2_HPM) A1
[18:10:35] [PASSED] PANTHERLAKE 30.00(Xe3_LPG) A0 30.00(Xe3_LPM) A0
[18:10:35] ==================== [PASSED] xe_wa_gt =====================
[18:10:35] ====================== [PASSED] xe_wa ======================
[18:10:35] ============================================================
[18:10:35] Testing complete. Ran 522 tests: passed: 504, skipped: 18
[18:10:35] Elapsed time: 36.432s total, 4.184s configuring, 31.730s building, 0.490s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig
[18:10:35] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[18:10:37] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[18:11:02] Starting KUnit Kernel (1/1)...
[18:11:02] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[18:11:03] ============ drm_test_pick_cmdline (2 subtests) ============
[18:11:03] [PASSED] drm_test_pick_cmdline_res_1920_1080_60
[18:11:03] =============== drm_test_pick_cmdline_named ===============
[18:11:03] [PASSED] NTSC
[18:11:03] [PASSED] NTSC-J
[18:11:03] [PASSED] PAL
[18:11:03] [PASSED] PAL-M
[18:11:03] =========== [PASSED] drm_test_pick_cmdline_named ===========
[18:11:03] ============== [PASSED] drm_test_pick_cmdline ==============
[18:11:03] == drm_test_atomic_get_connector_for_encoder (1 subtest) ===
[18:11:03] [PASSED] drm_test_drm_atomic_get_connector_for_encoder
[18:11:03] ==== [PASSED] drm_test_atomic_get_connector_for_encoder ====
[18:11:03] =========== drm_validate_clone_mode (2 subtests) ===========
[18:11:03] ============== drm_test_check_in_clone_mode ===============
[18:11:03] [PASSED] in_clone_mode
[18:11:03] [PASSED] not_in_clone_mode
[18:11:03] ========== [PASSED] drm_test_check_in_clone_mode ===========
[18:11:03] =============== drm_test_check_valid_clones ===============
[18:11:03] [PASSED] not_in_clone_mode
[18:11:03] [PASSED] valid_clone
[18:11:03] [PASSED] invalid_clone
[18:11:03] =========== [PASSED] drm_test_check_valid_clones ===========
[18:11:03] ============= [PASSED] drm_validate_clone_mode =============
[18:11:03] ============= drm_validate_modeset (1 subtest) =============
[18:11:03] [PASSED] drm_test_check_connector_changed_modeset
[18:11:03] ============== [PASSED] drm_validate_modeset ===============
[18:11:03] ====== drm_test_bridge_get_current_state (2 subtests) ======
[18:11:03] [PASSED] drm_test_drm_bridge_get_current_state_atomic
[18:11:03] [PASSED] drm_test_drm_bridge_get_current_state_legacy
[18:11:03] ======== [PASSED] drm_test_bridge_get_current_state ========
[18:11:03] ====== drm_test_bridge_helper_reset_crtc (3 subtests) ======
[18:11:03] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic
[18:11:03] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic_disabled
[18:11:03] [PASSED] drm_test_drm_bridge_helper_reset_crtc_legacy
[18:11:03] ======== [PASSED] drm_test_bridge_helper_reset_crtc ========
[18:11:03] ============== drm_bridge_alloc (2 subtests) ===============
[18:11:03] [PASSED] drm_test_drm_bridge_alloc_basic
[18:11:03] [PASSED] drm_test_drm_bridge_alloc_get_put
[18:11:03] ================ [PASSED] drm_bridge_alloc =================
[18:11:03] ============= drm_cmdline_parser (40 subtests) =============
[18:11:03] [PASSED] drm_test_cmdline_force_d_only
[18:11:03] [PASSED] drm_test_cmdline_force_D_only_dvi
[18:11:03] [PASSED] drm_test_cmdline_force_D_only_hdmi
[18:11:03] [PASSED] drm_test_cmdline_force_D_only_not_digital
[18:11:03] [PASSED] drm_test_cmdline_force_e_only
[18:11:03] [PASSED] drm_test_cmdline_res
[18:11:03] [PASSED] drm_test_cmdline_res_vesa
[18:11:03] [PASSED] drm_test_cmdline_res_vesa_rblank
[18:11:03] [PASSED] drm_test_cmdline_res_rblank
[18:11:03] [PASSED] drm_test_cmdline_res_bpp
[18:11:03] [PASSED] drm_test_cmdline_res_refresh
[18:11:03] [PASSED] drm_test_cmdline_res_bpp_refresh
[18:11:03] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced
[18:11:03] [PASSED] drm_test_cmdline_res_bpp_refresh_margins
[18:11:03] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off
[18:11:03] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on
[18:11:03] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog
[18:11:03] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital
[18:11:03] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on
[18:11:03] [PASSED] drm_test_cmdline_res_margins_force_on
[18:11:03] [PASSED] drm_test_cmdline_res_vesa_margins
[18:11:03] [PASSED] drm_test_cmdline_name
[18:11:03] [PASSED] drm_test_cmdline_name_bpp
[18:11:03] [PASSED] drm_test_cmdline_name_option
[18:11:03] [PASSED] drm_test_cmdline_name_bpp_option
[18:11:03] [PASSED] drm_test_cmdline_rotate_0
[18:11:03] [PASSED] drm_test_cmdline_rotate_90
[18:11:03] [PASSED] drm_test_cmdline_rotate_180
[18:11:03] [PASSED] drm_test_cmdline_rotate_270
[18:11:03] [PASSED] drm_test_cmdline_hmirror
[18:11:03] [PASSED] drm_test_cmdline_vmirror
[18:11:03] [PASSED] drm_test_cmdline_margin_options
[18:11:03] [PASSED] drm_test_cmdline_multiple_options
[18:11:03] [PASSED] drm_test_cmdline_bpp_extra_and_option
[18:11:03] [PASSED] drm_test_cmdline_extra_and_option
[18:11:03] [PASSED] drm_test_cmdline_freestanding_options
[18:11:03] [PASSED] drm_test_cmdline_freestanding_force_e_and_options
[18:11:03] [PASSED] drm_test_cmdline_panel_orientation
[18:11:03] ================ drm_test_cmdline_invalid =================
[18:11:03] [PASSED] margin_only
[18:11:03] [PASSED] interlace_only
[18:11:03] [PASSED] res_missing_x
[18:11:03] [PASSED] res_missing_y
[18:11:03] [PASSED] res_bad_y
[18:11:03] [PASSED] res_missing_y_bpp
[18:11:03] [PASSED] res_bad_bpp
[18:11:03] [PASSED] res_bad_refresh
[18:11:03] [PASSED] res_bpp_refresh_force_on_off
[18:11:03] [PASSED] res_invalid_mode
[18:11:03] [PASSED] res_bpp_wrong_place_mode
[18:11:03] [PASSED] name_bpp_refresh
[18:11:03] [PASSED] name_refresh
[18:11:03] [PASSED] name_refresh_wrong_mode
[18:11:03] [PASSED] name_refresh_invalid_mode
[18:11:03] [PASSED] rotate_multiple
[18:11:03] [PASSED] rotate_invalid_val
[18:11:03] [PASSED] rotate_truncated
[18:11:03] [PASSED] invalid_option
[18:11:03] [PASSED] invalid_tv_option
[18:11:03] [PASSED] truncated_tv_option
[18:11:03] ============ [PASSED] drm_test_cmdline_invalid =============
[18:11:03] =============== drm_test_cmdline_tv_options ===============
[18:11:03] [PASSED] NTSC
[18:11:03] [PASSED] NTSC_443
[18:11:03] [PASSED] NTSC_J
[18:11:03] [PASSED] PAL
[18:11:03] [PASSED] PAL_M
[18:11:03] [PASSED] PAL_N
[18:11:03] [PASSED] SECAM
[18:11:03] [PASSED] MONO_525
[18:11:03] [PASSED] MONO_625
[18:11:03] =========== [PASSED] drm_test_cmdline_tv_options ===========
[18:11:03] =============== [PASSED] drm_cmdline_parser ================
[18:11:03] ========== drmm_connector_hdmi_init (20 subtests) ==========
[18:11:03] [PASSED] drm_test_connector_hdmi_init_valid
[18:11:03] [PASSED] drm_test_connector_hdmi_init_bpc_8
[18:11:03] [PASSED] drm_test_connector_hdmi_init_bpc_10
[18:11:03] [PASSED] drm_test_connector_hdmi_init_bpc_12
[18:11:03] [PASSED] drm_test_connector_hdmi_init_bpc_invalid
[18:11:03] [PASSED] drm_test_connector_hdmi_init_bpc_null
[18:11:03] [PASSED] drm_test_connector_hdmi_init_formats_empty
[18:11:03] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb
[18:11:03] === drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[18:11:03] [PASSED] supported_formats=0x9 yuv420_allowed=1
[18:11:03] [PASSED] supported_formats=0x9 yuv420_allowed=0
[18:11:03] [PASSED] supported_formats=0x3 yuv420_allowed=1
[18:11:03] [PASSED] supported_formats=0x3 yuv420_allowed=0
[18:11:03] === [PASSED] drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[18:11:03] [PASSED] drm_test_connector_hdmi_init_null_ddc
[18:11:03] [PASSED] drm_test_connector_hdmi_init_null_product
[18:11:03] [PASSED] drm_test_connector_hdmi_init_null_vendor
[18:11:03] [PASSED] drm_test_connector_hdmi_init_product_length_exact
[18:11:03] [PASSED] drm_test_connector_hdmi_init_product_length_too_long
[18:11:03] [PASSED] drm_test_connector_hdmi_init_product_valid
[18:11:03] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact
[18:11:03] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long
[18:11:03] [PASSED] drm_test_connector_hdmi_init_vendor_valid
[18:11:03] ========= drm_test_connector_hdmi_init_type_valid =========
[18:11:03] [PASSED] HDMI-A
[18:11:03] [PASSED] HDMI-B
[18:11:03] ===== [PASSED] drm_test_connector_hdmi_init_type_valid =====
[18:11:03] ======== drm_test_connector_hdmi_init_type_invalid ========
[18:11:03] [PASSED] Unknown
[18:11:03] [PASSED] VGA
[18:11:03] [PASSED] DVI-I
[18:11:03] [PASSED] DVI-D
[18:11:03] [PASSED] DVI-A
[18:11:03] [PASSED] Composite
[18:11:03] [PASSED] SVIDEO
[18:11:03] [PASSED] LVDS
[18:11:03] [PASSED] Component
[18:11:03] [PASSED] DIN
[18:11:03] [PASSED] DP
[18:11:03] [PASSED] TV
[18:11:03] [PASSED] eDP
[18:11:03] [PASSED] Virtual
[18:11:03] [PASSED] DSI
[18:11:03] [PASSED] DPI
[18:11:03] [PASSED] Writeback
[18:11:03] [PASSED] SPI
[18:11:03] [PASSED] USB
[18:11:03] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ====
[18:11:03] ============ [PASSED] drmm_connector_hdmi_init =============
[18:11:03] ============= drmm_connector_init (3 subtests) =============
[18:11:03] [PASSED] drm_test_drmm_connector_init
[18:11:03] [PASSED] drm_test_drmm_connector_init_null_ddc
[18:11:03] ========= drm_test_drmm_connector_init_type_valid =========
[18:11:03] [PASSED] Unknown
[18:11:03] [PASSED] VGA
[18:11:03] [PASSED] DVI-I
[18:11:03] [PASSED] DVI-D
[18:11:03] [PASSED] DVI-A
[18:11:03] [PASSED] Composite
[18:11:03] [PASSED] SVIDEO
[18:11:03] [PASSED] LVDS
[18:11:03] [PASSED] Component
[18:11:03] [PASSED] DIN
[18:11:03] [PASSED] DP
[18:11:03] [PASSED] HDMI-A
[18:11:03] [PASSED] HDMI-B
[18:11:03] [PASSED] TV
[18:11:03] [PASSED] eDP
[18:11:03] [PASSED] Virtual
[18:11:03] [PASSED] DSI
[18:11:03] [PASSED] DPI
[18:11:03] [PASSED] Writeback
[18:11:03] [PASSED] SPI
[18:11:03] [PASSED] USB
[18:11:03] ===== [PASSED] drm_test_drmm_connector_init_type_valid =====
[18:11:03] =============== [PASSED] drmm_connector_init ===============
[18:11:03] ========= drm_connector_dynamic_init (6 subtests) ==========
[18:11:03] [PASSED] drm_test_drm_connector_dynamic_init
[18:11:03] [PASSED] drm_test_drm_connector_dynamic_init_null_ddc
[18:11:03] [PASSED] drm_test_drm_connector_dynamic_init_not_added
[18:11:03] [PASSED] drm_test_drm_connector_dynamic_init_properties
[18:11:03] ===== drm_test_drm_connector_dynamic_init_type_valid ======
[18:11:03] [PASSED] Unknown
[18:11:03] [PASSED] VGA
[18:11:03] [PASSED] DVI-I
[18:11:03] [PASSED] DVI-D
[18:11:03] [PASSED] DVI-A
[18:11:03] [PASSED] Composite
[18:11:03] [PASSED] SVIDEO
[18:11:03] [PASSED] LVDS
[18:11:03] [PASSED] Component
[18:11:03] [PASSED] DIN
[18:11:03] [PASSED] DP
[18:11:03] [PASSED] HDMI-A
[18:11:03] [PASSED] HDMI-B
[18:11:03] [PASSED] TV
[18:11:03] [PASSED] eDP
[18:11:03] [PASSED] Virtual
[18:11:03] [PASSED] DSI
[18:11:03] [PASSED] DPI
[18:11:03] [PASSED] Writeback
[18:11:03] [PASSED] SPI
[18:11:03] [PASSED] USB
[18:11:03] = [PASSED] drm_test_drm_connector_dynamic_init_type_valid ==
[18:11:03] ======== drm_test_drm_connector_dynamic_init_name =========
[18:11:03] [PASSED] Unknown
[18:11:03] [PASSED] VGA
[18:11:03] [PASSED] DVI-I
[18:11:03] [PASSED] DVI-D
[18:11:03] [PASSED] DVI-A
[18:11:03] [PASSED] Composite
[18:11:03] [PASSED] SVIDEO
[18:11:03] [PASSED] LVDS
[18:11:03] [PASSED] Component
[18:11:03] [PASSED] DIN
[18:11:03] [PASSED] DP
[18:11:03] [PASSED] HDMI-A
[18:11:03] [PASSED] HDMI-B
[18:11:03] [PASSED] TV
[18:11:03] [PASSED] eDP
[18:11:03] [PASSED] Virtual
[18:11:03] [PASSED] DSI
[18:11:03] [PASSED] DPI
[18:11:03] [PASSED] Writeback
[18:11:03] [PASSED] SPI
[18:11:03] [PASSED] USB
[18:11:03] ==== [PASSED] drm_test_drm_connector_dynamic_init_name =====
[18:11:03] =========== [PASSED] drm_connector_dynamic_init ============
[18:11:03] ==== drm_connector_dynamic_register_early (4 subtests) =====
[18:11:03] [PASSED] drm_test_drm_connector_dynamic_register_early_on_list
[18:11:03] [PASSED] drm_test_drm_connector_dynamic_register_early_defer
[18:11:03] [PASSED] drm_test_drm_connector_dynamic_register_early_no_init
[18:11:03] [PASSED] drm_test_drm_connector_dynamic_register_early_no_mode_object
[18:11:03] ====== [PASSED] drm_connector_dynamic_register_early =======
[18:11:03] ======= drm_connector_dynamic_register (7 subtests) ========
[18:11:03] [PASSED] drm_test_drm_connector_dynamic_register_on_list
[18:11:03] [PASSED] drm_test_drm_connector_dynamic_register_no_defer
[18:11:03] [PASSED] drm_test_drm_connector_dynamic_register_no_init
[18:11:03] [PASSED] drm_test_drm_connector_dynamic_register_mode_object
[18:11:03] [PASSED] drm_test_drm_connector_dynamic_register_sysfs
[18:11:03] [PASSED] drm_test_drm_connector_dynamic_register_sysfs_name
[18:11:03] [PASSED] drm_test_drm_connector_dynamic_register_debugfs
[18:11:03] ========= [PASSED] drm_connector_dynamic_register ==========
[18:11:03] = drm_connector_attach_broadcast_rgb_property (2 subtests) =
[18:11:03] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property
[18:11:03] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector
[18:11:03] === [PASSED] drm_connector_attach_broadcast_rgb_property ===
[18:11:03] ========== drm_get_tv_mode_from_name (2 subtests) ==========
[18:11:03] ========== drm_test_get_tv_mode_from_name_valid ===========
[18:11:03] [PASSED] NTSC
[18:11:03] [PASSED] NTSC-443
[18:11:03] [PASSED] NTSC-J
[18:11:03] [PASSED] PAL
[18:11:03] [PASSED] PAL-M
[18:11:03] [PASSED] PAL-N
[18:11:03] [PASSED] SECAM
[18:11:03] [PASSED] Mono
[18:11:03] ====== [PASSED] drm_test_get_tv_mode_from_name_valid =======
[18:11:03] [PASSED] drm_test_get_tv_mode_from_name_truncated
[18:11:03] ============ [PASSED] drm_get_tv_mode_from_name ============
[18:11:03] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) =
[18:11:03] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb
[18:11:03] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc
[18:11:03] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1
[18:11:03] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc
[18:11:03] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1
[18:11:03] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double
[18:11:03] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid =
[18:11:03] [PASSED] VIC 96
[18:11:03] [PASSED] VIC 97
[18:11:03] [PASSED] VIC 101
[18:11:03] [PASSED] VIC 102
[18:11:03] [PASSED] VIC 106
[18:11:03] [PASSED] VIC 107
[18:11:03] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid ===
[18:11:03] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc
[18:11:03] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc
[18:11:03] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc
[18:11:03] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc
[18:11:03] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc
[18:11:03] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ====
[18:11:03] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) ==
[18:11:03] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name ====
[18:11:03] [PASSED] Automatic
[18:11:03] [PASSED] Full
[18:11:03] [PASSED] Limited 16:235
[18:11:03] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name ===
[18:11:03] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid
[18:11:03] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ====
[18:11:03] == drm_hdmi_connector_get_output_format_name (2 subtests) ==
[18:11:03] === drm_test_drm_hdmi_connector_get_output_format_name ====
[18:11:03] [PASSED] RGB
[18:11:03] [PASSED] YUV 4:2:0
[18:11:03] [PASSED] YUV 4:2:2
[18:11:03] [PASSED] YUV 4:4:4
[18:11:03] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name ===
[18:11:03] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid
[18:11:03] ==== [PASSED] drm_hdmi_connector_get_output_format_name ====
[18:11:03] ============= drm_damage_helper (21 subtests) ==============
[18:11:03] [PASSED] drm_test_damage_iter_no_damage
[18:11:03] [PASSED] drm_test_damage_iter_no_damage_fractional_src
[18:11:03] [PASSED] drm_test_damage_iter_no_damage_src_moved
[18:11:03] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved
[18:11:03] [PASSED] drm_test_damage_iter_no_damage_not_visible
[18:11:03] [PASSED] drm_test_damage_iter_no_damage_no_crtc
[18:11:03] [PASSED] drm_test_damage_iter_no_damage_no_fb
[18:11:03] [PASSED] drm_test_damage_iter_simple_damage
[18:11:03] [PASSED] drm_test_damage_iter_single_damage
[18:11:03] [PASSED] drm_test_damage_iter_single_damage_intersect_src
[18:11:03] [PASSED] drm_test_damage_iter_single_damage_outside_src
[18:11:03] [PASSED] drm_test_damage_iter_single_damage_fractional_src
[18:11:03] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src
[18:11:03] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src
[18:11:03] [PASSED] drm_test_damage_iter_single_damage_src_moved
[18:11:03] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved
[18:11:03] [PASSED] drm_test_damage_iter_damage
[18:11:03] [PASSED] drm_test_damage_iter_damage_one_intersect
[18:11:03] [PASSED] drm_test_damage_iter_damage_one_outside
[18:11:03] [PASSED] drm_test_damage_iter_damage_src_moved
[18:11:03] [PASSED] drm_test_damage_iter_damage_not_visible
[18:11:03] ================ [PASSED] drm_damage_helper ================
[18:11:03] ============== drm_dp_mst_helper (3 subtests) ==============
[18:11:03] ============== drm_test_dp_mst_calc_pbn_mode ==============
[18:11:03] [PASSED] Clock 154000 BPP 30 DSC disabled
[18:11:03] [PASSED] Clock 234000 BPP 30 DSC disabled
[18:11:03] [PASSED] Clock 297000 BPP 24 DSC disabled
[18:11:03] [PASSED] Clock 332880 BPP 24 DSC enabled
[18:11:03] [PASSED] Clock 324540 BPP 24 DSC enabled
[18:11:03] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ==========
[18:11:03] ============== drm_test_dp_mst_calc_pbn_div ===============
[18:11:03] [PASSED] Link rate 2000000 lane count 4
[18:11:03] [PASSED] Link rate 2000000 lane count 2
[18:11:03] [PASSED] Link rate 2000000 lane count 1
[18:11:03] [PASSED] Link rate 1350000 lane count 4
[18:11:03] [PASSED] Link rate 1350000 lane count 2
[18:11:03] [PASSED] Link rate 1350000 lane count 1
[18:11:03] [PASSED] Link rate 1000000 lane count 4
[18:11:03] [PASSED] Link rate 1000000 lane count 2
[18:11:03] [PASSED] Link rate 1000000 lane count 1
[18:11:03] [PASSED] Link rate 810000 lane count 4
[18:11:03] [PASSED] Link rate 810000 lane count 2
[18:11:03] [PASSED] Link rate 810000 lane count 1
[18:11:03] [PASSED] Link rate 540000 lane count 4
[18:11:03] [PASSED] Link rate 540000 lane count 2
[18:11:03] [PASSED] Link rate 540000 lane count 1
[18:11:03] [PASSED] Link rate 270000 lane count 4
[18:11:03] [PASSED] Link rate 270000 lane count 2
[18:11:03] [PASSED] Link rate 270000 lane count 1
[18:11:03] [PASSED] Link rate 162000 lane count 4
[18:11:03] [PASSED] Link rate 162000 lane count 2
[18:11:03] [PASSED] Link rate 162000 lane count 1
[18:11:03] ========== [PASSED] drm_test_dp_mst_calc_pbn_div ===========
[18:11:03] ========= drm_test_dp_mst_sideband_msg_req_decode =========
[18:11:03] [PASSED] DP_ENUM_PATH_RESOURCES with port number
[18:11:03] [PASSED] DP_POWER_UP_PHY with port number
[18:11:03] [PASSED] DP_POWER_DOWN_PHY with port number
[18:11:03] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks
[18:11:03] [PASSED] DP_ALLOCATE_PAYLOAD with port number
[18:11:03] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI
[18:11:03] [PASSED] DP_ALLOCATE_PAYLOAD with PBN
[18:11:03] [PASSED] DP_QUERY_PAYLOAD with port number
[18:11:03] [PASSED] DP_QUERY_PAYLOAD with VCPI
[18:11:03] [PASSED] DP_REMOTE_DPCD_READ with port number
[18:11:03] [PASSED] DP_REMOTE_DPCD_READ with DPCD address
[18:11:03] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes
[18:11:03] [PASSED] DP_REMOTE_DPCD_WRITE with port number
[18:11:03] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address
[18:11:03] [PASSED] DP_REMOTE_DPCD_WRITE with data array
[18:11:03] [PASSED] DP_REMOTE_I2C_READ with port number
[18:11:03] [PASSED] DP_REMOTE_I2C_READ with I2C device ID
[18:11:03] [PASSED] DP_REMOTE_I2C_READ with transactions array
[18:11:03] [PASSED] DP_REMOTE_I2C_WRITE with port number
[18:11:03] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID
[18:11:03] [PASSED] DP_REMOTE_I2C_WRITE with data array
[18:11:03] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID
[18:11:03] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID
[18:11:03] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event
[18:11:03] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event
[18:11:03] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior
[18:11:03] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior
[18:11:03] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode =====
[18:11:03] ================ [PASSED] drm_dp_mst_helper ================
[18:11:03] ================== drm_exec (7 subtests) ===================
[18:11:03] [PASSED] sanitycheck
[18:11:03] [PASSED] test_lock
[18:11:03] [PASSED] test_lock_unlock
[18:11:03] [PASSED] test_duplicates
[18:11:03] [PASSED] test_prepare
[18:11:03] [PASSED] test_prepare_array
[18:11:03] [PASSED] test_multiple_loops
[18:11:03] ==================== [PASSED] drm_exec =====================
[18:11:03] =========== drm_format_helper_test (17 subtests) ===========
[18:11:03] ============== drm_test_fb_xrgb8888_to_gray8 ==============
[18:11:03] [PASSED] single_pixel_source_buffer
[18:11:03] [PASSED] single_pixel_clip_rectangle
[18:11:03] [PASSED] well_known_colors
[18:11:03] [PASSED] destination_pitch
[18:11:03] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ==========
[18:11:03] ============= drm_test_fb_xrgb8888_to_rgb332 ==============
[18:11:03] [PASSED] single_pixel_source_buffer
[18:11:03] [PASSED] single_pixel_clip_rectangle
[18:11:03] [PASSED] well_known_colors
[18:11:03] [PASSED] destination_pitch
[18:11:03] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ==========
[18:11:03] ============= drm_test_fb_xrgb8888_to_rgb565 ==============
[18:11:03] [PASSED] single_pixel_source_buffer
[18:11:03] [PASSED] single_pixel_clip_rectangle
[18:11:03] [PASSED] well_known_colors
[18:11:03] [PASSED] destination_pitch
[18:11:03] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ==========
[18:11:03] ============ drm_test_fb_xrgb8888_to_xrgb1555 =============
[18:11:03] [PASSED] single_pixel_source_buffer
[18:11:03] [PASSED] single_pixel_clip_rectangle
[18:11:03] [PASSED] well_known_colors
[18:11:03] [PASSED] destination_pitch
[18:11:03] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 =========
[18:11:03] ============ drm_test_fb_xrgb8888_to_argb1555 =============
[18:11:03] [PASSED] single_pixel_source_buffer
[18:11:03] [PASSED] single_pixel_clip_rectangle
[18:11:03] [PASSED] well_known_colors
[18:11:03] [PASSED] destination_pitch
[18:11:03] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 =========
[18:11:03] ============ drm_test_fb_xrgb8888_to_rgba5551 =============
[18:11:03] [PASSED] single_pixel_source_buffer
[18:11:03] [PASSED] single_pixel_clip_rectangle
[18:11:03] [PASSED] well_known_colors
[18:11:03] [PASSED] destination_pitch
[18:11:03] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 =========
[18:11:03] ============= drm_test_fb_xrgb8888_to_rgb888 ==============
[18:11:03] [PASSED] single_pixel_source_buffer
[18:11:03] [PASSED] single_pixel_clip_rectangle
[18:11:03] [PASSED] well_known_colors
[18:11:03] [PASSED] destination_pitch
[18:11:03] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ==========
[18:11:03] ============= drm_test_fb_xrgb8888_to_bgr888 ==============
[18:11:03] [PASSED] single_pixel_source_buffer
[18:11:03] [PASSED] single_pixel_clip_rectangle
[18:11:03] [PASSED] well_known_colors
[18:11:03] [PASSED] destination_pitch
[18:11:03] ========= [PASSED] drm_test_fb_xrgb8888_to_bgr888 ==========
[18:11:03] ============ drm_test_fb_xrgb8888_to_argb8888 =============
[18:11:03] [PASSED] single_pixel_source_buffer
[18:11:03] [PASSED] single_pixel_clip_rectangle
[18:11:03] [PASSED] well_known_colors
[18:11:03] [PASSED] destination_pitch
[18:11:03] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 =========
[18:11:03] =========== drm_test_fb_xrgb8888_to_xrgb2101010 ===========
[18:11:03] [PASSED] single_pixel_source_buffer
[18:11:03] [PASSED] single_pixel_clip_rectangle
[18:11:03] [PASSED] well_known_colors
[18:11:03] [PASSED] destination_pitch
[18:11:03] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 =======
[18:11:03] =========== drm_test_fb_xrgb8888_to_argb2101010 ===========
[18:11:03] [PASSED] single_pixel_source_buffer
[18:11:03] [PASSED] single_pixel_clip_rectangle
[18:11:03] [PASSED] well_known_colors
[18:11:03] [PASSED] destination_pitch
[18:11:03] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 =======
[18:11:03] ============== drm_test_fb_xrgb8888_to_mono ===============
[18:11:03] [PASSED] single_pixel_source_buffer
[18:11:03] [PASSED] single_pixel_clip_rectangle
[18:11:03] [PASSED] well_known_colors
[18:11:03] [PASSED] destination_pitch
[18:11:03] ========== [PASSED] drm_test_fb_xrgb8888_to_mono ===========
[18:11:03] ==================== drm_test_fb_swab =====================
[18:11:03] [PASSED] single_pixel_source_buffer
[18:11:03] [PASSED] single_pixel_clip_rectangle
[18:11:03] [PASSED] well_known_colors
[18:11:03] [PASSED] destination_pitch
[18:11:03] ================ [PASSED] drm_test_fb_swab =================
[18:11:03] ============ drm_test_fb_xrgb8888_to_xbgr8888 =============
[18:11:03] [PASSED] single_pixel_source_buffer
[18:11:03] [PASSED] single_pixel_clip_rectangle
[18:11:03] [PASSED] well_known_colors
[18:11:03] [PASSED] destination_pitch
[18:11:03] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 =========
[18:11:03] ============ drm_test_fb_xrgb8888_to_abgr8888 =============
[18:11:03] [PASSED] single_pixel_source_buffer
[18:11:03] [PASSED] single_pixel_clip_rectangle
[18:11:03] [PASSED] well_known_colors
[18:11:03] [PASSED] destination_pitch
[18:11:03] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 =========
[18:11:03] ================= drm_test_fb_clip_offset =================
[18:11:03] [PASSED] pass through
[18:11:03] [PASSED] horizontal offset
[18:11:03] [PASSED] vertical offset
[18:11:03] [PASSED] horizontal and vertical offset
[18:11:03] [PASSED] horizontal offset (custom pitch)
[18:11:03] [PASSED] vertical offset (custom pitch)
[18:11:03] [PASSED] horizontal and vertical offset (custom pitch)
[18:11:03] ============= [PASSED] drm_test_fb_clip_offset =============
[18:11:03] =================== drm_test_fb_memcpy ====================
[18:11:03] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258)
[18:11:03] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258)
[18:11:03] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559)
[18:11:03] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258)
[18:11:03] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258)
[18:11:03] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559)
[18:11:03] [PASSED] well_known_colors: XB24 little-endian (0x34324258)
[18:11:03] [PASSED] well_known_colors: XRA8 little-endian (0x38415258)
[18:11:03] [PASSED] well_known_colors: YU24 little-endian (0x34325559)
[18:11:03] [PASSED] destination_pitch: XB24 little-endian (0x34324258)
[18:11:03] [PASSED] destination_pitch: XRA8 little-endian (0x38415258)
[18:11:03] [PASSED] destination_pitch: YU24 little-endian (0x34325559)
[18:11:03] =============== [PASSED] drm_test_fb_memcpy ================
[18:11:03] ============= [PASSED] drm_format_helper_test ==============
[18:11:03] ================= drm_format (18 subtests) =================
[18:11:03] [PASSED] drm_test_format_block_width_invalid
[18:11:03] [PASSED] drm_test_format_block_width_one_plane
[18:11:03] [PASSED] drm_test_format_block_width_two_plane
[18:11:03] [PASSED] drm_test_format_block_width_three_plane
[18:11:03] [PASSED] drm_test_format_block_width_tiled
[18:11:03] [PASSED] drm_test_format_block_height_invalid
[18:11:03] [PASSED] drm_test_format_block_height_one_plane
[18:11:03] [PASSED] drm_test_format_block_height_two_plane
[18:11:03] [PASSED] drm_test_format_block_height_three_plane
[18:11:03] [PASSED] drm_test_format_block_height_tiled
[18:11:03] [PASSED] drm_test_format_min_pitch_invalid
[18:11:03] [PASSED] drm_test_format_min_pitch_one_plane_8bpp
[18:11:03] [PASSED] drm_test_format_min_pitch_one_plane_16bpp
[18:11:03] [PASSED] drm_test_format_min_pitch_one_plane_24bpp
[18:11:03] [PASSED] drm_test_format_min_pitch_one_plane_32bpp
[18:11:03] [PASSED] drm_test_format_min_pitch_two_plane
[18:11:03] [PASSED] drm_test_format_min_pitch_three_plane_8bpp
[18:11:03] [PASSED] drm_test_format_min_pitch_tiled
[18:11:03] =================== [PASSED] drm_format ====================
[18:11:03] ============== drm_framebuffer (10 subtests) ===============
[18:11:03] ========== drm_test_framebuffer_check_src_coords ==========
[18:11:03] [PASSED] Success: source fits into fb
[18:11:03] [PASSED] Fail: overflowing fb with x-axis coordinate
[18:11:03] [PASSED] Fail: overflowing fb with y-axis coordinate
[18:11:03] [PASSED] Fail: overflowing fb with source width
[18:11:03] [PASSED] Fail: overflowing fb with source height
[18:11:03] ====== [PASSED] drm_test_framebuffer_check_src_coords ======
[18:11:03] [PASSED] drm_test_framebuffer_cleanup
[18:11:03] =============== drm_test_framebuffer_create ===============
[18:11:03] [PASSED] ABGR8888 normal sizes
[18:11:03] [PASSED] ABGR8888 max sizes
[18:11:03] [PASSED] ABGR8888 pitch greater than min required
[18:11:03] [PASSED] ABGR8888 pitch less than min required
[18:11:03] [PASSED] ABGR8888 Invalid width
[18:11:03] [PASSED] ABGR8888 Invalid buffer handle
[18:11:03] [PASSED] No pixel format
[18:11:03] [PASSED] ABGR8888 Width 0
[18:11:03] [PASSED] ABGR8888 Height 0
[18:11:03] [PASSED] ABGR8888 Out of bound height * pitch combination
[18:11:03] [PASSED] ABGR8888 Large buffer offset
[18:11:03] [PASSED] ABGR8888 Buffer offset for inexistent plane
[18:11:03] [PASSED] ABGR8888 Invalid flag
[18:11:03] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers
[18:11:03] [PASSED] ABGR8888 Valid buffer modifier
[18:11:03] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)
[18:11:03] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS
[18:11:03] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS
[18:11:03] [PASSED] NV12 Normal sizes
[18:11:03] [PASSED] NV12 Max sizes
[18:11:03] [PASSED] NV12 Invalid pitch
[18:11:03] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag
[18:11:03] [PASSED] NV12 different modifier per-plane
[18:11:03] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE
[18:11:03] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS
[18:11:03] [PASSED] NV12 Modifier for inexistent plane
[18:11:03] [PASSED] NV12 Handle for inexistent plane
[18:11:03] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS
[18:11:03] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier
[18:11:03] [PASSED] YVU420 Normal sizes
[18:11:03] [PASSED] YVU420 Max sizes
[18:11:03] [PASSED] YVU420 Invalid pitch
[18:11:03] [PASSED] YVU420 Different pitches
[18:11:03] [PASSED] YVU420 Different buffer offsets/pitches
[18:11:03] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS
[18:11:03] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS
[18:11:03] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS
[18:11:03] [PASSED] YVU420 Valid modifier
[18:11:03] [PASSED] YVU420 Different modifiers per plane
[18:11:03] [PASSED] YVU420 Modifier for inexistent plane
[18:11:03] [PASSED] YUV420_10BIT Invalid modifier(DRM_FORMAT_MOD_LINEAR)
[18:11:03] [PASSED] X0L2 Normal sizes
[18:11:03] [PASSED] X0L2 Max sizes
[18:11:03] [PASSED] X0L2 Invalid pitch
[18:11:03] [PASSED] X0L2 Pitch greater than minimum required
[18:11:03] [PASSED] X0L2 Handle for inexistent plane
[18:11:03] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set
[18:11:03] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set
[18:11:03] [PASSED] X0L2 Valid modifier
[18:11:03] [PASSED] X0L2 Modifier for inexistent plane
[18:11:03] =========== [PASSED] drm_test_framebuffer_create ===========
[18:11:03] [PASSED] drm_test_framebuffer_free
[18:11:03] [PASSED] drm_test_framebuffer_init
[18:11:03] [PASSED] drm_test_framebuffer_init_bad_format
[18:11:03] [PASSED] drm_test_framebuffer_init_dev_mismatch
[18:11:03] [PASSED] drm_test_framebuffer_lookup
[18:11:03] [PASSED] drm_test_framebuffer_lookup_inexistent
[18:11:03] [PASSED] drm_test_framebuffer_modifiers_not_supported
[18:11:03] ================= [PASSED] drm_framebuffer =================
[18:11:03] ================ drm_gem_shmem (8 subtests) ================
[18:11:03] [PASSED] drm_gem_shmem_test_obj_create
[18:11:03] [PASSED] drm_gem_shmem_test_obj_create_private
[18:11:03] [PASSED] drm_gem_shmem_test_pin_pages
[18:11:03] [PASSED] drm_gem_shmem_test_vmap
[18:11:03] [PASSED] drm_gem_shmem_test_get_sg_table
[18:11:03] [PASSED] drm_gem_shmem_test_get_pages_sgt
[18:11:03] [PASSED] drm_gem_shmem_test_madvise
[18:11:03] [PASSED] drm_gem_shmem_test_purge
[18:11:03] ================== [PASSED] drm_gem_shmem ==================
[18:11:03] === drm_atomic_helper_connector_hdmi_check (27 subtests) ===
[18:11:03] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode
[18:11:03] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1
[18:11:03] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode
[18:11:03] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1
[18:11:03] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode
[18:11:03] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1
[18:11:03] ====== drm_test_check_broadcast_rgb_cea_mode_yuv420 =======
[18:11:03] [PASSED] Automatic
[18:11:03] [PASSED] Full
[18:11:03] [PASSED] Limited 16:235
[18:11:03] == [PASSED] drm_test_check_broadcast_rgb_cea_mode_yuv420 ===
[18:11:03] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed
[18:11:03] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed
[18:11:03] [PASSED] drm_test_check_disable_connector
[18:11:03] [PASSED] drm_test_check_hdmi_funcs_reject_rate
[18:11:03] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_rgb
[18:11:03] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_yuv420
[18:11:03] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv422
[18:11:03] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv420
[18:11:03] [PASSED] drm_test_check_driver_unsupported_fallback_yuv420
[18:11:03] [PASSED] drm_test_check_output_bpc_crtc_mode_changed
[18:11:03] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed
[18:11:03] [PASSED] drm_test_check_output_bpc_dvi
[18:11:03] [PASSED] drm_test_check_output_bpc_format_vic_1
[18:11:03] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only
[18:11:03] [PASSED] drm_test_check_output_bpc_format_display_rgb_only
[18:11:03] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only
[18:11:03] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only
[18:11:03] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc
[18:11:03] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc
[18:11:03] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc
[18:11:03] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ======
[18:11:03] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ====
[18:11:03] [PASSED] drm_test_check_broadcast_rgb_value
[18:11:03] [PASSED] drm_test_check_bpc_8_value
[18:11:03] [PASSED] drm_test_check_bpc_10_value
[18:11:03] [PASSED] drm_test_check_bpc_12_value
[18:11:03] [PASSED] drm_test_check_format_value
[18:11:03] [PASSED] drm_test_check_tmds_char_value
[18:11:03] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ======
[18:11:03] = drm_atomic_helper_connector_hdmi_mode_valid (4 subtests) =
[18:11:03] [PASSED] drm_test_check_mode_valid
[18:11:03] [PASSED] drm_test_check_mode_valid_reject
[18:11:03] [PASSED] drm_test_check_mode_valid_reject_rate
[18:11:03] [PASSED] drm_test_check_mode_valid_reject_max_clock
[18:11:03] === [PASSED] drm_atomic_helper_connector_hdmi_mode_valid ===
[18:11:03] = drm_atomic_helper_connector_hdmi_infoframes (5 subtests) =
[18:11:03] [PASSED] drm_test_check_infoframes
[18:11:03] [PASSED] drm_test_check_reject_avi_infoframe
[18:11:03] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_8
[18:11:03] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_10
[18:11:03] [PASSED] drm_test_check_reject_audio_infoframe
[18:11:03] === [PASSED] drm_atomic_helper_connector_hdmi_infoframes ===
[18:11:03] ================= drm_managed (2 subtests) =================
[18:11:03] [PASSED] drm_test_managed_release_action
[18:11:03] [PASSED] drm_test_managed_run_action
[18:11:03] =================== [PASSED] drm_managed ===================
[18:11:03] =================== drm_mm (6 subtests) ====================
[18:11:03] [PASSED] drm_test_mm_init
[18:11:03] [PASSED] drm_test_mm_debug
[18:11:03] [PASSED] drm_test_mm_align32
[18:11:03] [PASSED] drm_test_mm_align64
[18:11:03] [PASSED] drm_test_mm_lowest
[18:11:03] [PASSED] drm_test_mm_highest
[18:11:03] ===================== [PASSED] drm_mm ======================
[18:11:03] ============= drm_modes_analog_tv (5 subtests) =============
[18:11:03] [PASSED] drm_test_modes_analog_tv_mono_576i
[18:11:03] [PASSED] drm_test_modes_analog_tv_ntsc_480i
[18:11:03] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined
[18:11:03] [PASSED] drm_test_modes_analog_tv_pal_576i
[18:11:03] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined
[18:11:03] =============== [PASSED] drm_modes_analog_tv ===============
[18:11:03] ============== drm_plane_helper (2 subtests) ===============
[18:11:03] =============== drm_test_check_plane_state ================
[18:11:03] [PASSED] clipping_simple
[18:11:03] [PASSED] clipping_rotate_reflect
[18:11:03] [PASSED] positioning_simple
[18:11:03] [PASSED] upscaling
[18:11:03] [PASSED] downscaling
[18:11:03] [PASSED] rounding1
[18:11:03] [PASSED] rounding2
[18:11:03] [PASSED] rounding3
[18:11:03] [PASSED] rounding4
[18:11:03] =========== [PASSED] drm_test_check_plane_state ============
[18:11:03] =========== drm_test_check_invalid_plane_state ============
[18:11:03] [PASSED] positioning_invalid
[18:11:03] [PASSED] upscaling_invalid
[18:11:03] [PASSED] downscaling_invalid
[18:11:03] ======= [PASSED] drm_test_check_invalid_plane_state ========
[18:11:03] ================ [PASSED] drm_plane_helper =================
[18:11:03] ====== drm_connector_helper_tv_get_modes (1 subtest) =======
[18:11:03] ====== drm_test_connector_helper_tv_get_modes_check =======
[18:11:03] [PASSED] None
[18:11:03] [PASSED] PAL
[18:11:03] [PASSED] NTSC
[18:11:03] [PASSED] Both, NTSC Default
[18:11:03] [PASSED] Both, PAL Default
[18:11:03] [PASSED] Both, NTSC Default, with PAL on command-line
[18:11:03] [PASSED] Both, PAL Default, with NTSC on command-line
[18:11:03] == [PASSED] drm_test_connector_helper_tv_get_modes_check ===
[18:11:03] ======== [PASSED] drm_connector_helper_tv_get_modes ========
[18:11:03] ================== drm_rect (9 subtests) ===================
[18:11:03] [PASSED] drm_test_rect_clip_scaled_div_by_zero
[18:11:03] [PASSED] drm_test_rect_clip_scaled_not_clipped
[18:11:03] [PASSED] drm_test_rect_clip_scaled_clipped
[18:11:03] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned
[18:11:03] ================= drm_test_rect_intersect =================
[18:11:03] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0
[18:11:03] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1
[18:11:03] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0
[18:11:03] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1
[18:11:03] [PASSED] right x left: 2x1+0+0 x 3x1+1+0
[18:11:03] [PASSED] left x right: 3x1+1+0 x 2x1+0+0
[18:11:03] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1
[18:11:03] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0
[18:11:03] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1
[18:11:03] [PASSED] touching side: 1x1+0+0 x 1x1+1+0
[18:11:03] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0
[18:11:03] [PASSED] inside another: 2x2+0+0 x 1x1+1+1
[18:11:03] [PASSED] far away: 1x1+0+0 x 1x1+3+6
[18:11:03] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10
[18:11:03] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10
[18:11:03] ============= [PASSED] drm_test_rect_intersect =============
[18:11:03] ================ drm_test_rect_calc_hscale ================
[18:11:03] [PASSED] normal use
[18:11:03] [PASSED] out of max range
[18:11:03] [PASSED] out of min range
[18:11:03] [PASSED] zero dst
[18:11:03] [PASSED] negative src
[18:11:03] [PASSED] negative dst
[18:11:03] ============ [PASSED] drm_test_rect_calc_hscale ============
[18:11:03] ================ drm_test_rect_calc_vscale ================
[18:11:03] [PASSED] normal use
[18:11:03] [PASSED] out of max range
[18:11:03] [PASSED] out of min range
[18:11:03] [PASSED] zero dst
[18:11:03] [PASSED] negative src
[18:11:03] [PASSED] negative dst
stty: 'standard input': Inappropriate ioctl for device
[18:11:03] ============ [PASSED] drm_test_rect_calc_vscale ============
[18:11:03] ================== drm_test_rect_rotate ===================
[18:11:03] [PASSED] reflect-x
[18:11:03] [PASSED] reflect-y
[18:11:03] [PASSED] rotate-0
[18:11:03] [PASSED] rotate-90
[18:11:03] [PASSED] rotate-180
[18:11:03] [PASSED] rotate-270
[18:11:03] ============== [PASSED] drm_test_rect_rotate ===============
[18:11:03] ================ drm_test_rect_rotate_inv =================
[18:11:03] [PASSED] reflect-x
[18:11:03] [PASSED] reflect-y
[18:11:03] [PASSED] rotate-0
[18:11:03] [PASSED] rotate-90
[18:11:03] [PASSED] rotate-180
[18:11:03] [PASSED] rotate-270
[18:11:03] ============ [PASSED] drm_test_rect_rotate_inv =============
[18:11:03] ==================== [PASSED] drm_rect =====================
[18:11:03] ============ drm_sysfb_modeset_test (1 subtest) ============
[18:11:03] ============ drm_test_sysfb_build_fourcc_list =============
[18:11:03] [PASSED] no native formats
[18:11:03] [PASSED] XRGB8888 as native format
[18:11:03] [PASSED] remove duplicates
[18:11:03] [PASSED] convert alpha formats
[18:11:03] [PASSED] random formats
[18:11:03] ======== [PASSED] drm_test_sysfb_build_fourcc_list =========
[18:11:03] ============= [PASSED] drm_sysfb_modeset_test ==============
[18:11:03] ================== drm_fixp (2 subtests) ===================
[18:11:03] [PASSED] drm_test_int2fixp
[18:11:03] [PASSED] drm_test_sm2fixp
[18:11:03] ==================== [PASSED] drm_fixp =====================
[18:11:03] ============================================================
[18:11:03] Testing complete. Ran 621 tests: passed: 621
[18:11:03] Elapsed time: 27.317s total, 1.678s configuring, 25.469s building, 0.131s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/ttm/tests/.kunitconfig
[18:11:03] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[18:11:04] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[18:11:14] Starting KUnit Kernel (1/1)...
[18:11:14] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[18:11:14] ================= ttm_device (5 subtests) ==================
[18:11:14] [PASSED] ttm_device_init_basic
[18:11:14] [PASSED] ttm_device_init_multiple
[18:11:14] [PASSED] ttm_device_fini_basic
[18:11:14] [PASSED] ttm_device_init_no_vma_man
[18:11:14] ================== ttm_device_init_pools ==================
[18:11:14] [PASSED] No DMA allocations, no DMA32 required
[18:11:14] [PASSED] DMA allocations, DMA32 required
[18:11:14] [PASSED] No DMA allocations, DMA32 required
[18:11:14] [PASSED] DMA allocations, no DMA32 required
[18:11:14] ============== [PASSED] ttm_device_init_pools ==============
[18:11:14] =================== [PASSED] ttm_device ====================
[18:11:14] ================== ttm_pool (8 subtests) ===================
[18:11:14] ================== ttm_pool_alloc_basic ===================
[18:11:14] [PASSED] One page
[18:11:14] [PASSED] More than one page
[18:11:14] [PASSED] Above the allocation limit
[18:11:14] [PASSED] One page, with coherent DMA mappings enabled
[18:11:14] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[18:11:14] ============== [PASSED] ttm_pool_alloc_basic ===============
[18:11:14] ============== ttm_pool_alloc_basic_dma_addr ==============
[18:11:14] [PASSED] One page
[18:11:14] [PASSED] More than one page
[18:11:14] [PASSED] Above the allocation limit
[18:11:14] [PASSED] One page, with coherent DMA mappings enabled
[18:11:14] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[18:11:14] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ==========
[18:11:14] [PASSED] ttm_pool_alloc_order_caching_match
[18:11:14] [PASSED] ttm_pool_alloc_caching_mismatch
[18:11:14] [PASSED] ttm_pool_alloc_order_mismatch
[18:11:14] [PASSED] ttm_pool_free_dma_alloc
[18:11:14] [PASSED] ttm_pool_free_no_dma_alloc
[18:11:14] [PASSED] ttm_pool_fini_basic
[18:11:14] ==================== [PASSED] ttm_pool =====================
[18:11:14] ================ ttm_resource (8 subtests) =================
[18:11:14] ================= ttm_resource_init_basic =================
[18:11:14] [PASSED] Init resource in TTM_PL_SYSTEM
[18:11:14] [PASSED] Init resource in TTM_PL_VRAM
[18:11:14] [PASSED] Init resource in a private placement
[18:11:14] [PASSED] Init resource in TTM_PL_SYSTEM, set placement flags
[18:11:14] ============= [PASSED] ttm_resource_init_basic =============
[18:11:14] [PASSED] ttm_resource_init_pinned
[18:11:14] [PASSED] ttm_resource_fini_basic
[18:11:14] [PASSED] ttm_resource_manager_init_basic
[18:11:14] [PASSED] ttm_resource_manager_usage_basic
[18:11:14] [PASSED] ttm_resource_manager_set_used_basic
[18:11:14] [PASSED] ttm_sys_man_alloc_basic
[18:11:14] [PASSED] ttm_sys_man_free_basic
[18:11:14] ================== [PASSED] ttm_resource ===================
[18:11:14] =================== ttm_tt (15 subtests) ===================
[18:11:14] ==================== ttm_tt_init_basic ====================
[18:11:14] [PASSED] Page-aligned size
[18:11:14] [PASSED] Extra pages requested
[18:11:14] ================ [PASSED] ttm_tt_init_basic ================
[18:11:14] [PASSED] ttm_tt_init_misaligned
[18:11:14] [PASSED] ttm_tt_fini_basic
[18:11:14] [PASSED] ttm_tt_fini_sg
[18:11:14] [PASSED] ttm_tt_fini_shmem
[18:11:14] [PASSED] ttm_tt_create_basic
[18:11:14] [PASSED] ttm_tt_create_invalid_bo_type
[18:11:14] [PASSED] ttm_tt_create_ttm_exists
[18:11:14] [PASSED] ttm_tt_create_failed
[18:11:14] [PASSED] ttm_tt_destroy_basic
[18:11:14] [PASSED] ttm_tt_populate_null_ttm
[18:11:14] [PASSED] ttm_tt_populate_populated_ttm
[18:11:14] [PASSED] ttm_tt_unpopulate_basic
[18:11:14] [PASSED] ttm_tt_unpopulate_empty_ttm
[18:11:14] [PASSED] ttm_tt_swapin_basic
[18:11:14] ===================== [PASSED] ttm_tt ======================
[18:11:14] =================== ttm_bo (14 subtests) ===================
[18:11:14] =========== ttm_bo_reserve_optimistic_no_ticket ===========
[18:11:14] [PASSED] Cannot be interrupted and sleeps
[18:11:14] [PASSED] Cannot be interrupted, locks straight away
[18:11:14] [PASSED] Can be interrupted, sleeps
[18:11:14] ======= [PASSED] ttm_bo_reserve_optimistic_no_ticket =======
[18:11:14] [PASSED] ttm_bo_reserve_locked_no_sleep
[18:11:14] [PASSED] ttm_bo_reserve_no_wait_ticket
[18:11:14] [PASSED] ttm_bo_reserve_double_resv
[18:11:14] [PASSED] ttm_bo_reserve_interrupted
[18:11:14] [PASSED] ttm_bo_reserve_deadlock
[18:11:14] [PASSED] ttm_bo_unreserve_basic
[18:11:14] [PASSED] ttm_bo_unreserve_pinned
[18:11:14] [PASSED] ttm_bo_unreserve_bulk
[18:11:14] [PASSED] ttm_bo_fini_basic
[18:11:14] [PASSED] ttm_bo_fini_shared_resv
[18:11:14] [PASSED] ttm_bo_pin_basic
[18:11:14] [PASSED] ttm_bo_pin_unpin_resource
[18:11:14] [PASSED] ttm_bo_multiple_pin_one_unpin
[18:11:14] ===================== [PASSED] ttm_bo ======================
[18:11:14] ============== ttm_bo_validate (21 subtests) ===============
[18:11:14] ============== ttm_bo_init_reserved_sys_man ===============
[18:11:14] [PASSED] Buffer object for userspace
[18:11:14] [PASSED] Kernel buffer object
[18:11:14] [PASSED] Shared buffer object
[18:11:14] ========== [PASSED] ttm_bo_init_reserved_sys_man ===========
[18:11:14] ============== ttm_bo_init_reserved_mock_man ==============
[18:11:14] [PASSED] Buffer object for userspace
[18:11:14] [PASSED] Kernel buffer object
[18:11:14] [PASSED] Shared buffer object
[18:11:14] ========== [PASSED] ttm_bo_init_reserved_mock_man ==========
[18:11:14] [PASSED] ttm_bo_init_reserved_resv
[18:11:14] ================== ttm_bo_validate_basic ==================
[18:11:14] [PASSED] Buffer object for userspace
[18:11:14] [PASSED] Kernel buffer object
[18:11:14] [PASSED] Shared buffer object
[18:11:14] ============== [PASSED] ttm_bo_validate_basic ==============
[18:11:14] [PASSED] ttm_bo_validate_invalid_placement
[18:11:14] ============= ttm_bo_validate_same_placement ==============
[18:11:14] [PASSED] System manager
[18:11:14] [PASSED] VRAM manager
[18:11:14] ========= [PASSED] ttm_bo_validate_same_placement ==========
[18:11:14] [PASSED] ttm_bo_validate_failed_alloc
[18:11:14] [PASSED] ttm_bo_validate_pinned
[18:11:14] [PASSED] ttm_bo_validate_busy_placement
[18:11:14] ================ ttm_bo_validate_multihop =================
[18:11:14] [PASSED] Buffer object for userspace
[18:11:14] [PASSED] Kernel buffer object
[18:11:14] [PASSED] Shared buffer object
[18:11:14] ============ [PASSED] ttm_bo_validate_multihop =============
[18:11:14] ========== ttm_bo_validate_no_placement_signaled ==========
[18:11:14] [PASSED] Buffer object in system domain, no page vector
[18:11:14] [PASSED] Buffer object in system domain with an existing page vector
[18:11:14] ====== [PASSED] ttm_bo_validate_no_placement_signaled ======
[18:11:14] ======== ttm_bo_validate_no_placement_not_signaled ========
[18:11:14] [PASSED] Buffer object for userspace
[18:11:14] [PASSED] Kernel buffer object
[18:11:14] [PASSED] Shared buffer object
[18:11:14] ==== [PASSED] ttm_bo_validate_no_placement_not_signaled ====
[18:11:14] [PASSED] ttm_bo_validate_move_fence_signaled
[18:11:14] ========= ttm_bo_validate_move_fence_not_signaled =========
[18:11:14] [PASSED] Waits for GPU
[18:11:14] [PASSED] Tries to lock straight away
[18:11:14] ===== [PASSED] ttm_bo_validate_move_fence_not_signaled =====
[18:11:14] [PASSED] ttm_bo_validate_happy_evict
[18:11:14] [PASSED] ttm_bo_validate_all_pinned_evict
[18:11:14] [PASSED] ttm_bo_validate_allowed_only_evict
[18:11:14] [PASSED] ttm_bo_validate_deleted_evict
[18:11:14] [PASSED] ttm_bo_validate_busy_domain_evict
[18:11:14] [PASSED] ttm_bo_validate_evict_gutting
[18:11:14] [PASSED] ttm_bo_validate_recrusive_evict
stty: 'standard input': Inappropriate ioctl for device
[18:11:14] ================= [PASSED] ttm_bo_validate =================
[18:11:14] ============================================================
[18:11:14] Testing complete. Ran 101 tests: passed: 101
[18:11:14] Elapsed time: 11.544s total, 1.678s configuring, 9.650s building, 0.186s running
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel
^ permalink raw reply [flat|nested] 31+ messages in thread
* ✗ CI.checksparse: warning for drm/i915/overlay: Convert to parent interface
2026-02-18 15:27 [PATCH 00/19] drm/i915/overlay: Convert to parent interface Ville Syrjala
` (20 preceding siblings ...)
2026-02-18 18:11 ` ✓ CI.KUnit: success " Patchwork
@ 2026-02-18 18:26 ` Patchwork
2026-02-18 19:12 ` ✗ Xe.CI.BAT: failure " Patchwork
` (2 subsequent siblings)
24 siblings, 0 replies; 31+ messages in thread
From: Patchwork @ 2026-02-18 18:26 UTC (permalink / raw)
To: Ville Syrjala; +Cc: intel-xe
== Series Details ==
Series: drm/i915/overlay: Convert to parent interface
URL : https://patchwork.freedesktop.org/series/161766/
State : warning
== Summary ==
+ trap cleanup EXIT
+ KERNEL=/kernel
+ MT=/root/linux/maintainer-tools
+ git clone https://gitlab.freedesktop.org/drm/maintainer-tools /root/linux/maintainer-tools
Cloning into '/root/linux/maintainer-tools'...
warning: redirecting to https://gitlab.freedesktop.org/drm/maintainer-tools.git/
+ make -C /root/linux/maintainer-tools
make: Entering directory '/root/linux/maintainer-tools'
cc -O2 -g -Wextra -o remap-log remap-log.c
make: Leaving directory '/root/linux/maintainer-tools'
+ cd /kernel
+ git config --global --add safe.directory /kernel
+ /root/linux/maintainer-tools/dim sparse --fast 7ee0795cb4f30c9ccc2b8a580faebcefbdf150c5
Sparse version: 0.6.4 (Ubuntu: 0.6.4-4ubuntu3)
Fast mode used, each commit won't be checked separately.
+drivers/gpu/drm/i915/display/g4x_dp.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h):
+drivers/gpu/drm/i915/display/g4x_hdmi.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h):
+drivers/gpu/drm/i915/display/i9xx_plane.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h):
+drivers/gpu/drm/i915/display/i9xx_wm.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h, drivers/gpu/drm/i915/display/intel_display_trace.h):
+drivers/gpu/drm/i915/display/icl_dsi.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h, drivers/gpu/drm/i915/display/intel_dsi.h):
+drivers/gpu/drm/i915/display/intel_backlight.c: note: in included file:
+drivers/gpu/drm/i915/display/intel_casf.c:152:21: error: too long token expansion
+drivers/gpu/drm/i915/display/intel_casf.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h):
+drivers/gpu/drm/i915/display/intel_combo_phy.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h):
+drivers/gpu/drm/i915/display/intel_crt.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h):
+drivers/gpu/drm/i915/display/intel_cx0_phy.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h):
+drivers/gpu/drm/i915/display/intel_ddi.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h):
+drivers/gpu/drm/i915/display/intel_display_debugfs.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h):
+drivers/gpu/drm/i915/display/intel_display_device.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h):
+drivers/gpu/drm/i915/display/intel_display_power_map.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h):
+drivers/gpu/drm/i915/display/intel_dmc.c:130:1: error: bad constant expression
+drivers/gpu/drm/i915/display/intel_dmc.c:133:1: error: bad constant expression
+drivers/gpu/drm/i915/display/intel_dmc.c:136:1: error: bad constant expression
+drivers/gpu/drm/i915/display/intel_dmc.c:139:1: error: bad constant expression
+drivers/gpu/drm/i915/display/intel_dmc.c:142:1: error: bad constant expression
+drivers/gpu/drm/i915/display/intel_dmc.c:145:1: error: bad constant expression
+drivers/gpu/drm/i915/display/intel_dmc.c:148:1: error: bad constant expression
+drivers/gpu/drm/i915/display/intel_dmc.c:152:1: error: bad constant expression
+drivers/gpu/drm/i915/display/intel_dmc.c:153:1: error: bad constant expression
+drivers/gpu/drm/i915/display/intel_dmc.c:156:1: error: bad constant expression
+drivers/gpu/drm/i915/display/intel_dmc.c:159:1: error: bad constant expression
+drivers/gpu/drm/i915/display/intel_dmc.c:162:1: error: bad constant expression
+drivers/gpu/drm/i915/display/intel_dmc.c:165:1: error: bad constant expression
+drivers/gpu/drm/i915/display/intel_dmc.c:169:1: error: bad constant expression
+drivers/gpu/drm/i915/display/intel_dmc.c:173:1: error: bad constant expression
+drivers/gpu/drm/i915/display/intel_dmc.c:177:1: error: bad constant expression
+drivers/gpu/drm/i915/display/intel_dmc.c:181:1: error: bad constant expression
+drivers/gpu/drm/i915/display/intel_dmc.c:185:1: error: bad constant expression
+drivers/gpu/drm/i915/display/intel_dmc.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h):
+drivers/gpu/drm/i915/display/intel_dp.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h):
+drivers/gpu/drm/i915/display/intel_dp_hdcp.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h):
+drivers/gpu/drm/i915/display/intel_dpio_phy.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h):
+drivers/gpu/drm/i915/display/intel_dpll.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h):
+drivers/gpu/drm/i915/display/intel_dpll_mgr.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h):
+drivers/gpu/drm/i915/display/intel_dp_mst.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h):
+drivers/gpu/drm/i915/display/intel_dpt.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h):
+drivers/gpu/drm/i915/display/intel_dpt_common.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h):
+drivers/gpu/drm/i915/display/intel_dp_test.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h):
+drivers/gpu/drm/i915/display/intel_drrs.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h):
+drivers/gpu/drm/i915/display/intel_dsi_vbt.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h):
+drivers/gpu/drm/i915/display/intel_dvo.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h):
+drivers/gpu/drm/i915/display/intel_fb_bo.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h):
+drivers/gpu/drm/i915/display/intel_fb_pin.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h):
+drivers/gpu/drm/i915/display/intel_fdi.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h):
+drivers/gpu/drm/i915/display/intel_fifo_underrun.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h, drivers/gpu/drm/i915/display/intel_display_trace.h):
+drivers/gpu/drm/i915/display/intel_hdmi.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h):
+drivers/gpu/drm/i915/display/intel_hotplug_irq.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h):
+drivers/gpu/drm/i915/display/intel_lspcon.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h):
+drivers/gpu/drm/i915/display/intel_modeset_setup.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h):
+drivers/gpu/drm/i915/display/intel_parent.c:128:31: expected void [noderef] __iomem *
+drivers/gpu/drm/i915/display/intel_parent.c:128:31: got void *
+drivers/gpu/drm/i915/display/intel_parent.c:128:31: warning: incorrect type in return expression (different address spaces)
+drivers/gpu/drm/i915/display/intel_pch_display.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h):
+drivers/gpu/drm/i915/display/intel_pch_refclk.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h):
+drivers/gpu/drm/i915/display/intel_pfit.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h):
+drivers/gpu/drm/i915/display/intel_pmdemand.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h, drivers/gpu/drm/i915/display/intel_display_trace.h):
+drivers/gpu/drm/i915/display/intel_pps.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h):
+drivers/gpu/drm/i915/display/intel_psr.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h):
+drivers/gpu/drm/i915/display/intel_sdvo.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h):
+drivers/gpu/drm/i915/display/intel_snps_phy.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h):
+drivers/gpu/drm/i915/display/intel_tc.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h):
+drivers/gpu/drm/i915/display/intel_tv.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h):
+drivers/gpu/drm/i915/display/intel_vblank.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h):
+drivers/gpu/drm/i915/display/intel_vrr.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h):
+drivers/gpu/drm/i915/display/skl_scaler.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h, drivers/gpu/drm/i915/display/intel_display_trace.h):
+drivers/gpu/drm/i915/display/vlv_dsi.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h):
+drivers/gpu/drm/i915/gem/i915_gem_dmabuf.c:18:1: error: bad constant expression
+drivers/gpu/drm/i915/gem/i915_gem_pages.c: note: in included file (through drivers/gpu/drm/i915/display/intel_display_types.h):
+drivers/gpu/drm/i915/gt/intel_sseu.c:600:17: error: too long token expansion
+drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c:191:1: error: bad constant expression
+drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c:191:1: error: bad constant expression
+drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c:191:1: error: bad constant expression
+drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c:191:1: error: bad constant expression
+drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c:191:1: error: bad constant expression
+drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c:191:1: error: bad constant expression
+drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c:191:1: error: bad constant expression
+drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c:191:1: error: bad constant expression
+drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c:191:1: error: bad constant expression
+drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c:191:1: error: bad constant expression
+drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c:191:1: error: bad constant expression
+drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c:191:1: error: bad constant expression
+drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c:191:1: error: bad constant expression
+drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c:191:1: error: bad constant expression
+drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c:191:1: error: bad constant expression
+drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c:191:1: error: bad constant expression
+drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c:191:1: error: bad constant expression
+drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c:191:1: error: bad constant expression
+drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c:191:1: error: bad constant expression
+drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c:191:1: error: bad constant expression
+drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c:191:1: error: bad constant expression
+drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c:192:1: error: bad constant expression
+drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c:192:1: error: bad constant expression
+drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c:192:1: error: bad constant expression
+drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c:192:1: error: bad constant expression
+drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c:192:1: error: bad constant expression
+drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c:192:1: error: bad constant expression
+drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c:192:1: error: bad constant expression
+drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c:192:1: error: bad constant expression
+drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c:192:1: error: bad constant expression
+drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c:192:1: error: bad constant expression
+drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c:192:1: error: bad constant expression
+drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c:192:1: error: bad constant expression
+drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c:192:1: error: bad constant expression
+drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c:192:1: error: bad constant expression
+drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c:192:1: error: bad constant expression
+drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c:192:1: error: bad constant expression
+drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c:192:1: error: bad constant expression
+drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c:192:1: error: bad constant expression
+drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c:192:1: error: bad constant expression
+drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c:193:1: error: bad constant expression
+drivers/gpu/drm/i915/i915_active.c:1062:16: warning: context imbalance in '__i915_active_fence_set' - different lock contexts for basic block
+drivers/gpu/drm/i915/i915_drm_client.c:92:9: error: incompatible types in comparison expression (different address spaces):
+drivers/gpu/drm/i915/i915_drm_client.c:92:9: error: incompatible types in comparison expression (different address spaces):
+drivers/gpu/drm/i915/i915_drm_client.c:92:9: expected struct list_head const *list
+drivers/gpu/drm/i915/i915_drm_client.c:92:9: got struct list_head [noderef] __rcu *pos
+drivers/gpu/drm/i915/i915_drm_client.c:92:9: struct list_head *
+drivers/gpu/drm/i915/i915_drm_client.c:92:9: struct list_head *
+drivers/gpu/drm/i915/i915_drm_client.c:92:9: struct list_head [noderef] __rcu *
+drivers/gpu/drm/i915/i915_drm_client.c:92:9: struct list_head [noderef] __rcu *
+drivers/gpu/drm/i915/i915_drm_client.c:92:9: warning: incorrect type in argument 1 (different address spaces)
+drivers/gpu/drm/i915/i915_mitigations.c:133:1: error: bad constant expression
+drivers/gpu/drm/i915/i915_module.c:125:1: error: bad constant expression
+drivers/gpu/drm/i915/i915_module.c:126:1: error: bad constant expression
+drivers/gpu/drm/i915/i915_module.c:128:1: error: bad constant expression
+drivers/gpu/drm/i915/i915_module.c:129:1: error: bad constant expression
+drivers/gpu/drm/i915/i915_module.c:129:1: error: bad constant expression
+drivers/gpu/drm/i915/i915_overlay.c:459:31: expected void [noderef] __iomem *
+drivers/gpu/drm/i915/i915_overlay.c:459:31: got void *
+drivers/gpu/drm/i915/i915_overlay.c:459:31: warning: incorrect type in return expression (different address spaces)
+drivers/gpu/drm/i915/i915_overlay.c:463:31: expected void [noderef] __iomem *
+drivers/gpu/drm/i915/i915_overlay.c:463:31: got void *
+drivers/gpu/drm/i915/i915_overlay.c:463:31: warning: incorrect type in return expression (different address spaces)
+drivers/gpu/drm/i915/i915_overlay.c:474:31: expected void [noderef] __iomem *
+drivers/gpu/drm/i915/i915_overlay.c:474:31: got void *
+drivers/gpu/drm/i915/i915_overlay.c:474:31: warning: incorrect type in return expression (different address spaces)
+drivers/gpu/drm/i915/i915_params.c:100:1: error: bad constant expression
+drivers/gpu/drm/i915/i915_params.c:100:1: error: bad constant expression
+drivers/gpu/drm/i915/i915_params.c:104:1: error: bad constant expression
+drivers/gpu/drm/i915/i915_params.c:104:1: error: bad constant expression
+drivers/gpu/drm/i915/i915_params.c:107:1: error: bad constant expression
+drivers/gpu/drm/i915/i915_params.c:107:1: error: bad constant expression
+drivers/gpu/drm/i915/i915_params.c:110:1: error: bad constant expression
+drivers/gpu/drm/i915/i915_params.c:110:1: error: bad constant expression
+drivers/gpu/drm/i915/i915_params.c:119:1: error: bad constant expression
+drivers/gpu/drm/i915/i915_params.c:119:1: error: bad constant expression
+drivers/gpu/drm/i915/i915_params.c:123:1: error: bad constant expression
+drivers/gpu/drm/i915/i915_params.c:123:1: error: bad constant expression
+drivers/gpu/drm/i915/i915_params.c:125:1: error: bad constant expression
+drivers/gpu/drm/i915/i915_params.c:125:1: error: bad constant expression
+drivers/gpu/drm/i915/i915_params.c:66:1: error: bad constant expression
+drivers/gpu/drm/i915/i915_params.c:66:1: error: bad constant expression
+drivers/gpu/drm/i915/i915_params.c:69:1: error: bad constant expression
+drivers/gpu/drm/i915/i915_params.c:69:1: error: bad constant expression
+drivers/gpu/drm/i915/i915_params.c:73:1: error: bad constant expression
+drivers/gpu/drm/i915/i915_params.c:73:1: error: bad constant expression
+drivers/gpu/drm/i915/i915_params.c:79:1: error: bad constant expression
+drivers/gpu/drm/i915/i915_params.c:79:1: error: bad constant expression
+drivers/gpu/drm/i915/i915_params.c:84:1: error: bad constant expression
+drivers/gpu/drm/i915/i915_params.c:84:1: error: bad constant expression
+drivers/gpu/drm/i915/i915_params.c:88:1: error: bad constant expression
+drivers/gpu/drm/i915/i915_params.c:88:1: error: bad constant expression
+drivers/gpu/drm/i915/i915_params.c:91:1: error: bad constant expression
+drivers/gpu/drm/i915/i915_params.c:91:1: error: bad constant expression
+drivers/gpu/drm/i915/i915_params.c:95:1: error: bad constant expression
+drivers/gpu/drm/i915/i915_params.c:95:1: error: bad constant expression
+drivers/gpu/drm/i915/intel_uncore.c:1930:1: warning: context imbalance in 'fwtable_read8' - unexpected unlock
+drivers/gpu/drm/i915/intel_uncore.c:1931:1: warning: context imbalance in 'fwtable_read16' - unexpected unlock
+drivers/gpu/drm/i915/intel_uncore.c:1932:1: warning: context imbalance in 'fwtable_read32' - unexpected unlock
+drivers/gpu/drm/i915/intel_uncore.c:1933:1: warning: context imbalance in 'fwtable_read64' - unexpected unlock
+drivers/gpu/drm/i915/intel_uncore.c:1998:1: warning: context imbalance in 'gen6_write8' - unexpected unlock
+drivers/gpu/drm/i915/intel_uncore.c:1999:1: warning: context imbalance in 'gen6_write16' - unexpected unlock
+drivers/gpu/drm/i915/intel_uncore.c:2000:1: warning: context imbalance in 'gen6_write32' - unexpected unlock
+drivers/gpu/drm/i915/intel_uncore.c:2020:1: warning: context imbalance in 'fwtable_write8' - unexpected unlock
+drivers/gpu/drm/i915/intel_uncore.c:2021:1: warning: context imbalance in 'fwtable_write16' - unexpected unlock
+drivers/gpu/drm/i915/intel_uncore.c:2022:1: warning: context imbalance in 'fwtable_write32' - unexpected unlock
+drivers/gpu/drm/i915/intel_wakeref.c:148:19: warning: context imbalance in 'wakeref_auto_timeout' - unexpected unlock
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+./include/linux/pwm.h:13:1: error: bad constant expression
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel
^ permalink raw reply [flat|nested] 31+ messages in thread
* ✗ Xe.CI.BAT: failure for drm/i915/overlay: Convert to parent interface
2026-02-18 15:27 [PATCH 00/19] drm/i915/overlay: Convert to parent interface Ville Syrjala
` (21 preceding siblings ...)
2026-02-18 18:26 ` ✗ CI.checksparse: warning " Patchwork
@ 2026-02-18 19:12 ` Patchwork
2026-02-18 21:42 ` ✗ Xe.CI.FULL: " Patchwork
2026-02-25 11:19 ` [PATCH 00/19] " Jani Nikula
24 siblings, 0 replies; 31+ messages in thread
From: Patchwork @ 2026-02-18 19:12 UTC (permalink / raw)
To: Ville Syrjala; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 7731 bytes --]
== Series Details ==
Series: drm/i915/overlay: Convert to parent interface
URL : https://patchwork.freedesktop.org/series/161766/
State : failure
== Summary ==
CI Bug Log - changes from xe-4573-7ee0795cb4f30c9ccc2b8a580faebcefbdf150c5_BAT -> xe-pw-161766v1_BAT
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with xe-pw-161766v1_BAT absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in xe-pw-161766v1_BAT, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them
to document this new failure mode, which will reduce false positives in CI.
Participating hosts (13 -> 14)
------------------------------
Additional (1): bat-bmg-2
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in xe-pw-161766v1_BAT:
### IGT changes ###
#### Possible regressions ####
* igt@core_hotunplug@unbind-rebind:
- bat-adlp-7: [PASS][1] -> [ABORT][2]
[1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4573-7ee0795cb4f30c9ccc2b8a580faebcefbdf150c5/bat-adlp-7/igt@core_hotunplug@unbind-rebind.html
[2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161766v1/bat-adlp-7/igt@core_hotunplug@unbind-rebind.html
- bat-ptl-2: [PASS][3] -> [ABORT][4]
[3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4573-7ee0795cb4f30c9ccc2b8a580faebcefbdf150c5/bat-ptl-2/igt@core_hotunplug@unbind-rebind.html
[4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161766v1/bat-ptl-2/igt@core_hotunplug@unbind-rebind.html
- bat-bmg-2: NOTRUN -> [ABORT][5]
[5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161766v1/bat-bmg-2/igt@core_hotunplug@unbind-rebind.html
- bat-bmg-1: [PASS][6] -> [ABORT][7]
[6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4573-7ee0795cb4f30c9ccc2b8a580faebcefbdf150c5/bat-bmg-1/igt@core_hotunplug@unbind-rebind.html
[7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161766v1/bat-bmg-1/igt@core_hotunplug@unbind-rebind.html
- bat-lnl-2: [PASS][8] -> [ABORT][9]
[8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4573-7ee0795cb4f30c9ccc2b8a580faebcefbdf150c5/bat-lnl-2/igt@core_hotunplug@unbind-rebind.html
[9]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161766v1/bat-lnl-2/igt@core_hotunplug@unbind-rebind.html
- bat-dg2-oem2: [PASS][10] -> [ABORT][11]
[10]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4573-7ee0795cb4f30c9ccc2b8a580faebcefbdf150c5/bat-dg2-oem2/igt@core_hotunplug@unbind-rebind.html
[11]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161766v1/bat-dg2-oem2/igt@core_hotunplug@unbind-rebind.html
- bat-wcl-1: [PASS][12] -> [ABORT][13]
[12]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4573-7ee0795cb4f30c9ccc2b8a580faebcefbdf150c5/bat-wcl-1/igt@core_hotunplug@unbind-rebind.html
[13]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161766v1/bat-wcl-1/igt@core_hotunplug@unbind-rebind.html
- bat-ptl-1: [PASS][14] -> [ABORT][15]
[14]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4573-7ee0795cb4f30c9ccc2b8a580faebcefbdf150c5/bat-ptl-1/igt@core_hotunplug@unbind-rebind.html
[15]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161766v1/bat-ptl-1/igt@core_hotunplug@unbind-rebind.html
- bat-wcl-2: [PASS][16] -> [ABORT][17]
[16]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4573-7ee0795cb4f30c9ccc2b8a580faebcefbdf150c5/bat-wcl-2/igt@core_hotunplug@unbind-rebind.html
[17]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161766v1/bat-wcl-2/igt@core_hotunplug@unbind-rebind.html
- bat-lnl-1: [PASS][18] -> [ABORT][19]
[18]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4573-7ee0795cb4f30c9ccc2b8a580faebcefbdf150c5/bat-lnl-1/igt@core_hotunplug@unbind-rebind.html
[19]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161766v1/bat-lnl-1/igt@core_hotunplug@unbind-rebind.html
Known issues
------------
Here are the changes found in xe-pw-161766v1_BAT that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@fbdev@write:
- bat-bmg-2: NOTRUN -> [SKIP][20] ([Intel XE#2134]) +4 other tests skip
[20]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161766v1/bat-bmg-2/igt@fbdev@write.html
* igt@kms_addfb_basic@addfb25-y-tiled-small-legacy:
- bat-bmg-2: NOTRUN -> [SKIP][21] ([Intel XE#2233])
[21]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161766v1/bat-bmg-2/igt@kms_addfb_basic@addfb25-y-tiled-small-legacy.html
* igt@kms_cursor_legacy@basic-flip-after-cursor-legacy:
- bat-bmg-2: NOTRUN -> [SKIP][22] ([Intel XE#2489] / [Intel XE#3419]) +13 other tests skip
[22]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161766v1/bat-bmg-2/igt@kms_cursor_legacy@basic-flip-after-cursor-legacy.html
* igt@kms_flip@basic-flip-vs-modeset:
- bat-bmg-2: NOTRUN -> [SKIP][23] ([Intel XE#2482]) +3 other tests skip
[23]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161766v1/bat-bmg-2/igt@kms_flip@basic-flip-vs-modeset.html
* igt@kms_frontbuffer_tracking@basic:
- bat-bmg-2: NOTRUN -> [SKIP][24] ([Intel XE#2434] / [Intel XE#2548] / [Intel XE#6314])
[24]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161766v1/bat-bmg-2/igt@kms_frontbuffer_tracking@basic.html
* igt@kms_psr@psr-sprite-plane-onoff:
- bat-bmg-2: NOTRUN -> [SKIP][25] ([Intel XE#1406] / [Intel XE#2234] / [Intel XE#2850]) +2 other tests skip
[25]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161766v1/bat-bmg-2/igt@kms_psr@psr-sprite-plane-onoff.html
* igt@xe_pat@pat-index-xehpc:
- bat-bmg-2: NOTRUN -> [SKIP][26] ([Intel XE#1420])
[26]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161766v1/bat-bmg-2/igt@xe_pat@pat-index-xehpc.html
* igt@xe_pat@pat-index-xelp:
- bat-bmg-2: NOTRUN -> [SKIP][27] ([Intel XE#2245])
[27]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161766v1/bat-bmg-2/igt@xe_pat@pat-index-xelp.html
* igt@xe_pat@pat-index-xelpg:
- bat-bmg-2: NOTRUN -> [SKIP][28] ([Intel XE#2236])
[28]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161766v1/bat-bmg-2/igt@xe_pat@pat-index-xelpg.html
[Intel XE#1406]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1406
[Intel XE#1420]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1420
[Intel XE#2134]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2134
[Intel XE#2233]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2233
[Intel XE#2234]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2234
[Intel XE#2236]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2236
[Intel XE#2245]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2245
[Intel XE#2434]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2434
[Intel XE#2482]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2482
[Intel XE#2489]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2489
[Intel XE#2548]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2548
[Intel XE#2850]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2850
[Intel XE#3419]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3419
[Intel XE#6314]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6314
Build changes
-------------
* Linux: xe-4573-7ee0795cb4f30c9ccc2b8a580faebcefbdf150c5 -> xe-pw-161766v1
IGT_8760: 8760
xe-4573-7ee0795cb4f30c9ccc2b8a580faebcefbdf150c5: 7ee0795cb4f30c9ccc2b8a580faebcefbdf150c5
xe-pw-161766v1: 161766v1
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161766v1/index.html
[-- Attachment #2: Type: text/html, Size: 8535 bytes --]
^ permalink raw reply [flat|nested] 31+ messages in thread
* ✗ Xe.CI.FULL: failure for drm/i915/overlay: Convert to parent interface
2026-02-18 15:27 [PATCH 00/19] drm/i915/overlay: Convert to parent interface Ville Syrjala
` (22 preceding siblings ...)
2026-02-18 19:12 ` ✗ Xe.CI.BAT: failure " Patchwork
@ 2026-02-18 21:42 ` Patchwork
2026-02-25 11:19 ` [PATCH 00/19] " Jani Nikula
24 siblings, 0 replies; 31+ messages in thread
From: Patchwork @ 2026-02-18 21:42 UTC (permalink / raw)
To: Ville Syrjala; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 13228 bytes --]
== Series Details ==
Series: drm/i915/overlay: Convert to parent interface
URL : https://patchwork.freedesktop.org/series/161766/
State : failure
== Summary ==
CI Bug Log - changes from xe-4573-7ee0795cb4f30c9ccc2b8a580faebcefbdf150c5_FULL -> xe-pw-161766v1_FULL
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with xe-pw-161766v1_FULL absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in xe-pw-161766v1_FULL, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them
to document this new failure mode, which will reduce false positives in CI.
Participating hosts (2 -> 2)
------------------------------
No changes in participating hosts
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in xe-pw-161766v1_FULL:
### IGT changes ###
#### Possible regressions ####
* igt@core_hotunplug@unplug-rescan:
- shard-bmg: [PASS][1] -> [ABORT][2] +21 other tests abort
[1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4573-7ee0795cb4f30c9ccc2b8a580faebcefbdf150c5/shard-bmg-6/igt@core_hotunplug@unplug-rescan.html
[2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161766v1/shard-bmg-10/igt@core_hotunplug@unplug-rescan.html
* igt@kms_atomic_transition@modeset-transition-fencing:
- shard-bmg: [PASS][3] -> [FAIL][4] +1 other test fail
[3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4573-7ee0795cb4f30c9ccc2b8a580faebcefbdf150c5/shard-bmg-2/igt@kms_atomic_transition@modeset-transition-fencing.html
[4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161766v1/shard-bmg-2/igt@kms_atomic_transition@modeset-transition-fencing.html
* igt@xe_fault_injection@inject-fault-probe-function-xe_add_hw_engine_class_defaults:
- shard-lnl: [PASS][5] -> [ABORT][6] +21 other tests abort
[5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4573-7ee0795cb4f30c9ccc2b8a580faebcefbdf150c5/shard-lnl-3/igt@xe_fault_injection@inject-fault-probe-function-xe_add_hw_engine_class_defaults.html
[6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161766v1/shard-lnl-1/igt@xe_fault_injection@inject-fault-probe-function-xe_add_hw_engine_class_defaults.html
#### Warnings ####
* igt@xe_configfs@survivability-mode:
- shard-lnl: [SKIP][7] ([Intel XE#6010]) -> [ABORT][8]
[7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4573-7ee0795cb4f30c9ccc2b8a580faebcefbdf150c5/shard-lnl-2/igt@xe_configfs@survivability-mode.html
[8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161766v1/shard-lnl-1/igt@xe_configfs@survivability-mode.html
* igt@xe_fault_injection@probe-fail-guc-xe_guc_mmio_send_recv:
- shard-lnl: [ABORT][9] ([Intel XE#4757]) -> [ABORT][10]
[9]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4573-7ee0795cb4f30c9ccc2b8a580faebcefbdf150c5/shard-lnl-8/igt@xe_fault_injection@probe-fail-guc-xe_guc_mmio_send_recv.html
[10]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161766v1/shard-lnl-5/igt@xe_fault_injection@probe-fail-guc-xe_guc_mmio_send_recv.html
Known issues
------------
Here are the changes found in xe-pw-161766v1_FULL that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@kms_bw@linear-tiling-1-displays-2560x1440p:
- shard-bmg: [PASS][11] -> [SKIP][12] ([Intel XE#367])
[11]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4573-7ee0795cb4f30c9ccc2b8a580faebcefbdf150c5/shard-bmg-5/igt@kms_bw@linear-tiling-1-displays-2560x1440p.html
[12]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161766v1/shard-bmg-3/igt@kms_bw@linear-tiling-1-displays-2560x1440p.html
* igt@kms_ccs@random-ccs-data-4-tiled-lnl-ccs@pipe-c-dp-2:
- shard-bmg: NOTRUN -> [SKIP][13] ([Intel XE#2652] / [Intel XE#787]) +3 other tests skip
[13]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161766v1/shard-bmg-3/igt@kms_ccs@random-ccs-data-4-tiled-lnl-ccs@pipe-c-dp-2.html
* igt@kms_content_protection@legacy-hdcp14@pipe-a-dp-1:
- shard-bmg: NOTRUN -> [FAIL][14] ([Intel XE#3304])
[14]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161766v1/shard-bmg-5/igt@kms_content_protection@legacy-hdcp14@pipe-a-dp-1.html
* igt@xe_exec_system_allocator@process-many-malloc-bo-unmap:
- shard-bmg: [PASS][15] -> [ABORT][16] ([Intel XE#5545] / [Intel XE#6652])
[15]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4573-7ee0795cb4f30c9ccc2b8a580faebcefbdf150c5/shard-bmg-2/igt@xe_exec_system_allocator@process-many-malloc-bo-unmap.html
[16]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161766v1/shard-bmg-2/igt@xe_exec_system_allocator@process-many-malloc-bo-unmap.html
#### Possible fixes ####
* igt@kms_vrr@cmrr@pipe-a-edp-1:
- shard-lnl: [FAIL][17] ([Intel XE#4459]) -> [PASS][18] +1 other test pass
[17]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4573-7ee0795cb4f30c9ccc2b8a580faebcefbdf150c5/shard-lnl-8/igt@kms_vrr@cmrr@pipe-a-edp-1.html
[18]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161766v1/shard-lnl-3/igt@kms_vrr@cmrr@pipe-a-edp-1.html
* igt@xe_module_load@load:
- shard-lnl: ([PASS][19], [PASS][20], [PASS][21], [SKIP][22], [PASS][23], [PASS][24], [PASS][25], [PASS][26], [PASS][27], [PASS][28], [PASS][29], [PASS][30], [PASS][31], [PASS][32], [PASS][33], [PASS][34], [PASS][35], [PASS][36], [PASS][37], [PASS][38], [PASS][39], [PASS][40], [PASS][41], [PASS][42], [PASS][43], [PASS][44]) ([Intel XE#378]) -> ([PASS][45], [PASS][46], [PASS][47], [PASS][48], [PASS][49], [PASS][50], [PASS][51], [PASS][52], [PASS][53], [PASS][54], [PASS][55], [PASS][56], [PASS][57], [PASS][58], [PASS][59], [PASS][60], [PASS][61], [PASS][62], [PASS][63], [PASS][64], [PASS][65], [PASS][66], [PASS][67], [PASS][68])
[19]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4573-7ee0795cb4f30c9ccc2b8a580faebcefbdf150c5/shard-lnl-1/igt@xe_module_load@load.html
[20]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4573-7ee0795cb4f30c9ccc2b8a580faebcefbdf150c5/shard-lnl-6/igt@xe_module_load@load.html
[21]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4573-7ee0795cb4f30c9ccc2b8a580faebcefbdf150c5/shard-lnl-7/igt@xe_module_load@load.html
[22]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4573-7ee0795cb4f30c9ccc2b8a580faebcefbdf150c5/shard-lnl-4/igt@xe_module_load@load.html
[23]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4573-7ee0795cb4f30c9ccc2b8a580faebcefbdf150c5/shard-lnl-7/igt@xe_module_load@load.html
[24]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4573-7ee0795cb4f30c9ccc2b8a580faebcefbdf150c5/shard-lnl-7/igt@xe_module_load@load.html
[25]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4573-7ee0795cb4f30c9ccc2b8a580faebcefbdf150c5/shard-lnl-2/igt@xe_module_load@load.html
[26]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4573-7ee0795cb4f30c9ccc2b8a580faebcefbdf150c5/shard-lnl-8/igt@xe_module_load@load.html
[27]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4573-7ee0795cb4f30c9ccc2b8a580faebcefbdf150c5/shard-lnl-8/igt@xe_module_load@load.html
[28]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4573-7ee0795cb4f30c9ccc2b8a580faebcefbdf150c5/shard-lnl-6/igt@xe_module_load@load.html
[29]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4573-7ee0795cb4f30c9ccc2b8a580faebcefbdf150c5/shard-lnl-4/igt@xe_module_load@load.html
[30]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4573-7ee0795cb4f30c9ccc2b8a580faebcefbdf150c5/shard-lnl-5/igt@xe_module_load@load.html
[31]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4573-7ee0795cb4f30c9ccc2b8a580faebcefbdf150c5/shard-lnl-8/igt@xe_module_load@load.html
[32]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4573-7ee0795cb4f30c9ccc2b8a580faebcefbdf150c5/shard-lnl-8/igt@xe_module_load@load.html
[33]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4573-7ee0795cb4f30c9ccc2b8a580faebcefbdf150c5/shard-lnl-5/igt@xe_module_load@load.html
[34]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4573-7ee0795cb4f30c9ccc2b8a580faebcefbdf150c5/shard-lnl-5/igt@xe_module_load@load.html
[35]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4573-7ee0795cb4f30c9ccc2b8a580faebcefbdf150c5/shard-lnl-3/igt@xe_module_load@load.html
[36]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4573-7ee0795cb4f30c9ccc2b8a580faebcefbdf150c5/shard-lnl-3/igt@xe_module_load@load.html
[37]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4573-7ee0795cb4f30c9ccc2b8a580faebcefbdf150c5/shard-lnl-1/igt@xe_module_load@load.html
[38]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4573-7ee0795cb4f30c9ccc2b8a580faebcefbdf150c5/shard-lnl-2/igt@xe_module_load@load.html
[39]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4573-7ee0795cb4f30c9ccc2b8a580faebcefbdf150c5/shard-lnl-1/igt@xe_module_load@load.html
[40]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4573-7ee0795cb4f30c9ccc2b8a580faebcefbdf150c5/shard-lnl-2/igt@xe_module_load@load.html
[41]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4573-7ee0795cb4f30c9ccc2b8a580faebcefbdf150c5/shard-lnl-4/igt@xe_module_load@load.html
[42]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4573-7ee0795cb4f30c9ccc2b8a580faebcefbdf150c5/shard-lnl-4/igt@xe_module_load@load.html
[43]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4573-7ee0795cb4f30c9ccc2b8a580faebcefbdf150c5/shard-lnl-3/igt@xe_module_load@load.html
[44]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4573-7ee0795cb4f30c9ccc2b8a580faebcefbdf150c5/shard-lnl-6/igt@xe_module_load@load.html
[45]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161766v1/shard-lnl-8/igt@xe_module_load@load.html
[46]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161766v1/shard-lnl-8/igt@xe_module_load@load.html
[47]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161766v1/shard-lnl-8/igt@xe_module_load@load.html
[48]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161766v1/shard-lnl-4/igt@xe_module_load@load.html
[49]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161766v1/shard-lnl-4/igt@xe_module_load@load.html
[50]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161766v1/shard-lnl-4/igt@xe_module_load@load.html
[51]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161766v1/shard-lnl-5/igt@xe_module_load@load.html
[52]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161766v1/shard-lnl-5/igt@xe_module_load@load.html
[53]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161766v1/shard-lnl-5/igt@xe_module_load@load.html
[54]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161766v1/shard-lnl-6/igt@xe_module_load@load.html
[55]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161766v1/shard-lnl-2/igt@xe_module_load@load.html
[56]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161766v1/shard-lnl-7/igt@xe_module_load@load.html
[57]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161766v1/shard-lnl-2/igt@xe_module_load@load.html
[58]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161766v1/shard-lnl-2/igt@xe_module_load@load.html
[59]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161766v1/shard-lnl-3/igt@xe_module_load@load.html
[60]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161766v1/shard-lnl-3/igt@xe_module_load@load.html
[61]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161766v1/shard-lnl-6/igt@xe_module_load@load.html
[62]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161766v1/shard-lnl-6/igt@xe_module_load@load.html
[63]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161766v1/shard-lnl-7/igt@xe_module_load@load.html
[64]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161766v1/shard-lnl-1/igt@xe_module_load@load.html
[65]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161766v1/shard-lnl-1/igt@xe_module_load@load.html
[66]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161766v1/shard-lnl-3/igt@xe_module_load@load.html
[67]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161766v1/shard-lnl-7/igt@xe_module_load@load.html
[68]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161766v1/shard-lnl-1/igt@xe_module_load@load.html
[Intel XE#2652]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2652
[Intel XE#3304]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3304
[Intel XE#367]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/367
[Intel XE#378]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/378
[Intel XE#4459]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4459
[Intel XE#4757]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4757
[Intel XE#5545]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5545
[Intel XE#6010]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6010
[Intel XE#6652]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6652
[Intel XE#787]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/787
Build changes
-------------
* Linux: xe-4573-7ee0795cb4f30c9ccc2b8a580faebcefbdf150c5 -> xe-pw-161766v1
IGT_8760: 8760
xe-4573-7ee0795cb4f30c9ccc2b8a580faebcefbdf150c5: 7ee0795cb4f30c9ccc2b8a580faebcefbdf150c5
xe-pw-161766v1: 161766v1
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161766v1/index.html
[-- Attachment #2: Type: text/html, Size: 14148 bytes --]
^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PATCH 06/19] drm/i915/overlay: Introduce i915_overlay_obj_lookup()
2026-02-18 15:27 ` [PATCH 06/19] drm/i915/overlay: Introduce i915_overlay_obj_lookup() Ville Syrjala
@ 2026-02-25 9:40 ` Jani Nikula
2026-02-25 10:06 ` Ville Syrjälä
0 siblings, 1 reply; 31+ messages in thread
From: Jani Nikula @ 2026-02-25 9:40 UTC (permalink / raw)
To: Ville Syrjala, intel-gfx; +Cc: intel-xe
On Wed, 18 Feb 2026, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Extract the BO lookup and tiling check into a new
> helper called i915_overlay_obj_lookup(). This will have to
> move to the i915 side of the parent vs. display driver split.
>
> There is a slight change here in that we now do the tiling
> check before taking the modeset locks, but those locks don't
> protect the BO tiling stuff in any way, so nothing is really
> different here.
>
> Note that the hardware should support X-tiled scanout also
> for the overlay, but I guess no one ever bothered to hook
> it up and test it. So the check should stay at least for now.
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_overlay.c | 31 ++++++++++++++------
> 1 file changed, 22 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_overlay.c b/drivers/gpu/drm/i915/display/intel_overlay.c
> index e1707a678acb..5c4f8bf8ac44 100644
> --- a/drivers/gpu/drm/i915/display/intel_overlay.c
> +++ b/drivers/gpu/drm/i915/display/intel_overlay.c
> @@ -1125,6 +1125,26 @@ static int check_overlay_src(struct intel_display *display,
> return 0;
> }
>
> +static struct drm_i915_gem_object *
> +i915_overlay_obj_lookup(struct drm_device *drm,
> + struct drm_file *file_priv,
> + u32 handle)
> +{
> + struct drm_i915_gem_object *bo;
> +
> + bo = i915_gem_object_lookup(file_priv, handle);
> + if (!bo)
> + return ERR_PTR(-ENOENT);
> +
> + if (i915_gem_object_is_tiled(bo)) {
> + drm_dbg(drm, "buffer used for overlay image can not be tiled\n");
> + i915_gem_object_put(bo);
> + return ERR_PTR(-EINVAL);
> + }
> +
> + return bo;
> +}
> +
> int intel_overlay_put_image_ioctl(struct drm_device *dev, void *data,
> struct drm_file *file_priv)
> {
> @@ -1155,19 +1175,12 @@ int intel_overlay_put_image_ioctl(struct drm_device *dev, void *data,
> return -ENOENT;
> crtc = to_intel_crtc(drmmode_crtc);
>
> - new_bo = i915_gem_object_lookup(file_priv, params->bo_handle);
> + new_bo = i915_overlay_obj_lookup(dev, file_priv, params->bo_handle);
> if (!new_bo)
i915_overlay_obj_lookup() returns error pointers.
> - return -ENOENT;
> + return PTR_ERR(new_bo);
>
> drm_modeset_lock_all(dev);
>
> - if (i915_gem_object_is_tiled(new_bo)) {
> - drm_dbg_kms(display->drm,
> - "buffer used for overlay image can not be tiled\n");
> - ret = -EINVAL;
> - goto out_unlock;
> - }
> -
> ret = intel_overlay_recover_from_interrupt(overlay);
> if (ret != 0)
> goto out_unlock;
--
Jani Nikula, Intel
^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PATCH 17/19] drm/i915/overlay: Don't use fetch_and_zero() in display code
2026-02-18 15:28 ` [PATCH 17/19] drm/i915/overlay: Don't use fetch_and_zero() in display code Ville Syrjala
@ 2026-02-25 9:47 ` Jani Nikula
2026-02-25 10:00 ` Ville Syrjälä
0 siblings, 1 reply; 31+ messages in thread
From: Jani Nikula @ 2026-02-25 9:47 UTC (permalink / raw)
To: Ville Syrjala, intel-gfx; +Cc: intel-xe
On Wed, 18 Feb 2026, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> We don't have fetch_and_zero() on the display side, so stop
Unfortunately, we do have a dupe of it display side too. I wish it would
just die. I approve of the patch anyway.
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
> using it in the display side intel_overlay_cleanup(). Fortunately
> we don't really have anything to do here apart from freeing the
> data. And we'll keep on clearing the pointer, just in case something
> somewhere cares about it.
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_overlay.c | 9 ++-------
> 1 file changed, 2 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_overlay.c b/drivers/gpu/drm/i915/display/intel_overlay.c
> index 8b06c2cff7f2..6a2af1f356ed 100644
> --- a/drivers/gpu/drm/i915/display/intel_overlay.c
> +++ b/drivers/gpu/drm/i915/display/intel_overlay.c
> @@ -1554,13 +1554,8 @@ static void i915_overlay_cleanup(struct drm_device *drm)
>
> void intel_overlay_cleanup(struct intel_display *display)
> {
> - struct intel_overlay *overlay;
> -
> - overlay = fetch_and_zero(&display->overlay);
> - if (!overlay)
> - return;
> -
> i915_overlay_cleanup(display->drm);
>
> - kfree(overlay);
> + kfree(display->overlay);
> + display->overlay = NULL;
> }
--
Jani Nikula, Intel
^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PATCH 17/19] drm/i915/overlay: Don't use fetch_and_zero() in display code
2026-02-25 9:47 ` Jani Nikula
@ 2026-02-25 10:00 ` Ville Syrjälä
0 siblings, 0 replies; 31+ messages in thread
From: Ville Syrjälä @ 2026-02-25 10:00 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx, intel-xe
On Wed, Feb 25, 2026 at 11:47:26AM +0200, Jani Nikula wrote:
> On Wed, 18 Feb 2026, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> >
> > We don't have fetch_and_zero() on the display side, so stop
>
> Unfortunately, we do have a dupe of it display side too. I wish it would
> just die. I approve of the patch anyway.
Ah, I guess it was just hiding in some header that I wasn't including.
But yeah, we definitely don't need it here.
>
> Reviewed-by: Jani Nikula <jani.nikula@intel.com>
>
>
> > using it in the display side intel_overlay_cleanup(). Fortunately
> > we don't really have anything to do here apart from freeing the
> > data. And we'll keep on clearing the pointer, just in case something
> > somewhere cares about it.
> >
> > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > ---
> > drivers/gpu/drm/i915/display/intel_overlay.c | 9 ++-------
> > 1 file changed, 2 insertions(+), 7 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_overlay.c b/drivers/gpu/drm/i915/display/intel_overlay.c
> > index 8b06c2cff7f2..6a2af1f356ed 100644
> > --- a/drivers/gpu/drm/i915/display/intel_overlay.c
> > +++ b/drivers/gpu/drm/i915/display/intel_overlay.c
> > @@ -1554,13 +1554,8 @@ static void i915_overlay_cleanup(struct drm_device *drm)
> >
> > void intel_overlay_cleanup(struct intel_display *display)
> > {
> > - struct intel_overlay *overlay;
> > -
> > - overlay = fetch_and_zero(&display->overlay);
> > - if (!overlay)
> > - return;
> > -
> > i915_overlay_cleanup(display->drm);
> >
> > - kfree(overlay);
> > + kfree(display->overlay);
> > + display->overlay = NULL;
> > }
>
> --
> Jani Nikula, Intel
--
Ville Syrjälä
Intel
^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PATCH 06/19] drm/i915/overlay: Introduce i915_overlay_obj_lookup()
2026-02-25 9:40 ` Jani Nikula
@ 2026-02-25 10:06 ` Ville Syrjälä
0 siblings, 0 replies; 31+ messages in thread
From: Ville Syrjälä @ 2026-02-25 10:06 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx, intel-xe
On Wed, Feb 25, 2026 at 11:40:54AM +0200, Jani Nikula wrote:
> On Wed, 18 Feb 2026, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> >
> > Extract the BO lookup and tiling check into a new
> > helper called i915_overlay_obj_lookup(). This will have to
> > move to the i915 side of the parent vs. display driver split.
> >
> > There is a slight change here in that we now do the tiling
> > check before taking the modeset locks, but those locks don't
> > protect the BO tiling stuff in any way, so nothing is really
> > different here.
> >
> > Note that the hardware should support X-tiled scanout also
> > for the overlay, but I guess no one ever bothered to hook
> > it up and test it. So the check should stay at least for now.
> >
> > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > ---
> > drivers/gpu/drm/i915/display/intel_overlay.c | 31 ++++++++++++++------
> > 1 file changed, 22 insertions(+), 9 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_overlay.c b/drivers/gpu/drm/i915/display/intel_overlay.c
> > index e1707a678acb..5c4f8bf8ac44 100644
> > --- a/drivers/gpu/drm/i915/display/intel_overlay.c
> > +++ b/drivers/gpu/drm/i915/display/intel_overlay.c
> > @@ -1125,6 +1125,26 @@ static int check_overlay_src(struct intel_display *display,
> > return 0;
> > }
> >
> > +static struct drm_i915_gem_object *
> > +i915_overlay_obj_lookup(struct drm_device *drm,
> > + struct drm_file *file_priv,
> > + u32 handle)
> > +{
> > + struct drm_i915_gem_object *bo;
> > +
> > + bo = i915_gem_object_lookup(file_priv, handle);
> > + if (!bo)
> > + return ERR_PTR(-ENOENT);
> > +
> > + if (i915_gem_object_is_tiled(bo)) {
> > + drm_dbg(drm, "buffer used for overlay image can not be tiled\n");
> > + i915_gem_object_put(bo);
> > + return ERR_PTR(-EINVAL);
> > + }
> > +
> > + return bo;
> > +}
> > +
> > int intel_overlay_put_image_ioctl(struct drm_device *dev, void *data,
> > struct drm_file *file_priv)
> > {
> > @@ -1155,19 +1175,12 @@ int intel_overlay_put_image_ioctl(struct drm_device *dev, void *data,
> > return -ENOENT;
> > crtc = to_intel_crtc(drmmode_crtc);
> >
> > - new_bo = i915_gem_object_lookup(file_priv, params->bo_handle);
> > + new_bo = i915_overlay_obj_lookup(dev, file_priv, params->bo_handle);
> > if (!new_bo)
>
> i915_overlay_obj_lookup() returns error pointers.
Ack. Good catch.
>
> > - return -ENOENT;
> > + return PTR_ERR(new_bo);
> >
> > drm_modeset_lock_all(dev);
> >
> > - if (i915_gem_object_is_tiled(new_bo)) {
> > - drm_dbg_kms(display->drm,
> > - "buffer used for overlay image can not be tiled\n");
> > - ret = -EINVAL;
> > - goto out_unlock;
> > - }
> > -
> > ret = intel_overlay_recover_from_interrupt(overlay);
> > if (ret != 0)
> > goto out_unlock;
>
> --
> Jani Nikula, Intel
--
Ville Syrjälä
Intel
^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PATCH 02/19] drm/i915/overlay: Track current frontbuffer_bits
2026-02-18 15:27 ` [PATCH 02/19] drm/i915/overlay: Track current frontbuffer_bits Ville Syrjala
@ 2026-02-25 10:38 ` Jani Nikula
0 siblings, 0 replies; 31+ messages in thread
From: Jani Nikula @ 2026-02-25 10:38 UTC (permalink / raw)
To: Ville Syrjala, intel-gfx; +Cc: intel-xe
On Wed, 18 Feb 2026, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Store the current frontbuffer_bits in the overlay data. The
> main benefit here is that we get rid of the 'crtc->pipe'
> usage from intel_overlay_flip_prepare() which will have to
> move to the i915 side of the parent vs. display driver split.
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_overlay.c | 19 ++++++++++++-------
> 1 file changed, 12 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_overlay.c b/drivers/gpu/drm/i915/display/intel_overlay.c
> index 33a38d116c90..dd04e75fe3a7 100644
> --- a/drivers/gpu/drm/i915/display/intel_overlay.c
> +++ b/drivers/gpu/drm/i915/display/intel_overlay.c
> @@ -205,6 +205,7 @@ struct intel_overlay {
> struct drm_i915_gem_object *reg_bo;
> struct overlay_registers __iomem *regs;
> u32 flip_addr;
> + u32 frontbuffer_bits;
> /* flip handling */
> struct i915_active last_flip;
> void (*flip_complete)(struct intel_overlay *ovl);
> @@ -255,7 +256,8 @@ alloc_request(struct intel_overlay *overlay, void (*fn)(struct intel_overlay *))
> }
>
> /* overlay needs to be disable in OCMD reg */
> -static int intel_overlay_on(struct intel_overlay *overlay)
> +static int intel_overlay_on(struct intel_overlay *overlay,
> + u32 frontbuffer_bits)
> {
> struct intel_display *display = overlay->display;
> struct i915_request *rq;
> @@ -274,6 +276,7 @@ static int intel_overlay_on(struct intel_overlay *overlay)
> }
>
> overlay->active = true;
> + overlay->frontbuffer_bits = frontbuffer_bits;
>
> if (display->platform.i830)
> i830_overlay_clock_gating(display, false);
> @@ -293,7 +296,6 @@ static void intel_overlay_flip_prepare(struct intel_overlay *overlay,
> struct i915_vma *vma)
> {
> struct intel_display *display = overlay->display;
> - enum pipe pipe = overlay->crtc->pipe;
> struct intel_frontbuffer *frontbuffer = NULL;
>
> drm_WARN_ON(display->drm, overlay->old_vma);
> @@ -302,7 +304,7 @@ static void intel_overlay_flip_prepare(struct intel_overlay *overlay,
> frontbuffer = intel_frontbuffer_get(intel_bo_to_drm_bo(vma->obj));
>
> intel_frontbuffer_track(overlay->frontbuffer, frontbuffer,
> - INTEL_FRONTBUFFER_OVERLAY(pipe));
> + overlay->frontbuffer_bits);
>
> if (overlay->frontbuffer)
> intel_frontbuffer_put(overlay->frontbuffer);
> @@ -364,7 +366,7 @@ static void intel_overlay_release_old_vma(struct intel_overlay *overlay)
> if (drm_WARN_ON(display->drm, !vma))
> return;
>
> - intel_frontbuffer_flip(display, INTEL_FRONTBUFFER_OVERLAY(overlay->crtc->pipe));
> + intel_frontbuffer_flip(display, overlay->frontbuffer_bits);
>
> i915_vma_unpin(vma);
> i915_vma_put(vma);
> @@ -382,9 +384,8 @@ static void intel_overlay_off_tail(struct intel_overlay *overlay)
>
> intel_overlay_release_old_vma(overlay);
>
> - overlay->crtc->overlay = NULL;
> - overlay->crtc = NULL;
The movement of these to intel_overlay_switch_off() seems like an
unrelated change. Maybe mention in the commit message at a minimum.
BR,
Jani.
> overlay->active = false;
> + overlay->frontbuffer_bits = 0;
>
> if (display->platform.i830)
> i830_overlay_clock_gating(display, true);
> @@ -506,6 +507,7 @@ void intel_overlay_reset(struct intel_display *display)
> overlay->old_yscale = 0;
> overlay->crtc = NULL;
> overlay->active = false;
> + overlay->frontbuffer_bits = 0;
> }
>
> static int packed_depth_bytes(u32 format)
> @@ -836,7 +838,7 @@ static int intel_overlay_do_put_image(struct intel_overlay *overlay,
> OCONF_PIPE_A : OCONF_PIPE_B;
> iowrite32(oconfig, ®s->OCONFIG);
>
> - ret = intel_overlay_on(overlay);
> + ret = intel_overlay_on(overlay, INTEL_FRONTBUFFER_OVERLAY(pipe));
> if (ret != 0)
> goto out_unpin;
> }
> @@ -924,6 +926,9 @@ int intel_overlay_switch_off(struct intel_overlay *overlay)
>
> iowrite32(0, &overlay->regs->OCMD);
>
> + overlay->crtc->overlay = NULL;
> + overlay->crtc = NULL;
> +
> return intel_overlay_off(overlay);
> }
--
Jani Nikula, Intel
^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PATCH 00/19] drm/i915/overlay: Convert to parent interface
2026-02-18 15:27 [PATCH 00/19] drm/i915/overlay: Convert to parent interface Ville Syrjala
` (23 preceding siblings ...)
2026-02-18 21:42 ` ✗ Xe.CI.FULL: " Patchwork
@ 2026-02-25 11:19 ` Jani Nikula
24 siblings, 0 replies; 31+ messages in thread
From: Jani Nikula @ 2026-02-25 11:19 UTC (permalink / raw)
To: Ville Syrjala, intel-gfx; +Cc: intel-xe
On Wed, 18 Feb 2026, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Split the overlay code into i915 vs. display parts and introduce
> and new parent interface for the display->i915 calls.
>
> The interface is rather verbose due to the interruptible ioctl
> design of the overlay code. Ideally we'd implement the overlay
> as a drm plane and tell it to flip via MMIO writes to OVADD,
> at which point the parent interface could be limited to just
> two functions to repartition the render cache as needed.
> Maybe one day...
>
> Smoke tested on i830 and i965gm.
I'm a bit sad how verbose the interface ended up being, especially
considering I was prepared to nuke the entire thing [1].
I reviewed this fairly lightly, commented in a few places, and I'm happy
enough with the end result, even if not thrilled. As always, I'm pretty
much trusting you to maintain and test this, as we don't have relevant
tests in IGT nor machines in CI, and we're not really getting bug
reports for the oldest platform anymore either.
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
Along with the error pointer fix, the whole thing needs a rebase due to:
69050f8d6d07 ("treewide: Replace kmalloc with kmalloc_obj for non-scalar types")
bf4afc53b77a ("Convert 'alloc_obj' family to use the new default GFP_KERNEL argument")
from upstream.
[1] https://lore.kernel.org/r/20260204164827.807502-1-jani.nikula@intel.com
>
> Ville Syrjälä (19):
> drm/i915/overlay: Remove GPU hang snapshot stuff
> drm/i915/overlay: Track current frontbuffer_bits
> drm/i915/overlay: Extract i915_overlay_is_active()
> drm/i915/overlay: Remove redundant overlay->active
> drm/i915/overlay: Relocate the underrun check
> drm/i915/overlay: Introduce i915_overlay_obj_lookup()
> drm/i915/overlay: Use struct drm_gem_object as the type
> drm/i915/overlay: Extract i915_overlay_reset()
> drm/i915/overlay: Extract i915_overlay_setup()
> drm/i915/overlay: Extract i915_overlay_cleanup()
> drm/i915/overlay: Abstract buffer (un)pinning
> drm/i915/overlay: Rename low level i915 specific functions
> drm/i915/overlay: Adjust i915 specific interfaces
> drm/i915/overlay: Make i830_overlay_clock_gating() i915 specific
> drm/i915/overlay: s/dev_priv/i915/
> drm/i915/overlay: Split 'struct intel_overlay'
> drm/i915/overlay: Don't use fetch_and_zero() in display code
> drm/i915/overlay: Move i915 specific code into i915_overlay.c
> drm/i915/overlay: Convert overlay to parent interface
>
> drivers/gpu/drm/i915/Makefile | 1 +
> .../gpu/drm/i915/display/intel_display_regs.h | 2 -
> .../drm/i915/display/intel_display_snapshot.c | 4 -
> drivers/gpu/drm/i915/display/intel_overlay.c | 584 ++----------------
> drivers/gpu/drm/i915/display/intel_overlay.h | 48 --
> drivers/gpu/drm/i915/display/intel_parent.c | 76 +++
> drivers/gpu/drm/i915/display/intel_parent.h | 26 +
> drivers/gpu/drm/i915/i915_driver.c | 2 +
> drivers/gpu/drm/i915/i915_drv.h | 3 +
> drivers/gpu/drm/i915/i915_overlay.c | 517 ++++++++++++++++
> drivers/gpu/drm/i915/i915_overlay.h | 11 +
> drivers/gpu/drm/i915/i915_reg.h | 4 +
> drivers/gpu/drm/xe/Makefile | 1 +
> include/drm/intel/display_parent_interface.h | 33 +
> 14 files changed, 726 insertions(+), 586 deletions(-)
> create mode 100644 drivers/gpu/drm/i915/i915_overlay.c
> create mode 100644 drivers/gpu/drm/i915/i915_overlay.h
--
Jani Nikula, Intel
^ permalink raw reply [flat|nested] 31+ messages in thread
end of thread, other threads:[~2026-02-25 11:19 UTC | newest]
Thread overview: 31+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-02-18 15:27 [PATCH 00/19] drm/i915/overlay: Convert to parent interface Ville Syrjala
2026-02-18 15:27 ` [PATCH 01/19] drm/i915/overlay: Remove GPU hang snapshot stuff Ville Syrjala
2026-02-18 15:27 ` [PATCH 02/19] drm/i915/overlay: Track current frontbuffer_bits Ville Syrjala
2026-02-25 10:38 ` Jani Nikula
2026-02-18 15:27 ` [PATCH 03/19] drm/i915/overlay: Extract i915_overlay_is_active() Ville Syrjala
2026-02-18 15:27 ` [PATCH 04/19] drm/i915/overlay: Remove redundant overlay->active Ville Syrjala
2026-02-18 15:27 ` [PATCH 05/19] drm/i915/overlay: Relocate the underrun check Ville Syrjala
2026-02-18 15:27 ` [PATCH 06/19] drm/i915/overlay: Introduce i915_overlay_obj_lookup() Ville Syrjala
2026-02-25 9:40 ` Jani Nikula
2026-02-25 10:06 ` Ville Syrjälä
2026-02-18 15:27 ` [PATCH 07/19] drm/i915/overlay: Use struct drm_gem_object as the type Ville Syrjala
2026-02-18 15:27 ` [PATCH 08/19] drm/i915/overlay: Extract i915_overlay_reset() Ville Syrjala
2026-02-18 15:27 ` [PATCH 09/19] drm/i915/overlay: Extract i915_overlay_setup() Ville Syrjala
2026-02-18 15:27 ` [PATCH 10/19] drm/i915/overlay: Extract i915_overlay_cleanup() Ville Syrjala
2026-02-18 15:27 ` [PATCH 11/19] drm/i915/overlay: Abstract buffer (un)pinning Ville Syrjala
2026-02-18 15:27 ` [PATCH 12/19] drm/i915/overlay: Rename low level i915 specific functions Ville Syrjala
2026-02-18 15:28 ` [PATCH 13/19] drm/i915/overlay: Adjust i915 specific interfaces Ville Syrjala
2026-02-18 15:28 ` [PATCH 14/19] drm/i915/overlay: Make i830_overlay_clock_gating() i915 specific Ville Syrjala
2026-02-18 15:28 ` [PATCH 15/19] drm/i915/overlay: s/dev_priv/i915/ Ville Syrjala
2026-02-18 15:28 ` [PATCH 16/19] drm/i915/overlay: Split 'struct intel_overlay' Ville Syrjala
2026-02-18 15:28 ` [PATCH 17/19] drm/i915/overlay: Don't use fetch_and_zero() in display code Ville Syrjala
2026-02-25 9:47 ` Jani Nikula
2026-02-25 10:00 ` Ville Syrjälä
2026-02-18 15:28 ` [PATCH 18/19] drm/i915/overlay: Move i915 specific code into i915_overlay.c Ville Syrjala
2026-02-18 15:28 ` [PATCH 19/19] drm/i915/overlay: Convert overlay to parent interface Ville Syrjala
2026-02-18 18:09 ` ✗ CI.checkpatch: warning for drm/i915/overlay: Convert " Patchwork
2026-02-18 18:11 ` ✓ CI.KUnit: success " Patchwork
2026-02-18 18:26 ` ✗ CI.checksparse: warning " Patchwork
2026-02-18 19:12 ` ✗ Xe.CI.BAT: failure " Patchwork
2026-02-18 21:42 ` ✗ Xe.CI.FULL: " Patchwork
2026-02-25 11:19 ` [PATCH 00/19] " Jani Nikula
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox