* [PATCH v6 0/7] drm/i915/xe3: FBC Dirty rect feature support
@ 2025-01-30 21:00 Vinod Govindapillai
2025-01-30 21:00 ` [PATCH v6 1/7] drm/i915/xe3: add register definitions for fbc dirty rect support Vinod Govindapillai
` (11 more replies)
0 siblings, 12 replies; 28+ messages in thread
From: Vinod Govindapillai @ 2025-01-30 21:00 UTC (permalink / raw)
To: intel-gfx, intel-xe
Cc: vinod.govindapillai, ville.syrjala, santhosh.reddy.guddati,
jani.saarinen
Dirty rect support for FBC in xe3 onwards based on the comments after the
initial RFC series.
v2: Dirty rect related compute and storage moved to fbc state (Ville)
V3: Dont call fbc activate if FBC is already active
v4: Dirty rect compute and programming moved within DSB scope
New changes are added as separate patches to make it easy for review
But could be squashed if the reviews as ok.
v5: add HAS_FBC_DIRTY_RECT()
FBC Damage area updates in 3 steps.
1. As part of plane_atomic_check() get, adjust coordinates and store
the merged damage area in plane_state
2. Atomic_commit, update merged damage are to fbc_state and prepare the
damage area satifying all conditions
3 update the FBC dirty rect registers as part of DSB commit.
v6: Use dmage_merged helper earlier to handle bigjoiner cases (Ville)
Place the damage_merged handling code under HAS_FBC_DIRTY_RECT()
Added a variable to check if the damage_merged received from
the helper is valid. And if it is not valid, the FBC dirty rect
is updated with full plane reqion.
Vinod Govindapillai (7):
drm/i915/xe3: add register definitions for fbc dirty rect support
drm/i915/xe3: introduce HAS_FBC_DIRTY_RECT() for FBC dirty rect
support
drm/damage-helper: add const qualifier in
drm_atomic_helper_damage_merged()
drm/i915/xe3: update and store the plane damage clips
drm/i915/xe3: dirty rect support for FBC
drm/i915/xe3: avoid calling fbc activate if fbc is active
drm/i915/xe3: disable FBC if PSR2 selective fetch is enabled
drivers/gpu/drm/drm_damage_helper.c | 2 +-
.../gpu/drm/i915/display/intel_atomic_plane.c | 28 ++++
drivers/gpu/drm/i915/display/intel_display.c | 7 +
.../drm/i915/display/intel_display_device.h | 1 +
.../drm/i915/display/intel_display_types.h | 2 +
drivers/gpu/drm/i915/display/intel_fbc.c | 152 +++++++++++++++++-
drivers/gpu/drm/i915/display/intel_fbc.h | 6 +
drivers/gpu/drm/i915/display/intel_fbc_regs.h | 9 ++
.../drm/i915/display/skl_universal_plane.c | 45 +++++-
include/drm/drm_damage_helper.h | 2 +-
10 files changed, 246 insertions(+), 8 deletions(-)
--
2.43.0
^ permalink raw reply [flat|nested] 28+ messages in thread* [PATCH v6 1/7] drm/i915/xe3: add register definitions for fbc dirty rect support 2025-01-30 21:00 [PATCH v6 0/7] drm/i915/xe3: FBC Dirty rect feature support Vinod Govindapillai @ 2025-01-30 21:00 ` Vinod Govindapillai 2025-02-05 9:42 ` Kandpal, Suraj 2025-01-30 21:00 ` [PATCH v6 2/7] drm/i915/xe3: introduce HAS_FBC_DIRTY_RECT() for FBC " Vinod Govindapillai ` (10 subsequent siblings) 11 siblings, 1 reply; 28+ messages in thread From: Vinod Govindapillai @ 2025-01-30 21:00 UTC (permalink / raw) To: intel-gfx, intel-xe Cc: vinod.govindapillai, ville.syrjala, santhosh.reddy.guddati, jani.saarinen Register definitions for FBC dirty rect support Bspec: 71675, 73424 Signed-off-by: Vinod Govindapillai <vinod.govindapillai@intel.com> --- drivers/gpu/drm/i915/display/intel_fbc_regs.h | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/drivers/gpu/drm/i915/display/intel_fbc_regs.h b/drivers/gpu/drm/i915/display/intel_fbc_regs.h index ae0699c3c2fe..b1d0161a3196 100644 --- a/drivers/gpu/drm/i915/display/intel_fbc_regs.h +++ b/drivers/gpu/drm/i915/display/intel_fbc_regs.h @@ -100,6 +100,15 @@ #define FBC_STRIDE_MASK REG_GENMASK(14, 0) #define FBC_STRIDE(x) REG_FIELD_PREP(FBC_STRIDE_MASK, (x)) +#define XE3_FBC_DIRTY_RECT(fbc_id) _MMIO_PIPE((fbc_id), 0x43230, 0x43270) +#define FBC_DIRTY_RECT_END_LINE_MASK REG_GENMASK(31, 16) +#define FBC_DIRTY_RECT_END_LINE(val) REG_FIELD_PREP(FBC_DIRTY_RECT_END_LINE_MASK, (val)) +#define FBC_DIRTY_RECT_START_LINE_MASK REG_GENMASK(15, 0) +#define FBC_DIRTY_RECT_START_LINE(val) REG_FIELD_PREP(FBC_DIRTY_RECT_START_LINE_MASK, (val)) + +#define XE3_FBC_DIRTY_CTL(fbc_id) _MMIO_PIPE((fbc_id), 0x43234, 0x43274) +#define FBC_DIRTY_RECT_EN REG_BIT(31) + #define ILK_FBC_RT_BASE _MMIO(0x2128) #define ILK_FBC_RT_VALID REG_BIT(0) #define SNB_FBC_FRONT_BUFFER REG_BIT(1) -- 2.43.0 ^ permalink raw reply related [flat|nested] 28+ messages in thread
* RE: [PATCH v6 1/7] drm/i915/xe3: add register definitions for fbc dirty rect support 2025-01-30 21:00 ` [PATCH v6 1/7] drm/i915/xe3: add register definitions for fbc dirty rect support Vinod Govindapillai @ 2025-02-05 9:42 ` Kandpal, Suraj 0 siblings, 0 replies; 28+ messages in thread From: Kandpal, Suraj @ 2025-02-05 9:42 UTC (permalink / raw) To: Govindapillai, Vinod, intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org Cc: Govindapillai, Vinod, Syrjala, Ville, Reddy Guddati, Santhosh, Saarinen, Jani > -----Original Message----- > From: Intel-gfx <intel-gfx-bounces@lists.freedesktop.org> On Behalf Of Vinod > Govindapillai > Sent: Friday, January 31, 2025 2:30 AM > To: intel-gfx@lists.freedesktop.org; intel-xe@lists.freedesktop.org > Cc: Govindapillai, Vinod <vinod.govindapillai@intel.com>; Syrjala, Ville > <ville.syrjala@intel.com>; Reddy Guddati, Santhosh > <santhosh.reddy.guddati@intel.com>; Saarinen, Jani > <jani.saarinen@intel.com> > Subject: [PATCH v6 1/7] drm/i915/xe3: add register definitions for fbc dirty > rect support > > Register definitions for FBC dirty rect support > > Bspec: 71675, 73424 Add the reference for 69003 for FBC instances Otherwise LGTM, Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com> > Signed-off-by: Vinod Govindapillai <vinod.govindapillai@intel.com> > --- > drivers/gpu/drm/i915/display/intel_fbc_regs.h | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/drivers/gpu/drm/i915/display/intel_fbc_regs.h > b/drivers/gpu/drm/i915/display/intel_fbc_regs.h > index ae0699c3c2fe..b1d0161a3196 100644 > --- a/drivers/gpu/drm/i915/display/intel_fbc_regs.h > +++ b/drivers/gpu/drm/i915/display/intel_fbc_regs.h > @@ -100,6 +100,15 @@ > #define FBC_STRIDE_MASK REG_GENMASK(14, 0) > #define FBC_STRIDE(x) REG_FIELD_PREP(FBC_STRIDE_MASK, > (x)) > > +#define XE3_FBC_DIRTY_RECT(fbc_id) _MMIO_PIPE((fbc_id), 0x43230, > 0x43270) > +#define FBC_DIRTY_RECT_END_LINE_MASK REG_GENMASK(31, > 16) > +#define FBC_DIRTY_RECT_END_LINE(val) > REG_FIELD_PREP(FBC_DIRTY_RECT_END_LINE_MASK, (val)) > +#define FBC_DIRTY_RECT_START_LINE_MASK REG_GENMASK(15, 0) > +#define FBC_DIRTY_RECT_START_LINE(val) > REG_FIELD_PREP(FBC_DIRTY_RECT_START_LINE_MASK, (val)) > + > +#define XE3_FBC_DIRTY_CTL(fbc_id) _MMIO_PIPE((fbc_id), 0x43234, > 0x43274) > +#define FBC_DIRTY_RECT_EN REG_BIT(31) > + > #define ILK_FBC_RT_BASE _MMIO(0x2128) > #define ILK_FBC_RT_VALID REG_BIT(0) > #define SNB_FBC_FRONT_BUFFER REG_BIT(1) > -- > 2.43.0 ^ permalink raw reply [flat|nested] 28+ messages in thread
* [PATCH v6 2/7] drm/i915/xe3: introduce HAS_FBC_DIRTY_RECT() for FBC dirty rect support 2025-01-30 21:00 [PATCH v6 0/7] drm/i915/xe3: FBC Dirty rect feature support Vinod Govindapillai 2025-01-30 21:00 ` [PATCH v6 1/7] drm/i915/xe3: add register definitions for fbc dirty rect support Vinod Govindapillai @ 2025-01-30 21:00 ` Vinod Govindapillai 2025-02-05 9:43 ` Kandpal, Suraj 2025-01-30 21:00 ` [PATCH v6 3/7] drm/damage-helper: add const qualifier in drm_atomic_helper_damage_merged() Vinod Govindapillai ` (9 subsequent siblings) 11 siblings, 1 reply; 28+ messages in thread From: Vinod Govindapillai @ 2025-01-30 21:00 UTC (permalink / raw) To: intel-gfx, intel-xe Cc: vinod.govindapillai, ville.syrjala, santhosh.reddy.guddati, jani.saarinen Introduce a macro to check if the platform supports FBC dirty rect capability. Signed-off-by: Vinod Govindapillai <vinod.govindapillai@intel.com> --- drivers/gpu/drm/i915/display/intel_display_device.h | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/gpu/drm/i915/display/intel_display_device.h b/drivers/gpu/drm/i915/display/intel_display_device.h index fc33791f02b9..717286981687 100644 --- a/drivers/gpu/drm/i915/display/intel_display_device.h +++ b/drivers/gpu/drm/i915/display/intel_display_device.h @@ -163,6 +163,7 @@ struct intel_display_platforms { #define HAS_DSC(__display) (DISPLAY_RUNTIME_INFO(__display)->has_dsc) #define HAS_DSC_MST(__display) (DISPLAY_VER(__display) >= 12 && HAS_DSC(__display)) #define HAS_FBC(__display) (DISPLAY_RUNTIME_INFO(__display)->fbc_mask != 0) +#define HAS_FBC_DIRTY_RECT(__display) (DISPLAY_VER(__display) >= 30) #define HAS_FPGA_DBG_UNCLAIMED(__display) (DISPLAY_INFO(__display)->has_fpga_dbg) #define HAS_FW_BLC(__display) (DISPLAY_VER(__display) >= 3) #define HAS_GMBUS_IRQ(__display) (DISPLAY_VER(__display) >= 4) -- 2.43.0 ^ permalink raw reply related [flat|nested] 28+ messages in thread
* RE: [PATCH v6 2/7] drm/i915/xe3: introduce HAS_FBC_DIRTY_RECT() for FBC dirty rect support 2025-01-30 21:00 ` [PATCH v6 2/7] drm/i915/xe3: introduce HAS_FBC_DIRTY_RECT() for FBC " Vinod Govindapillai @ 2025-02-05 9:43 ` Kandpal, Suraj 0 siblings, 0 replies; 28+ messages in thread From: Kandpal, Suraj @ 2025-02-05 9:43 UTC (permalink / raw) To: Govindapillai, Vinod, intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org Cc: Govindapillai, Vinod, Syrjala, Ville, Reddy Guddati, Santhosh, Saarinen, Jani > -----Original Message----- > From: Intel-xe <intel-xe-bounces@lists.freedesktop.org> On Behalf Of Vinod > Govindapillai > Sent: Friday, January 31, 2025 2:30 AM > To: intel-gfx@lists.freedesktop.org; intel-xe@lists.freedesktop.org > Cc: Govindapillai, Vinod <vinod.govindapillai@intel.com>; Syrjala, Ville > <ville.syrjala@intel.com>; Reddy Guddati, Santhosh > <santhosh.reddy.guddati@intel.com>; Saarinen, Jani > <jani.saarinen@intel.com> > Subject: [PATCH v6 2/7] drm/i915/xe3: introduce HAS_FBC_DIRTY_RECT() for > FBC dirty rect support > > Introduce a macro to check if the platform supports FBC dirty rect capability. > > Signed-off-by: Vinod Govindapillai <vinod.govindapillai@intel.com> LGTM, Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com> > --- > drivers/gpu/drm/i915/display/intel_display_device.h | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/drivers/gpu/drm/i915/display/intel_display_device.h > b/drivers/gpu/drm/i915/display/intel_display_device.h > index fc33791f02b9..717286981687 100644 > --- a/drivers/gpu/drm/i915/display/intel_display_device.h > +++ b/drivers/gpu/drm/i915/display/intel_display_device.h > @@ -163,6 +163,7 @@ struct intel_display_platforms { > #define HAS_DSC(__display) (DISPLAY_RUNTIME_INFO(__display)- > >has_dsc) > #define HAS_DSC_MST(__display) (DISPLAY_VER(__display) >= > 12 && HAS_DSC(__display)) > #define HAS_FBC(__display) (DISPLAY_RUNTIME_INFO(__display)- > >fbc_mask != 0) > +#define HAS_FBC_DIRTY_RECT(__display) (DISPLAY_VER(__display) >= > 30) > #define HAS_FPGA_DBG_UNCLAIMED(__display) > (DISPLAY_INFO(__display)->has_fpga_dbg) > #define HAS_FW_BLC(__display) (DISPLAY_VER(__display) >= > 3) > #define HAS_GMBUS_IRQ(__display) (DISPLAY_VER(__display) >= 4) > -- > 2.43.0 ^ permalink raw reply [flat|nested] 28+ messages in thread
* [PATCH v6 3/7] drm/damage-helper: add const qualifier in drm_atomic_helper_damage_merged() 2025-01-30 21:00 [PATCH v6 0/7] drm/i915/xe3: FBC Dirty rect feature support Vinod Govindapillai 2025-01-30 21:00 ` [PATCH v6 1/7] drm/i915/xe3: add register definitions for fbc dirty rect support Vinod Govindapillai 2025-01-30 21:00 ` [PATCH v6 2/7] drm/i915/xe3: introduce HAS_FBC_DIRTY_RECT() for FBC " Vinod Govindapillai @ 2025-01-30 21:00 ` Vinod Govindapillai 2025-02-04 9:08 ` Jani Nikula 2025-01-30 21:00 ` [PATCH v6 4/7] drm/i915/xe3: update and store the plane damage clips Vinod Govindapillai ` (8 subsequent siblings) 11 siblings, 1 reply; 28+ messages in thread From: Vinod Govindapillai @ 2025-01-30 21:00 UTC (permalink / raw) To: intel-gfx, intel-xe Cc: vinod.govindapillai, ville.syrjala, santhosh.reddy.guddati, jani.saarinen Add a const qualifier for the "state" parameter as well as we could use this helper to get the combined damage in cases of const drm_plane_state as well. Needed mainly for xe driver big joiner cases where we need to track the damage from immutable plane state. Signed-off-by: Vinod Govindapillai <vinod.govindapillai@intel.com> --- drivers/gpu/drm/drm_damage_helper.c | 2 +- include/drm/drm_damage_helper.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/drm_damage_helper.c b/drivers/gpu/drm/drm_damage_helper.c index afb02aae707b..44a5a36806e3 100644 --- a/drivers/gpu/drm/drm_damage_helper.c +++ b/drivers/gpu/drm/drm_damage_helper.c @@ -308,7 +308,7 @@ EXPORT_SYMBOL(drm_atomic_helper_damage_iter_next); * True if there is valid plane damage otherwise false. */ bool drm_atomic_helper_damage_merged(const struct drm_plane_state *old_state, - struct drm_plane_state *state, + const struct drm_plane_state *state, struct drm_rect *rect) { struct drm_atomic_helper_damage_iter iter; diff --git a/include/drm/drm_damage_helper.h b/include/drm/drm_damage_helper.h index effda42cce31..a58cbcd11276 100644 --- a/include/drm/drm_damage_helper.h +++ b/include/drm/drm_damage_helper.h @@ -78,7 +78,7 @@ bool drm_atomic_helper_damage_iter_next(struct drm_atomic_helper_damage_iter *iter, struct drm_rect *rect); bool drm_atomic_helper_damage_merged(const struct drm_plane_state *old_state, - struct drm_plane_state *state, + const struct drm_plane_state *state, struct drm_rect *rect); #endif -- 2.43.0 ^ permalink raw reply related [flat|nested] 28+ messages in thread
* Re: [PATCH v6 3/7] drm/damage-helper: add const qualifier in drm_atomic_helper_damage_merged() 2025-01-30 21:00 ` [PATCH v6 3/7] drm/damage-helper: add const qualifier in drm_atomic_helper_damage_merged() Vinod Govindapillai @ 2025-02-04 9:08 ` Jani Nikula 0 siblings, 0 replies; 28+ messages in thread From: Jani Nikula @ 2025-02-04 9:08 UTC (permalink / raw) To: Vinod Govindapillai, intel-gfx, intel-xe Cc: vinod.govindapillai, ville.syrjala, santhosh.reddy.guddati, jani.saarinen On Thu, 30 Jan 2025, Vinod Govindapillai <vinod.govindapillai@intel.com> wrote: > Add a const qualifier for the "state" parameter as well as we could > use this helper to get the combined damage in cases of const > drm_plane_state as well. Needed mainly for xe driver big joiner cases > where we need to track the damage from immutable plane state. Needs to be sent to dri-devel. > > Signed-off-by: Vinod Govindapillai <vinod.govindapillai@intel.com> > --- > drivers/gpu/drm/drm_damage_helper.c | 2 +- > include/drm/drm_damage_helper.h | 2 +- > 2 files changed, 2 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/drm_damage_helper.c b/drivers/gpu/drm/drm_damage_helper.c > index afb02aae707b..44a5a36806e3 100644 > --- a/drivers/gpu/drm/drm_damage_helper.c > +++ b/drivers/gpu/drm/drm_damage_helper.c > @@ -308,7 +308,7 @@ EXPORT_SYMBOL(drm_atomic_helper_damage_iter_next); > * True if there is valid plane damage otherwise false. > */ > bool drm_atomic_helper_damage_merged(const struct drm_plane_state *old_state, > - struct drm_plane_state *state, > + const struct drm_plane_state *state, > struct drm_rect *rect) > { > struct drm_atomic_helper_damage_iter iter; > diff --git a/include/drm/drm_damage_helper.h b/include/drm/drm_damage_helper.h > index effda42cce31..a58cbcd11276 100644 > --- a/include/drm/drm_damage_helper.h > +++ b/include/drm/drm_damage_helper.h > @@ -78,7 +78,7 @@ bool > drm_atomic_helper_damage_iter_next(struct drm_atomic_helper_damage_iter *iter, > struct drm_rect *rect); > bool drm_atomic_helper_damage_merged(const struct drm_plane_state *old_state, > - struct drm_plane_state *state, > + const struct drm_plane_state *state, > struct drm_rect *rect); > > #endif -- Jani Nikula, Intel ^ permalink raw reply [flat|nested] 28+ messages in thread
* [PATCH v6 4/7] drm/i915/xe3: update and store the plane damage clips 2025-01-30 21:00 [PATCH v6 0/7] drm/i915/xe3: FBC Dirty rect feature support Vinod Govindapillai ` (2 preceding siblings ...) 2025-01-30 21:00 ` [PATCH v6 3/7] drm/damage-helper: add const qualifier in drm_atomic_helper_damage_merged() Vinod Govindapillai @ 2025-01-30 21:00 ` Vinod Govindapillai 2025-02-05 9:39 ` Kandpal, Suraj 2025-02-05 12:43 ` Ville Syrjälä 2025-01-30 21:00 ` [PATCH v6 5/7] drm/i915/xe3: dirty rect support for FBC Vinod Govindapillai ` (7 subsequent siblings) 11 siblings, 2 replies; 28+ messages in thread From: Vinod Govindapillai @ 2025-01-30 21:00 UTC (permalink / raw) To: intel-gfx, intel-xe Cc: vinod.govindapillai, ville.syrjala, santhosh.reddy.guddati, jani.saarinen Userspace can pass damage area clips per plane to track changes in a plane and some display components can utilze these damage clips for efficiently handling use cases like FBC, PSR etc. A merged damage area is generated and its coordinates are updated relative to viewport and HW and stored in the plane_state. This merged damage areas will be used for FBC dirty rect support in xe3 in the follow-up patch. Big thanks to Ville Syrjala for his contribuitions in shaping up of this series. v1: - Move damage_merged helper to cover bigjoiner case and use the correct plane state for damage find helper (Ville) - Damage handling code under HAS_FBC_DIRTY_RECT() so the the related part will be executed only for xe3+ - Changed dev_priv to i915 in one of the functions Signed-off-by: Vinod Govindapillai <vinod.govindapillai@intel.com> --- .../gpu/drm/i915/display/intel_atomic_plane.c | 28 ++++++++++++ .../drm/i915/display/intel_display_types.h | 2 + .../drm/i915/display/skl_universal_plane.c | 45 +++++++++++++++++-- 3 files changed, 71 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/i915/display/intel_atomic_plane.c b/drivers/gpu/drm/i915/display/intel_atomic_plane.c index c558143f4f82..f55f7044dc67 100644 --- a/drivers/gpu/drm/i915/display/intel_atomic_plane.c +++ b/drivers/gpu/drm/i915/display/intel_atomic_plane.c @@ -36,6 +36,7 @@ #include <drm/drm_atomic_helper.h> #include <drm/drm_blend.h> +#include <drm/drm_damage_helper.h> #include <drm/drm_fourcc.h> #include <drm/drm_gem.h> #include <drm/drm_gem_atomic_helper.h> @@ -322,6 +323,25 @@ static void intel_plane_clear_hw_state(struct intel_plane_state *plane_state) memset(&plane_state->hw, 0, sizeof(plane_state->hw)); } +static void +intel_plane_check_plane_damage(struct intel_plane_state *new_plane_state, + const struct intel_plane_state *old_primary_plane_state, + const struct intel_plane_state *new_primary_plane_state) +{ + struct intel_display *display = to_intel_display(new_plane_state); + struct drm_rect *damage_merged = &new_plane_state->damage_merged; + + if (!HAS_FBC_DIRTY_RECT(display)) + return; + + if (!drm_atomic_helper_damage_merged(&old_primary_plane_state->uapi, + &new_primary_plane_state->uapi, + damage_merged)) + /* Incase helper fails, mark whole plane region as damage */ + *damage_merged = + drm_plane_state_src(&new_primary_plane_state->uapi); +} + void intel_plane_copy_uapi_to_hw_state(struct intel_plane_state *plane_state, const struct intel_plane_state *from_plane_state, struct intel_crtc *crtc) @@ -691,6 +711,7 @@ int intel_plane_atomic_check(struct intel_atomic_state *state, const struct intel_plane_state *old_plane_state = intel_atomic_get_old_plane_state(state, plane); const struct intel_plane_state *new_primary_crtc_plane_state; + const struct intel_plane_state *old_primary_crtc_plane_state; struct intel_crtc *crtc = intel_crtc_for_pipe(display, plane->pipe); const struct intel_crtc_state *old_crtc_state = intel_atomic_get_old_crtc_state(state, crtc); @@ -705,10 +726,17 @@ int intel_plane_atomic_check(struct intel_atomic_state *state, new_primary_crtc_plane_state = intel_atomic_get_new_plane_state(state, primary_crtc_plane); + old_primary_crtc_plane_state = + intel_atomic_get_old_plane_state(state, primary_crtc_plane); } else { new_primary_crtc_plane_state = new_plane_state; + old_primary_crtc_plane_state = old_plane_state; } + intel_plane_check_plane_damage(new_plane_state, + old_primary_crtc_plane_state, + new_primary_crtc_plane_state); + intel_plane_copy_uapi_to_hw_state(new_plane_state, new_primary_crtc_plane_state, crtc); diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h index cb51b7936f93..8d53bcca9614 100644 --- a/drivers/gpu/drm/i915/display/intel_display_types.h +++ b/drivers/gpu/drm/i915/display/intel_display_types.h @@ -695,6 +695,8 @@ struct intel_plane_state { u64 ccval; const char *no_fbc_reason; + + struct drm_rect damage_merged; }; struct intel_initial_plane_config { diff --git a/drivers/gpu/drm/i915/display/skl_universal_plane.c b/drivers/gpu/drm/i915/display/skl_universal_plane.c index 301ad3a22c4c..b90a7d52c071 100644 --- a/drivers/gpu/drm/i915/display/skl_universal_plane.c +++ b/drivers/gpu/drm/i915/display/skl_universal_plane.c @@ -2249,11 +2249,42 @@ static void check_protection(struct intel_plane_state *plane_state) !plane_state->decrypt; } +static void +skl_plane_check_damage_with_viewport(struct intel_plane_state *plane_state) +{ + struct drm_rect *damage_merged = &plane_state->damage_merged; + const struct drm_framebuffer *fb = plane_state->hw.fb; + unsigned int rotation = plane_state->hw.rotation; + struct drm_rect *src = &plane_state->uapi.src; + + if (drm_rotation_90_or_270(rotation)) { + drm_rect_rotate(damage_merged, fb->width, fb->height, + DRM_MODE_ROTATE_270); + drm_rect_translate(damage_merged, -(src->y1 >> 16), + -(src->x1 >> 16)); + } else { + drm_rect_translate(damage_merged, -(src->x1 >> 16), + -(src->y1 >> 16)); + } +} + +static void +skl_plane_check_damage_with_plane_surf(struct intel_plane_state *plane_state) +{ + struct drm_rect *damage_merged = &plane_state->damage_merged; + struct drm_rect src; + + drm_rect_fp_to_int(&src, &plane_state->uapi.src); + drm_rect_translate(damage_merged, src.x1, src.y1); + drm_rect_intersect(damage_merged, &src); +} + static int skl_plane_check(struct intel_crtc_state *crtc_state, struct intel_plane_state *plane_state) { + struct intel_display *display = to_intel_display(crtc_state); struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane); - struct drm_i915_private *dev_priv = to_i915(plane->base.dev); + struct drm_i915_private *i915 = to_i915(plane->base.dev); const struct drm_framebuffer *fb = plane_state->hw.fb; int min_scale = DRM_PLANE_NO_SCALING; int max_scale = DRM_PLANE_NO_SCALING; @@ -2266,7 +2297,7 @@ static int skl_plane_check(struct intel_crtc_state *crtc_state, /* use scaler when colorkey is not required */ if (!plane_state->ckey.flags && skl_fb_scalable(fb)) { min_scale = 1; - max_scale = skl_plane_max_scale(dev_priv, fb); + max_scale = skl_plane_max_scale(i915, fb); } ret = intel_atomic_plane_check_clipping(plane_state, crtc_state, @@ -2274,6 +2305,9 @@ static int skl_plane_check(struct intel_crtc_state *crtc_state, if (ret) return ret; + if (HAS_FBC_DIRTY_RECT(display)) + skl_plane_check_damage_with_viewport(plane_state); + ret = skl_check_plane_surface(plane_state); if (ret) return ret; @@ -2289,6 +2323,9 @@ static int skl_plane_check(struct intel_crtc_state *crtc_state, if (ret) return ret; + if (HAS_FBC_DIRTY_RECT(display)) + skl_plane_check_damage_with_plane_surf(plane_state); + ret = skl_plane_check_nv12_rotation(plane_state); if (ret) return ret; @@ -2301,12 +2338,12 @@ static int skl_plane_check(struct intel_crtc_state *crtc_state, plane_state->ctl = skl_plane_ctl(crtc_state, plane_state); - if (DISPLAY_VER(dev_priv) >= 10) + if (DISPLAY_VER(display) >= 10) plane_state->color_ctl = glk_plane_color_ctl(crtc_state, plane_state); if (intel_format_info_is_yuv_semiplanar(fb->format, fb->modifier) && - icl_is_hdr_plane(dev_priv, plane->id)) + icl_is_hdr_plane(i915, plane->id)) /* Enable and use MPEG-2 chroma siting */ plane_state->cus_ctl = PLANE_CUS_ENABLE | PLANE_CUS_HPHASE_0 | -- 2.43.0 ^ permalink raw reply related [flat|nested] 28+ messages in thread
* RE: [PATCH v6 4/7] drm/i915/xe3: update and store the plane damage clips 2025-01-30 21:00 ` [PATCH v6 4/7] drm/i915/xe3: update and store the plane damage clips Vinod Govindapillai @ 2025-02-05 9:39 ` Kandpal, Suraj 2025-02-05 10:08 ` Jani Nikula 2025-02-05 12:43 ` Ville Syrjälä 1 sibling, 1 reply; 28+ messages in thread From: Kandpal, Suraj @ 2025-02-05 9:39 UTC (permalink / raw) To: Govindapillai, Vinod, intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org Cc: Govindapillai, Vinod, Syrjala, Ville, Reddy Guddati, Santhosh, Saarinen, Jani > -----Original Message----- > From: Intel-xe <intel-xe-bounces@lists.freedesktop.org> On Behalf Of Vinod > Govindapillai > Sent: Friday, January 31, 2025 2:30 AM > To: intel-gfx@lists.freedesktop.org; intel-xe@lists.freedesktop.org > Cc: Govindapillai, Vinod <vinod.govindapillai@intel.com>; Syrjala, Ville > <ville.syrjala@intel.com>; Reddy Guddati, Santhosh > <santhosh.reddy.guddati@intel.com>; Saarinen, Jani > <jani.saarinen@intel.com> > Subject: [PATCH v6 4/7] drm/i915/xe3: update and store the plane damage > clips > > Userspace can pass damage area clips per plane to track changes in a plane > and some display components can utilze these damage clips for efficiently > handling use cases like FBC, PSR etc. A merged damage area is generated and > its coordinates are updated relative to viewport and HW and stored in the > plane_state. This merged damage areas will be used for FBC dirty rect support > in xe3 in the follow-up patch. > > Big thanks to Ville Syrjala for his contribuitions in shaping up of this series. > > v1: - Move damage_merged helper to cover bigjoiner case and use > the correct plane state for damage find helper (Ville) > - Damage handling code under HAS_FBC_DIRTY_RECT() so the > the related part will be executed only for xe3+ > - Changed dev_priv to i915 in one of the functions > > Signed-off-by: Vinod Govindapillai <vinod.govindapillai@intel.com> > --- > .../gpu/drm/i915/display/intel_atomic_plane.c | 28 ++++++++++++ > .../drm/i915/display/intel_display_types.h | 2 + > .../drm/i915/display/skl_universal_plane.c | 45 +++++++++++++++++-- > 3 files changed, 71 insertions(+), 4 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_atomic_plane.c > b/drivers/gpu/drm/i915/display/intel_atomic_plane.c > index c558143f4f82..f55f7044dc67 100644 > --- a/drivers/gpu/drm/i915/display/intel_atomic_plane.c > +++ b/drivers/gpu/drm/i915/display/intel_atomic_plane.c > @@ -36,6 +36,7 @@ > > #include <drm/drm_atomic_helper.h> > #include <drm/drm_blend.h> > +#include <drm/drm_damage_helper.h> > #include <drm/drm_fourcc.h> > #include <drm/drm_gem.h> > #include <drm/drm_gem_atomic_helper.h> > @@ -322,6 +323,25 @@ static void intel_plane_clear_hw_state(struct > intel_plane_state *plane_state) > memset(&plane_state->hw, 0, sizeof(plane_state->hw)); } > > +static void > +intel_plane_check_plane_damage(struct intel_plane_state > *new_plane_state, > + const struct intel_plane_state > *old_primary_plane_state, > + const struct intel_plane_state > *new_primary_plane_state) { > + struct intel_display *display = to_intel_display(new_plane_state); > + struct drm_rect *damage_merged = &new_plane_state- > >damage_merged; > + > + if (!HAS_FBC_DIRTY_RECT(display)) > + return; > + > + if (!drm_atomic_helper_damage_merged(&old_primary_plane_state- > >uapi, > + &new_primary_plane_state->uapi, > + damage_merged)) > + /* Incase helper fails, mark whole plane region as damage */ > + *damage_merged = > + drm_plane_state_src(&new_primary_plane_state- > >uapi); > +} > + > void intel_plane_copy_uapi_to_hw_state(struct intel_plane_state > *plane_state, > const struct intel_plane_state > *from_plane_state, > struct intel_crtc *crtc) > @@ -691,6 +711,7 @@ int intel_plane_atomic_check(struct > intel_atomic_state *state, > const struct intel_plane_state *old_plane_state = > intel_atomic_get_old_plane_state(state, plane); > const struct intel_plane_state *new_primary_crtc_plane_state; > + const struct intel_plane_state *old_primary_crtc_plane_state; > struct intel_crtc *crtc = intel_crtc_for_pipe(display, plane->pipe); > const struct intel_crtc_state *old_crtc_state = > intel_atomic_get_old_crtc_state(state, crtc); @@ -705,10 > +726,17 @@ int intel_plane_atomic_check(struct intel_atomic_state *state, > > new_primary_crtc_plane_state = > intel_atomic_get_new_plane_state(state, > primary_crtc_plane); > + old_primary_crtc_plane_state = > + intel_atomic_get_old_plane_state(state, > primary_crtc_plane); > } else { > new_primary_crtc_plane_state = new_plane_state; > + old_primary_crtc_plane_state = old_plane_state; > } > > + intel_plane_check_plane_damage(new_plane_state, > + old_primary_crtc_plane_state, > + new_primary_crtc_plane_state); > + > intel_plane_copy_uapi_to_hw_state(new_plane_state, > new_primary_crtc_plane_state, > crtc); > diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h > b/drivers/gpu/drm/i915/display/intel_display_types.h > index cb51b7936f93..8d53bcca9614 100644 > --- a/drivers/gpu/drm/i915/display/intel_display_types.h > +++ b/drivers/gpu/drm/i915/display/intel_display_types.h > @@ -695,6 +695,8 @@ struct intel_plane_state { > u64 ccval; > > const char *no_fbc_reason; > + > + struct drm_rect damage_merged; > }; > > struct intel_initial_plane_config { > diff --git a/drivers/gpu/drm/i915/display/skl_universal_plane.c > b/drivers/gpu/drm/i915/display/skl_universal_plane.c > index 301ad3a22c4c..b90a7d52c071 100644 > --- a/drivers/gpu/drm/i915/display/skl_universal_plane.c > +++ b/drivers/gpu/drm/i915/display/skl_universal_plane.c > @@ -2249,11 +2249,42 @@ static void check_protection(struct > intel_plane_state *plane_state) > !plane_state->decrypt; > } > > +static void > +skl_plane_check_damage_with_viewport(struct intel_plane_state > +*plane_state) { > + struct drm_rect *damage_merged = &plane_state->damage_merged; > + const struct drm_framebuffer *fb = plane_state->hw.fb; > + unsigned int rotation = plane_state->hw.rotation; > + struct drm_rect *src = &plane_state->uapi.src; > + > + if (drm_rotation_90_or_270(rotation)) { > + drm_rect_rotate(damage_merged, fb->width, fb->height, > + DRM_MODE_ROTATE_270); > + drm_rect_translate(damage_merged, -(src->y1 >> 16), > + -(src->x1 >> 16)); > + } else { > + drm_rect_translate(damage_merged, -(src->x1 >> 16), > + -(src->y1 >> 16)); > + } > +} > + > +static void > +skl_plane_check_damage_with_plane_surf(struct intel_plane_state > +*plane_state) { > + struct drm_rect *damage_merged = &plane_state->damage_merged; > + struct drm_rect src; > + > + drm_rect_fp_to_int(&src, &plane_state->uapi.src); > + drm_rect_translate(damage_merged, src.x1, src.y1); > + drm_rect_intersect(damage_merged, &src); } > + > static int skl_plane_check(struct intel_crtc_state *crtc_state, > struct intel_plane_state *plane_state) { > + struct intel_display *display = to_intel_display(crtc_state); > struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane); > - struct drm_i915_private *dev_priv = to_i915(plane->base.dev); > + struct drm_i915_private *i915 = to_i915(plane->base.dev); This change of moving from dev_priv naming to i915 and to start using intel_display Is a refactor and should be in a patch of its own. Regards, Suraj Kandpal > const struct drm_framebuffer *fb = plane_state->hw.fb; > int min_scale = DRM_PLANE_NO_SCALING; > int max_scale = DRM_PLANE_NO_SCALING; > @@ -2266,7 +2297,7 @@ static int skl_plane_check(struct intel_crtc_state > *crtc_state, > /* use scaler when colorkey is not required */ > if (!plane_state->ckey.flags && skl_fb_scalable(fb)) { > min_scale = 1; > - max_scale = skl_plane_max_scale(dev_priv, fb); > + max_scale = skl_plane_max_scale(i915, fb); > } > > ret = intel_atomic_plane_check_clipping(plane_state, crtc_state, @@ - > 2274,6 +2305,9 @@ static int skl_plane_check(struct intel_crtc_state > *crtc_state, > if (ret) > return ret; > > + if (HAS_FBC_DIRTY_RECT(display)) > + skl_plane_check_damage_with_viewport(plane_state); > + > ret = skl_check_plane_surface(plane_state); > if (ret) > return ret; > @@ -2289,6 +2323,9 @@ static int skl_plane_check(struct intel_crtc_state > *crtc_state, > if (ret) > return ret; > > + if (HAS_FBC_DIRTY_RECT(display)) > + skl_plane_check_damage_with_plane_surf(plane_state); > + > ret = skl_plane_check_nv12_rotation(plane_state); > if (ret) > return ret; > @@ -2301,12 +2338,12 @@ static int skl_plane_check(struct intel_crtc_state > *crtc_state, > > plane_state->ctl = skl_plane_ctl(crtc_state, plane_state); > > - if (DISPLAY_VER(dev_priv) >= 10) > + if (DISPLAY_VER(display) >= 10) > plane_state->color_ctl = glk_plane_color_ctl(crtc_state, > plane_state); > > if (intel_format_info_is_yuv_semiplanar(fb->format, fb->modifier) && > - icl_is_hdr_plane(dev_priv, plane->id)) > + icl_is_hdr_plane(i915, plane->id)) > /* Enable and use MPEG-2 chroma siting */ > plane_state->cus_ctl = PLANE_CUS_ENABLE | > PLANE_CUS_HPHASE_0 | > -- > 2.43.0 ^ permalink raw reply [flat|nested] 28+ messages in thread
* RE: [PATCH v6 4/7] drm/i915/xe3: update and store the plane damage clips 2025-02-05 9:39 ` Kandpal, Suraj @ 2025-02-05 10:08 ` Jani Nikula 2025-02-05 11:21 ` Govindapillai, Vinod 0 siblings, 1 reply; 28+ messages in thread From: Jani Nikula @ 2025-02-05 10:08 UTC (permalink / raw) To: Kandpal, Suraj, Govindapillai, Vinod, intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org Cc: Govindapillai, Vinod, Syrjala, Ville, Reddy Guddati, Santhosh, Saarinen, Jani On Wed, 05 Feb 2025, "Kandpal, Suraj" <suraj.kandpal@intel.com> wrote: >> -----Original Message----- >> From: Intel-xe <intel-xe-bounces@lists.freedesktop.org> On Behalf Of Vinod >> Govindapillai >> Sent: Friday, January 31, 2025 2:30 AM >> To: intel-gfx@lists.freedesktop.org; intel-xe@lists.freedesktop.org >> Cc: Govindapillai, Vinod <vinod.govindapillai@intel.com>; Syrjala, Ville >> <ville.syrjala@intel.com>; Reddy Guddati, Santhosh >> <santhosh.reddy.guddati@intel.com>; Saarinen, Jani >> <jani.saarinen@intel.com> >> Subject: [PATCH v6 4/7] drm/i915/xe3: update and store the plane damage >> clips >> >> Userspace can pass damage area clips per plane to track changes in a plane >> and some display components can utilze these damage clips for efficiently >> handling use cases like FBC, PSR etc. A merged damage area is generated and >> its coordinates are updated relative to viewport and HW and stored in the >> plane_state. This merged damage areas will be used for FBC dirty rect support >> in xe3 in the follow-up patch. >> >> Big thanks to Ville Syrjala for his contribuitions in shaping up of this series. >> >> v1: - Move damage_merged helper to cover bigjoiner case and use >> the correct plane state for damage find helper (Ville) >> - Damage handling code under HAS_FBC_DIRTY_RECT() so the >> the related part will be executed only for xe3+ >> - Changed dev_priv to i915 in one of the functions >> >> Signed-off-by: Vinod Govindapillai <vinod.govindapillai@intel.com> >> --- >> .../gpu/drm/i915/display/intel_atomic_plane.c | 28 ++++++++++++ >> .../drm/i915/display/intel_display_types.h | 2 + >> .../drm/i915/display/skl_universal_plane.c | 45 +++++++++++++++++-- >> 3 files changed, 71 insertions(+), 4 deletions(-) >> >> diff --git a/drivers/gpu/drm/i915/display/intel_atomic_plane.c >> b/drivers/gpu/drm/i915/display/intel_atomic_plane.c >> index c558143f4f82..f55f7044dc67 100644 >> --- a/drivers/gpu/drm/i915/display/intel_atomic_plane.c >> +++ b/drivers/gpu/drm/i915/display/intel_atomic_plane.c >> @@ -36,6 +36,7 @@ >> >> #include <drm/drm_atomic_helper.h> >> #include <drm/drm_blend.h> >> +#include <drm/drm_damage_helper.h> >> #include <drm/drm_fourcc.h> >> #include <drm/drm_gem.h> >> #include <drm/drm_gem_atomic_helper.h> >> @@ -322,6 +323,25 @@ static void intel_plane_clear_hw_state(struct >> intel_plane_state *plane_state) >> memset(&plane_state->hw, 0, sizeof(plane_state->hw)); } >> >> +static void >> +intel_plane_check_plane_damage(struct intel_plane_state >> *new_plane_state, >> + const struct intel_plane_state >> *old_primary_plane_state, >> + const struct intel_plane_state >> *new_primary_plane_state) { >> + struct intel_display *display = to_intel_display(new_plane_state); >> + struct drm_rect *damage_merged = &new_plane_state- >> >damage_merged; >> + >> + if (!HAS_FBC_DIRTY_RECT(display)) >> + return; >> + >> + if (!drm_atomic_helper_damage_merged(&old_primary_plane_state- >> >uapi, >> + &new_primary_plane_state->uapi, >> + damage_merged)) >> + /* Incase helper fails, mark whole plane region as damage */ >> + *damage_merged = >> + drm_plane_state_src(&new_primary_plane_state- >> >uapi); >> +} >> + >> void intel_plane_copy_uapi_to_hw_state(struct intel_plane_state >> *plane_state, >> const struct intel_plane_state >> *from_plane_state, >> struct intel_crtc *crtc) >> @@ -691,6 +711,7 @@ int intel_plane_atomic_check(struct >> intel_atomic_state *state, >> const struct intel_plane_state *old_plane_state = >> intel_atomic_get_old_plane_state(state, plane); >> const struct intel_plane_state *new_primary_crtc_plane_state; >> + const struct intel_plane_state *old_primary_crtc_plane_state; >> struct intel_crtc *crtc = intel_crtc_for_pipe(display, plane->pipe); >> const struct intel_crtc_state *old_crtc_state = >> intel_atomic_get_old_crtc_state(state, crtc); @@ -705,10 >> +726,17 @@ int intel_plane_atomic_check(struct intel_atomic_state *state, >> >> new_primary_crtc_plane_state = >> intel_atomic_get_new_plane_state(state, >> primary_crtc_plane); >> + old_primary_crtc_plane_state = >> + intel_atomic_get_old_plane_state(state, >> primary_crtc_plane); >> } else { >> new_primary_crtc_plane_state = new_plane_state; >> + old_primary_crtc_plane_state = old_plane_state; >> } >> >> + intel_plane_check_plane_damage(new_plane_state, >> + old_primary_crtc_plane_state, >> + new_primary_crtc_plane_state); >> + >> intel_plane_copy_uapi_to_hw_state(new_plane_state, >> new_primary_crtc_plane_state, >> crtc); >> diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h >> b/drivers/gpu/drm/i915/display/intel_display_types.h >> index cb51b7936f93..8d53bcca9614 100644 >> --- a/drivers/gpu/drm/i915/display/intel_display_types.h >> +++ b/drivers/gpu/drm/i915/display/intel_display_types.h >> @@ -695,6 +695,8 @@ struct intel_plane_state { >> u64 ccval; >> >> const char *no_fbc_reason; >> + >> + struct drm_rect damage_merged; >> }; >> >> struct intel_initial_plane_config { >> diff --git a/drivers/gpu/drm/i915/display/skl_universal_plane.c >> b/drivers/gpu/drm/i915/display/skl_universal_plane.c >> index 301ad3a22c4c..b90a7d52c071 100644 >> --- a/drivers/gpu/drm/i915/display/skl_universal_plane.c >> +++ b/drivers/gpu/drm/i915/display/skl_universal_plane.c >> @@ -2249,11 +2249,42 @@ static void check_protection(struct >> intel_plane_state *plane_state) >> !plane_state->decrypt; >> } >> >> +static void >> +skl_plane_check_damage_with_viewport(struct intel_plane_state >> +*plane_state) { >> + struct drm_rect *damage_merged = &plane_state->damage_merged; >> + const struct drm_framebuffer *fb = plane_state->hw.fb; >> + unsigned int rotation = plane_state->hw.rotation; >> + struct drm_rect *src = &plane_state->uapi.src; >> + >> + if (drm_rotation_90_or_270(rotation)) { >> + drm_rect_rotate(damage_merged, fb->width, fb->height, >> + DRM_MODE_ROTATE_270); >> + drm_rect_translate(damage_merged, -(src->y1 >> 16), >> + -(src->x1 >> 16)); >> + } else { >> + drm_rect_translate(damage_merged, -(src->x1 >> 16), >> + -(src->y1 >> 16)); >> + } >> +} >> + >> +static void >> +skl_plane_check_damage_with_plane_surf(struct intel_plane_state >> +*plane_state) { >> + struct drm_rect *damage_merged = &plane_state->damage_merged; >> + struct drm_rect src; >> + >> + drm_rect_fp_to_int(&src, &plane_state->uapi.src); >> + drm_rect_translate(damage_merged, src.x1, src.y1); >> + drm_rect_intersect(damage_merged, &src); } >> + >> static int skl_plane_check(struct intel_crtc_state *crtc_state, >> struct intel_plane_state *plane_state) { >> + struct intel_display *display = to_intel_display(crtc_state); >> struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane); >> - struct drm_i915_private *dev_priv = to_i915(plane->base.dev); >> + struct drm_i915_private *i915 = to_i915(plane->base.dev); > > This change of moving from dev_priv naming to i915 and to start using intel_display > Is a refactor and should be in a patch of its own. I think a small amount of opportunistic i915 -> display changes are okay. But the s/dev_priv/i915/ is IMO just useless. All of them need to go eventually, calling it i915 is not helping at this point. BR, Jani. > > Regards, > Suraj Kandpal > >> const struct drm_framebuffer *fb = plane_state->hw.fb; >> int min_scale = DRM_PLANE_NO_SCALING; >> int max_scale = DRM_PLANE_NO_SCALING; >> @@ -2266,7 +2297,7 @@ static int skl_plane_check(struct intel_crtc_state >> *crtc_state, >> /* use scaler when colorkey is not required */ >> if (!plane_state->ckey.flags && skl_fb_scalable(fb)) { >> min_scale = 1; >> - max_scale = skl_plane_max_scale(dev_priv, fb); >> + max_scale = skl_plane_max_scale(i915, fb); >> } >> >> ret = intel_atomic_plane_check_clipping(plane_state, crtc_state, @@ - >> 2274,6 +2305,9 @@ static int skl_plane_check(struct intel_crtc_state >> *crtc_state, >> if (ret) >> return ret; >> >> + if (HAS_FBC_DIRTY_RECT(display)) >> + skl_plane_check_damage_with_viewport(plane_state); >> + >> ret = skl_check_plane_surface(plane_state); >> if (ret) >> return ret; >> @@ -2289,6 +2323,9 @@ static int skl_plane_check(struct intel_crtc_state >> *crtc_state, >> if (ret) >> return ret; >> >> + if (HAS_FBC_DIRTY_RECT(display)) >> + skl_plane_check_damage_with_plane_surf(plane_state); >> + >> ret = skl_plane_check_nv12_rotation(plane_state); >> if (ret) >> return ret; >> @@ -2301,12 +2338,12 @@ static int skl_plane_check(struct intel_crtc_state >> *crtc_state, >> >> plane_state->ctl = skl_plane_ctl(crtc_state, plane_state); >> >> - if (DISPLAY_VER(dev_priv) >= 10) >> + if (DISPLAY_VER(display) >= 10) >> plane_state->color_ctl = glk_plane_color_ctl(crtc_state, >> plane_state); >> >> if (intel_format_info_is_yuv_semiplanar(fb->format, fb->modifier) && >> - icl_is_hdr_plane(dev_priv, plane->id)) >> + icl_is_hdr_plane(i915, plane->id)) >> /* Enable and use MPEG-2 chroma siting */ >> plane_state->cus_ctl = PLANE_CUS_ENABLE | >> PLANE_CUS_HPHASE_0 | >> -- >> 2.43.0 > -- Jani Nikula, Intel ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH v6 4/7] drm/i915/xe3: update and store the plane damage clips 2025-02-05 10:08 ` Jani Nikula @ 2025-02-05 11:21 ` Govindapillai, Vinod 0 siblings, 0 replies; 28+ messages in thread From: Govindapillai, Vinod @ 2025-02-05 11:21 UTC (permalink / raw) To: Kandpal, Suraj, intel-xe@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, jani.nikula@linux.intel.com Cc: Saarinen, Jani, Reddy Guddati, Santhosh, Syrjala, Ville On Wed, 2025-02-05 at 12:08 +0200, Jani Nikula wrote: > On Wed, 05 Feb 2025, "Kandpal, Suraj" <suraj.kandpal@intel.com> wrote: > > > -----Original Message----- > > > From: Intel-xe <intel-xe-bounces@lists.freedesktop.org> On Behalf Of Vinod > > > Govindapillai > > > Sent: Friday, January 31, 2025 2:30 AM > > > To: intel-gfx@lists.freedesktop.org; intel-xe@lists.freedesktop.org > > > Cc: Govindapillai, Vinod <vinod.govindapillai@intel.com>; Syrjala, Ville > > > <ville.syrjala@intel.com>; Reddy Guddati, Santhosh > > > <santhosh.reddy.guddati@intel.com>; Saarinen, Jani > > > <jani.saarinen@intel.com> > > > Subject: [PATCH v6 4/7] drm/i915/xe3: update and store the plane damage > > > clips > > > > > > Userspace can pass damage area clips per plane to track changes in a plane > > > and some display components can utilze these damage clips for efficiently > > > handling use cases like FBC, PSR etc. A merged damage area is generated and > > > its coordinates are updated relative to viewport and HW and stored in the > > > plane_state. This merged damage areas will be used for FBC dirty rect support > > > in xe3 in the follow-up patch. > > > > > > Big thanks to Ville Syrjala for his contribuitions in shaping up of this series. > > > > > > v1: - Move damage_merged helper to cover bigjoiner case and use > > > the correct plane state for damage find helper (Ville) > > > - Damage handling code under HAS_FBC_DIRTY_RECT() so the > > > the related part will be executed only for xe3+ > > > - Changed dev_priv to i915 in one of the functions > > > > > > Signed-off-by: Vinod Govindapillai <vinod.govindapillai@intel.com> > > > --- > > > .../gpu/drm/i915/display/intel_atomic_plane.c | 28 ++++++++++++ > > > .../drm/i915/display/intel_display_types.h | 2 + > > > .../drm/i915/display/skl_universal_plane.c | 45 +++++++++++++++++-- > > > 3 files changed, 71 insertions(+), 4 deletions(-) > > > > > > diff --git a/drivers/gpu/drm/i915/display/intel_atomic_plane.c > > > b/drivers/gpu/drm/i915/display/intel_atomic_plane.c > > > index c558143f4f82..f55f7044dc67 100644 > > > --- a/drivers/gpu/drm/i915/display/intel_atomic_plane.c > > > +++ b/drivers/gpu/drm/i915/display/intel_atomic_plane.c > > > @@ -36,6 +36,7 @@ > > > > > > #include <drm/drm_atomic_helper.h> > > > #include <drm/drm_blend.h> > > > +#include <drm/drm_damage_helper.h> > > > #include <drm/drm_fourcc.h> > > > #include <drm/drm_gem.h> > > > #include <drm/drm_gem_atomic_helper.h> > > > @@ -322,6 +323,25 @@ static void intel_plane_clear_hw_state(struct > > > intel_plane_state *plane_state) > > > memset(&plane_state->hw, 0, sizeof(plane_state->hw)); } > > > > > > +static void > > > +intel_plane_check_plane_damage(struct intel_plane_state > > > *new_plane_state, > > > + const struct intel_plane_state > > > *old_primary_plane_state, > > > + const struct intel_plane_state > > > *new_primary_plane_state) { > > > + struct intel_display *display = to_intel_display(new_plane_state); > > > + struct drm_rect *damage_merged = &new_plane_state- > > > > damage_merged; > > > + > > > + if (!HAS_FBC_DIRTY_RECT(display)) > > > + return; > > > + > > > + if (!drm_atomic_helper_damage_merged(&old_primary_plane_state- > > > > uapi, > > > + &new_primary_plane_state->uapi, > > > + damage_merged)) > > > + /* Incase helper fails, mark whole plane region as damage */ > > > + *damage_merged = > > > + drm_plane_state_src(&new_primary_plane_state- > > > > uapi); > > > +} > > > + > > > void intel_plane_copy_uapi_to_hw_state(struct intel_plane_state > > > *plane_state, > > > const struct intel_plane_state > > > *from_plane_state, > > > struct intel_crtc *crtc) > > > @@ -691,6 +711,7 @@ int intel_plane_atomic_check(struct > > > intel_atomic_state *state, > > > const struct intel_plane_state *old_plane_state = > > > intel_atomic_get_old_plane_state(state, plane); > > > const struct intel_plane_state *new_primary_crtc_plane_state; > > > + const struct intel_plane_state *old_primary_crtc_plane_state; > > > struct intel_crtc *crtc = intel_crtc_for_pipe(display, plane->pipe); > > > const struct intel_crtc_state *old_crtc_state = > > > intel_atomic_get_old_crtc_state(state, crtc); @@ -705,10 > > > +726,17 @@ int intel_plane_atomic_check(struct intel_atomic_state *state, > > > > > > new_primary_crtc_plane_state = > > > intel_atomic_get_new_plane_state(state, > > > primary_crtc_plane); > > > + old_primary_crtc_plane_state = > > > + intel_atomic_get_old_plane_state(state, > > > primary_crtc_plane); > > > } else { > > > new_primary_crtc_plane_state = new_plane_state; > > > + old_primary_crtc_plane_state = old_plane_state; > > > } > > > > > > + intel_plane_check_plane_damage(new_plane_state, > > > + old_primary_crtc_plane_state, > > > + new_primary_crtc_plane_state); > > > + > > > intel_plane_copy_uapi_to_hw_state(new_plane_state, > > > new_primary_crtc_plane_state, > > > crtc); > > > diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h > > > b/drivers/gpu/drm/i915/display/intel_display_types.h > > > index cb51b7936f93..8d53bcca9614 100644 > > > --- a/drivers/gpu/drm/i915/display/intel_display_types.h > > > +++ b/drivers/gpu/drm/i915/display/intel_display_types.h > > > @@ -695,6 +695,8 @@ struct intel_plane_state { > > > u64 ccval; > > > > > > const char *no_fbc_reason; > > > + > > > + struct drm_rect damage_merged; > > > }; > > > > > > struct intel_initial_plane_config { > > > diff --git a/drivers/gpu/drm/i915/display/skl_universal_plane.c > > > b/drivers/gpu/drm/i915/display/skl_universal_plane.c > > > index 301ad3a22c4c..b90a7d52c071 100644 > > > --- a/drivers/gpu/drm/i915/display/skl_universal_plane.c > > > +++ b/drivers/gpu/drm/i915/display/skl_universal_plane.c > > > @@ -2249,11 +2249,42 @@ static void check_protection(struct > > > intel_plane_state *plane_state) > > > !plane_state->decrypt; > > > } > > > > > > +static void > > > +skl_plane_check_damage_with_viewport(struct intel_plane_state > > > +*plane_state) { > > > + struct drm_rect *damage_merged = &plane_state->damage_merged; > > > + const struct drm_framebuffer *fb = plane_state->hw.fb; > > > + unsigned int rotation = plane_state->hw.rotation; > > > + struct drm_rect *src = &plane_state->uapi.src; > > > + > > > + if (drm_rotation_90_or_270(rotation)) { > > > + drm_rect_rotate(damage_merged, fb->width, fb->height, > > > + DRM_MODE_ROTATE_270); > > > + drm_rect_translate(damage_merged, -(src->y1 >> 16), > > > + -(src->x1 >> 16)); > > > + } else { > > > + drm_rect_translate(damage_merged, -(src->x1 >> 16), > > > + -(src->y1 >> 16)); > > > + } > > > +} > > > + > > > +static void > > > +skl_plane_check_damage_with_plane_surf(struct intel_plane_state > > > +*plane_state) { > > > + struct drm_rect *damage_merged = &plane_state->damage_merged; > > > + struct drm_rect src; > > > + > > > + drm_rect_fp_to_int(&src, &plane_state->uapi.src); > > > + drm_rect_translate(damage_merged, src.x1, src.y1); > > > + drm_rect_intersect(damage_merged, &src); } > > > + > > > static int skl_plane_check(struct intel_crtc_state *crtc_state, > > > struct intel_plane_state *plane_state) { > > > + struct intel_display *display = to_intel_display(crtc_state); > > > struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane); > > > - struct drm_i915_private *dev_priv = to_i915(plane->base.dev); > > > + struct drm_i915_private *i915 = to_i915(plane->base.dev); > > > > This change of moving from dev_priv naming to i915 and to start using intel_display > > Is a refactor and should be in a patch of its own. Such minor local changes to use intel_display are okay as per the practices so far! Before intel_display related changes, dev_priv was being replaced by i915 and was also acceptable without a separate patch as long as the changes are minimal and within the local context. But the recent intel_display usage has made dev_priv replacements redundant. But replacing dev_priv to use intel_display in this specific case needed a bigger attention to other parts! So i just combined the previous practices! > > I think a small amount of opportunistic i915 -> display changes are > okay. But the s/dev_priv/i915/ is IMO just useless. All of them need to > go eventually, calling it i915 is not helping at this point. Yeah.. just wanted to avoid someone commenting about "dev_priv" :-) Fully getting rid of that "dev_priv/i915" need bit bigger changes! BR Vinod > > BR, > Jani. > > > > > Regards, > > Suraj Kandpal > > > > > const struct drm_framebuffer *fb = plane_state->hw.fb; > > > int min_scale = DRM_PLANE_NO_SCALING; > > > int max_scale = DRM_PLANE_NO_SCALING; > > > @@ -2266,7 +2297,7 @@ static int skl_plane_check(struct intel_crtc_state > > > *crtc_state, > > > /* use scaler when colorkey is not required */ > > > if (!plane_state->ckey.flags && skl_fb_scalable(fb)) { > > > min_scale = 1; > > > - max_scale = skl_plane_max_scale(dev_priv, fb); > > > + max_scale = skl_plane_max_scale(i915, fb); > > > } > > > > > > ret = intel_atomic_plane_check_clipping(plane_state, crtc_state, @@ - > > > 2274,6 +2305,9 @@ static int skl_plane_check(struct intel_crtc_state > > > *crtc_state, > > > if (ret) > > > return ret; > > > > > > + if (HAS_FBC_DIRTY_RECT(display)) > > > + skl_plane_check_damage_with_viewport(plane_state); > > > + > > > ret = skl_check_plane_surface(plane_state); > > > if (ret) > > > return ret; > > > @@ -2289,6 +2323,9 @@ static int skl_plane_check(struct intel_crtc_state > > > *crtc_state, > > > if (ret) > > > return ret; > > > > > > + if (HAS_FBC_DIRTY_RECT(display)) > > > + skl_plane_check_damage_with_plane_surf(plane_state); > > > + > > > ret = skl_plane_check_nv12_rotation(plane_state); > > > if (ret) > > > return ret; > > > @@ -2301,12 +2338,12 @@ static int skl_plane_check(struct intel_crtc_state > > > *crtc_state, > > > > > > plane_state->ctl = skl_plane_ctl(crtc_state, plane_state); > > > > > > - if (DISPLAY_VER(dev_priv) >= 10) > > > + if (DISPLAY_VER(display) >= 10) > > > plane_state->color_ctl = glk_plane_color_ctl(crtc_state, > > > plane_state); > > > > > > if (intel_format_info_is_yuv_semiplanar(fb->format, fb->modifier) && > > > - icl_is_hdr_plane(dev_priv, plane->id)) > > > + icl_is_hdr_plane(i915, plane->id)) > > > /* Enable and use MPEG-2 chroma siting */ > > > plane_state->cus_ctl = PLANE_CUS_ENABLE | > > > PLANE_CUS_HPHASE_0 | > > > -- > > > 2.43.0 > > > ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH v6 4/7] drm/i915/xe3: update and store the plane damage clips 2025-01-30 21:00 ` [PATCH v6 4/7] drm/i915/xe3: update and store the plane damage clips Vinod Govindapillai 2025-02-05 9:39 ` Kandpal, Suraj @ 2025-02-05 12:43 ` Ville Syrjälä 2025-02-05 13:29 ` Govindapillai, Vinod 1 sibling, 1 reply; 28+ messages in thread From: Ville Syrjälä @ 2025-02-05 12:43 UTC (permalink / raw) To: Vinod Govindapillai Cc: intel-gfx, intel-xe, ville.syrjala, santhosh.reddy.guddati, jani.saarinen On Thu, Jan 30, 2025 at 11:00:23PM +0200, Vinod Govindapillai wrote: > Userspace can pass damage area clips per plane to track > changes in a plane and some display components can utilze > these damage clips for efficiently handling use cases like > FBC, PSR etc. A merged damage area is generated and its > coordinates are updated relative to viewport and HW and > stored in the plane_state. This merged damage areas will be > used for FBC dirty rect support in xe3 in the follow-up > patch. > > Big thanks to Ville Syrjala for his contribuitions in shaping > up of this series. > > v1: - Move damage_merged helper to cover bigjoiner case and use > the correct plane state for damage find helper (Ville) > - Damage handling code under HAS_FBC_DIRTY_RECT() so the > the related part will be executed only for xe3+ > - Changed dev_priv to i915 in one of the functions > > Signed-off-by: Vinod Govindapillai <vinod.govindapillai@intel.com> > --- > .../gpu/drm/i915/display/intel_atomic_plane.c | 28 ++++++++++++ > .../drm/i915/display/intel_display_types.h | 2 + > .../drm/i915/display/skl_universal_plane.c | 45 +++++++++++++++++-- > 3 files changed, 71 insertions(+), 4 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_atomic_plane.c b/drivers/gpu/drm/i915/display/intel_atomic_plane.c > index c558143f4f82..f55f7044dc67 100644 > --- a/drivers/gpu/drm/i915/display/intel_atomic_plane.c > +++ b/drivers/gpu/drm/i915/display/intel_atomic_plane.c > @@ -36,6 +36,7 @@ > > #include <drm/drm_atomic_helper.h> > #include <drm/drm_blend.h> > +#include <drm/drm_damage_helper.h> > #include <drm/drm_fourcc.h> > #include <drm/drm_gem.h> > #include <drm/drm_gem_atomic_helper.h> > @@ -322,6 +323,25 @@ static void intel_plane_clear_hw_state(struct intel_plane_state *plane_state) > memset(&plane_state->hw, 0, sizeof(plane_state->hw)); > } > > +static void > +intel_plane_check_plane_damage(struct intel_plane_state *new_plane_state, > + const struct intel_plane_state *old_primary_plane_state, > + const struct intel_plane_state *new_primary_plane_state) "primary_plane_state" is a confusing name because "primary plane" generally means something totally different than what's used here. probably we should just call these "uapi_plane_state" or something. > +{ > + struct intel_display *display = to_intel_display(new_plane_state); > + struct drm_rect *damage_merged = &new_plane_state->damage_merged; > + > + if (!HAS_FBC_DIRTY_RECT(display)) > + return; > + > + if (!drm_atomic_helper_damage_merged(&old_primary_plane_state->uapi, > + &new_primary_plane_state->uapi, > + damage_merged)) > + /* Incase helper fails, mark whole plane region as damage */ > + *damage_merged = > + drm_plane_state_src(&new_primary_plane_state->uapi); > +} > + > void intel_plane_copy_uapi_to_hw_state(struct intel_plane_state *plane_state, > const struct intel_plane_state *from_plane_state, > struct intel_crtc *crtc) > @@ -691,6 +711,7 @@ int intel_plane_atomic_check(struct intel_atomic_state *state, > const struct intel_plane_state *old_plane_state = > intel_atomic_get_old_plane_state(state, plane); > const struct intel_plane_state *new_primary_crtc_plane_state; > + const struct intel_plane_state *old_primary_crtc_plane_state; > struct intel_crtc *crtc = intel_crtc_for_pipe(display, plane->pipe); > const struct intel_crtc_state *old_crtc_state = > intel_atomic_get_old_crtc_state(state, crtc); > @@ -705,10 +726,17 @@ int intel_plane_atomic_check(struct intel_atomic_state *state, > > new_primary_crtc_plane_state = > intel_atomic_get_new_plane_state(state, primary_crtc_plane); > + old_primary_crtc_plane_state = > + intel_atomic_get_old_plane_state(state, primary_crtc_plane); > } else { > new_primary_crtc_plane_state = new_plane_state; > + old_primary_crtc_plane_state = old_plane_state; > } > > + intel_plane_check_plane_damage(new_plane_state, > + old_primary_crtc_plane_state, > + new_primary_crtc_plane_state); > + > intel_plane_copy_uapi_to_hw_state(new_plane_state, > new_primary_crtc_plane_state, > crtc); > diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h > index cb51b7936f93..8d53bcca9614 100644 > --- a/drivers/gpu/drm/i915/display/intel_display_types.h > +++ b/drivers/gpu/drm/i915/display/intel_display_types.h > @@ -695,6 +695,8 @@ struct intel_plane_state { > u64 ccval; > > const char *no_fbc_reason; > + > + struct drm_rect damage_merged; Since this is only used for the fbc stuff I would just call it 'fbc_dirty'. Though I suppose if we were to also use this for the PSR stuff then "damage" might be a decent name. The _merged part is pointless imo. > }; > > struct intel_initial_plane_config { > diff --git a/drivers/gpu/drm/i915/display/skl_universal_plane.c b/drivers/gpu/drm/i915/display/skl_universal_plane.c > index 301ad3a22c4c..b90a7d52c071 100644 > --- a/drivers/gpu/drm/i915/display/skl_universal_plane.c > +++ b/drivers/gpu/drm/i915/display/skl_universal_plane.c > @@ -2249,11 +2249,42 @@ static void check_protection(struct intel_plane_state *plane_state) > !plane_state->decrypt; > } > > +static void > +skl_plane_check_damage_with_viewport(struct intel_plane_state *plane_state) > +{ > + struct drm_rect *damage_merged = &plane_state->damage_merged; > + const struct drm_framebuffer *fb = plane_state->hw.fb; > + unsigned int rotation = plane_state->hw.rotation; > + struct drm_rect *src = &plane_state->uapi.src; const > + > + if (drm_rotation_90_or_270(rotation)) { > + drm_rect_rotate(damage_merged, fb->width, fb->height, fb might be NULL here. I guess we might as well do something like: if (!visible) -> make the dirty rect empty > + DRM_MODE_ROTATE_270); > + drm_rect_translate(damage_merged, -(src->y1 >> 16), > + -(src->x1 >> 16)); > + } else { > + drm_rect_translate(damage_merged, -(src->x1 >> 16), > + -(src->y1 >> 16)); > + } > +} > + > +static void > +skl_plane_check_damage_with_plane_surf(struct intel_plane_state *plane_state) the "with" stuff in the name is a bit confusing. What we are doing is make the rectangle relative to plane SURF. Same story with the other function. > +{ > + struct drm_rect *damage_merged = &plane_state->damage_merged; > + struct drm_rect src; > + > + drm_rect_fp_to_int(&src, &plane_state->uapi.src); > + drm_rect_translate(damage_merged, src.x1, src.y1); > + drm_rect_intersect(damage_merged, &src); Missing the "make it at last one scanline" here. Though if we do decide to use this also for PSR then I guess we'd need to handle that elsewhere. For now it could just be here. > +} > + > static int skl_plane_check(struct intel_crtc_state *crtc_state, > struct intel_plane_state *plane_state) > { > + struct intel_display *display = to_intel_display(crtc_state); > struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane); > - struct drm_i915_private *dev_priv = to_i915(plane->base.dev); > + struct drm_i915_private *i915 = to_i915(plane->base.dev); > const struct drm_framebuffer *fb = plane_state->hw.fb; > int min_scale = DRM_PLANE_NO_SCALING; > int max_scale = DRM_PLANE_NO_SCALING; > @@ -2266,7 +2297,7 @@ static int skl_plane_check(struct intel_crtc_state *crtc_state, > /* use scaler when colorkey is not required */ > if (!plane_state->ckey.flags && skl_fb_scalable(fb)) { > min_scale = 1; > - max_scale = skl_plane_max_scale(dev_priv, fb); > + max_scale = skl_plane_max_scale(i915, fb); > } > > ret = intel_atomic_plane_check_clipping(plane_state, crtc_state, > @@ -2274,6 +2305,9 @@ static int skl_plane_check(struct intel_crtc_state *crtc_state, > if (ret) > return ret; > > + if (HAS_FBC_DIRTY_RECT(display)) > + skl_plane_check_damage_with_viewport(plane_state); > + > ret = skl_check_plane_surface(plane_state); > if (ret) > return ret; > @@ -2289,6 +2323,9 @@ static int skl_plane_check(struct intel_crtc_state *crtc_state, > if (ret) > return ret; > > + if (HAS_FBC_DIRTY_RECT(display)) > + skl_plane_check_damage_with_plane_surf(plane_state); > + > ret = skl_plane_check_nv12_rotation(plane_state); > if (ret) > return ret; > @@ -2301,12 +2338,12 @@ static int skl_plane_check(struct intel_crtc_state *crtc_state, > > plane_state->ctl = skl_plane_ctl(crtc_state, plane_state); > > - if (DISPLAY_VER(dev_priv) >= 10) > + if (DISPLAY_VER(display) >= 10) > plane_state->color_ctl = glk_plane_color_ctl(crtc_state, > plane_state); > > if (intel_format_info_is_yuv_semiplanar(fb->format, fb->modifier) && > - icl_is_hdr_plane(dev_priv, plane->id)) > + icl_is_hdr_plane(i915, plane->id)) > /* Enable and use MPEG-2 chroma siting */ > plane_state->cus_ctl = PLANE_CUS_ENABLE | > PLANE_CUS_HPHASE_0 | > -- > 2.43.0 -- Ville Syrjälä Intel ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH v6 4/7] drm/i915/xe3: update and store the plane damage clips 2025-02-05 12:43 ` Ville Syrjälä @ 2025-02-05 13:29 ` Govindapillai, Vinod 2025-02-05 14:05 ` Ville Syrjälä 0 siblings, 1 reply; 28+ messages in thread From: Govindapillai, Vinod @ 2025-02-05 13:29 UTC (permalink / raw) To: ville.syrjala@linux.intel.com Cc: intel-xe@lists.freedesktop.org, Saarinen, Jani, Reddy Guddati, Santhosh, intel-gfx@lists.freedesktop.org, Syrjala, Ville Thanks Ville for the review.. Some responses and clarifications inline.. On Wed, 2025-02-05 at 14:43 +0200, Ville Syrjälä wrote: > On Thu, Jan 30, 2025 at 11:00:23PM +0200, Vinod Govindapillai wrote: > > Userspace can pass damage area clips per plane to track > > changes in a plane and some display components can utilze > > these damage clips for efficiently handling use cases like > > FBC, PSR etc. A merged damage area is generated and its > > coordinates are updated relative to viewport and HW and > > stored in the plane_state. This merged damage areas will be > > used for FBC dirty rect support in xe3 in the follow-up > > patch. > > > > Big thanks to Ville Syrjala for his contribuitions in shaping > > up of this series. > > > > v1: - Move damage_merged helper to cover bigjoiner case and use > > the correct plane state for damage find helper (Ville) > > - Damage handling code under HAS_FBC_DIRTY_RECT() so the > > the related part will be executed only for xe3+ > > - Changed dev_priv to i915 in one of the functions > > > > Signed-off-by: Vinod Govindapillai <vinod.govindapillai@intel.com> > > --- > > .../gpu/drm/i915/display/intel_atomic_plane.c | 28 ++++++++++++ > > .../drm/i915/display/intel_display_types.h | 2 + > > .../drm/i915/display/skl_universal_plane.c | 45 +++++++++++++++++-- > > 3 files changed, 71 insertions(+), 4 deletions(-) > > > > diff --git a/drivers/gpu/drm/i915/display/intel_atomic_plane.c > > b/drivers/gpu/drm/i915/display/intel_atomic_plane.c > > index c558143f4f82..f55f7044dc67 100644 > > --- a/drivers/gpu/drm/i915/display/intel_atomic_plane.c > > +++ b/drivers/gpu/drm/i915/display/intel_atomic_plane.c > > @@ -36,6 +36,7 @@ > > > > #include <drm/drm_atomic_helper.h> > > #include <drm/drm_blend.h> > > +#include <drm/drm_damage_helper.h> > > #include <drm/drm_fourcc.h> > > #include <drm/drm_gem.h> > > #include <drm/drm_gem_atomic_helper.h> > > @@ -322,6 +323,25 @@ static void intel_plane_clear_hw_state(struct intel_plane_state > > *plane_state) > > memset(&plane_state->hw, 0, sizeof(plane_state->hw)); > > } > > > > +static void > > +intel_plane_check_plane_damage(struct intel_plane_state *new_plane_state, > > + const struct intel_plane_state *old_primary_plane_state, > > + const struct intel_plane_state *new_primary_plane_state) > > "primary_plane_state" is a confusing name because "primary plane" > generally means something totally different than what's used here. > probably we should just call these "uapi_plane_state" or something. Okay! At this function call it is still intel_plane_state, could it be old_primary_crtc_plane_sate and new_primary_crtc_plane_state? Or do you meant to change these parameters to old_uapi_plane_state and new_uapi_plane_state? > > > +{ > > + struct intel_display *display = to_intel_display(new_plane_state); > > + struct drm_rect *damage_merged = &new_plane_state->damage_merged; > > + > > + if (!HAS_FBC_DIRTY_RECT(display)) > > + return; > > + > > + if (!drm_atomic_helper_damage_merged(&old_primary_plane_state->uapi, > > + &new_primary_plane_state->uapi, > > + damage_merged)) > > + /* Incase helper fails, mark whole plane region as damage */ > > + *damage_merged = > > + drm_plane_state_src(&new_primary_plane_state->uapi); > > +} > > + > > void intel_plane_copy_uapi_to_hw_state(struct intel_plane_state *plane_state, > > const struct intel_plane_state *from_plane_state, > > struct intel_crtc *crtc) > > @@ -691,6 +711,7 @@ int intel_plane_atomic_check(struct intel_atomic_state *state, > > const struct intel_plane_state *old_plane_state = > > intel_atomic_get_old_plane_state(state, plane); > > const struct intel_plane_state *new_primary_crtc_plane_state; > > + const struct intel_plane_state *old_primary_crtc_plane_state; > > struct intel_crtc *crtc = intel_crtc_for_pipe(display, plane->pipe); > > const struct intel_crtc_state *old_crtc_state = > > intel_atomic_get_old_crtc_state(state, crtc); > > @@ -705,10 +726,17 @@ int intel_plane_atomic_check(struct intel_atomic_state *state, > > > > new_primary_crtc_plane_state = > > intel_atomic_get_new_plane_state(state, primary_crtc_plane); > > + old_primary_crtc_plane_state = > > + intel_atomic_get_old_plane_state(state, primary_crtc_plane); > > } else { > > new_primary_crtc_plane_state = new_plane_state; > > + old_primary_crtc_plane_state = old_plane_state; > > } > > > > + intel_plane_check_plane_damage(new_plane_state, > > + old_primary_crtc_plane_state, > > + new_primary_crtc_plane_state); > > + > > intel_plane_copy_uapi_to_hw_state(new_plane_state, > > new_primary_crtc_plane_state, > > crtc); > > diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h > > b/drivers/gpu/drm/i915/display/intel_display_types.h > > index cb51b7936f93..8d53bcca9614 100644 > > --- a/drivers/gpu/drm/i915/display/intel_display_types.h > > +++ b/drivers/gpu/drm/i915/display/intel_display_types.h > > @@ -695,6 +695,8 @@ struct intel_plane_state { > > u64 ccval; > > > > const char *no_fbc_reason; > > + > > + struct drm_rect damage_merged; > > Since this is only used for the fbc stuff I would just > call it 'fbc_dirty'. Though I suppose if we were to also > use this for the PSR stuff then "damage" might be a decent > name. The _merged part is pointless imo. Yes. I was thinking if PSR can also use it at some point. But I can change it to fbc_dirty > > > }; > > > > struct intel_initial_plane_config { > > diff --git a/drivers/gpu/drm/i915/display/skl_universal_plane.c > > b/drivers/gpu/drm/i915/display/skl_universal_plane.c > > index 301ad3a22c4c..b90a7d52c071 100644 > > --- a/drivers/gpu/drm/i915/display/skl_universal_plane.c > > +++ b/drivers/gpu/drm/i915/display/skl_universal_plane.c > > @@ -2249,11 +2249,42 @@ static void check_protection(struct intel_plane_state *plane_state) > > !plane_state->decrypt; > > } > > > > +static void > > +skl_plane_check_damage_with_viewport(struct intel_plane_state *plane_state) > > +{ > > + struct drm_rect *damage_merged = &plane_state->damage_merged; > > + const struct drm_framebuffer *fb = plane_state->hw.fb; > > + unsigned int rotation = plane_state->hw.rotation; > > + struct drm_rect *src = &plane_state->uapi.src; > > const Ack. > > > + > > + if (drm_rotation_90_or_270(rotation)) { > > + drm_rect_rotate(damage_merged, fb->width, fb->height, > > fb might be NULL here. > > I guess we might as well do something like: > if (!visible) -> make the dirty rect empty Actually, the drm_atomic_helper_damage_merged() returns false in case the plane not visible. Then intel_plane_check_plane_damage() makes the damage area as a full plane region! So will check if (plane_state->uapi.visible) before calling the functions to make rect relative to viewport and plane SURF. So the fbc_dirty will point to whole plane in such cases. And in the FBC dirty rect handling part plane->visible condition is checked. What do you think about this? > > > + DRM_MODE_ROTATE_270); > > + drm_rect_translate(damage_merged, -(src->y1 >> 16), > > + -(src->x1 >> 16)); > > + } else { > > + drm_rect_translate(damage_merged, -(src->x1 >> 16), > > + -(src->y1 >> 16)); > > + } > > +} > > + > > +static void > > +skl_plane_check_damage_with_plane_surf(struct intel_plane_state *plane_state) > > the "with" stuff in the name is a bit confusing. What we are doing > is make the rectangle relative to plane SURF. Same story with the > other function. Sure. How about skl_plane_check_fbc_dirty_relativeto_viewport() skl_plane_check_fbc_dirty_relativeto_plane_surf() > > > +{ > > + struct drm_rect *damage_merged = &plane_state->damage_merged; > > + struct drm_rect src; > > + > > + drm_rect_fp_to_int(&src, &plane_state->uapi.src); > > + drm_rect_translate(damage_merged, src.x1, src.y1); > > + drm_rect_intersect(damage_merged, &src); > > Missing the "make it at last one scanline" here. Though if we do > decide to use this also for PSR then I guess we'd need to handle > that elsewhere. For now it could just be here. I am doing that as part of the FBC dirty prepare. Isnt it really a FBC dirty rect validation restriction than here? BR Vinod > > > +} > > + > > static int skl_plane_check(struct intel_crtc_state *crtc_state, > > struct intel_plane_state *plane_state) > > { > > + struct intel_display *display = to_intel_display(crtc_state); > > struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane); > > - struct drm_i915_private *dev_priv = to_i915(plane->base.dev); > > + struct drm_i915_private *i915 = to_i915(plane->base.dev); > > const struct drm_framebuffer *fb = plane_state->hw.fb; > > int min_scale = DRM_PLANE_NO_SCALING; > > int max_scale = DRM_PLANE_NO_SCALING; > > @@ -2266,7 +2297,7 @@ static int skl_plane_check(struct intel_crtc_state *crtc_state, > > /* use scaler when colorkey is not required */ > > if (!plane_state->ckey.flags && skl_fb_scalable(fb)) { > > min_scale = 1; > > - max_scale = skl_plane_max_scale(dev_priv, fb); > > + max_scale = skl_plane_max_scale(i915, fb); > > } > > > > ret = intel_atomic_plane_check_clipping(plane_state, crtc_state, > > @@ -2274,6 +2305,9 @@ static int skl_plane_check(struct intel_crtc_state *crtc_state, > > if (ret) > > return ret; > > > > + if (HAS_FBC_DIRTY_RECT(display)) > > + skl_plane_check_damage_with_viewport(plane_state); > > + > > ret = skl_check_plane_surface(plane_state); > > if (ret) > > return ret; > > @@ -2289,6 +2323,9 @@ static int skl_plane_check(struct intel_crtc_state *crtc_state, > > if (ret) > > return ret; > > > > + if (HAS_FBC_DIRTY_RECT(display)) > > + skl_plane_check_damage_with_plane_surf(plane_state); > > + > > ret = skl_plane_check_nv12_rotation(plane_state); > > if (ret) > > return ret; > > @@ -2301,12 +2338,12 @@ static int skl_plane_check(struct intel_crtc_state *crtc_state, > > > > plane_state->ctl = skl_plane_ctl(crtc_state, plane_state); > > > > - if (DISPLAY_VER(dev_priv) >= 10) > > + if (DISPLAY_VER(display) >= 10) > > plane_state->color_ctl = glk_plane_color_ctl(crtc_state, > > plane_state); > > > > if (intel_format_info_is_yuv_semiplanar(fb->format, fb->modifier) && > > - icl_is_hdr_plane(dev_priv, plane->id)) > > + icl_is_hdr_plane(i915, plane->id)) > > /* Enable and use MPEG-2 chroma siting */ > > plane_state->cus_ctl = PLANE_CUS_ENABLE | > > PLANE_CUS_HPHASE_0 | > > -- > > 2.43.0 > ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH v6 4/7] drm/i915/xe3: update and store the plane damage clips 2025-02-05 13:29 ` Govindapillai, Vinod @ 2025-02-05 14:05 ` Ville Syrjälä 0 siblings, 0 replies; 28+ messages in thread From: Ville Syrjälä @ 2025-02-05 14:05 UTC (permalink / raw) To: Govindapillai, Vinod Cc: intel-xe@lists.freedesktop.org, Saarinen, Jani, Reddy Guddati, Santhosh, intel-gfx@lists.freedesktop.org, Syrjala, Ville On Wed, Feb 05, 2025 at 01:29:30PM +0000, Govindapillai, Vinod wrote: > Thanks Ville for the review.. > > Some responses and clarifications inline.. > > On Wed, 2025-02-05 at 14:43 +0200, Ville Syrjälä wrote: > > On Thu, Jan 30, 2025 at 11:00:23PM +0200, Vinod Govindapillai wrote: > > > Userspace can pass damage area clips per plane to track > > > changes in a plane and some display components can utilze > > > these damage clips for efficiently handling use cases like > > > FBC, PSR etc. A merged damage area is generated and its > > > coordinates are updated relative to viewport and HW and > > > stored in the plane_state. This merged damage areas will be > > > used for FBC dirty rect support in xe3 in the follow-up > > > patch. > > > > > > Big thanks to Ville Syrjala for his contribuitions in shaping > > > up of this series. > > > > > > v1: - Move damage_merged helper to cover bigjoiner case and use > > > the correct plane state for damage find helper (Ville) > > > - Damage handling code under HAS_FBC_DIRTY_RECT() so the > > > the related part will be executed only for xe3+ > > > - Changed dev_priv to i915 in one of the functions > > > > > > Signed-off-by: Vinod Govindapillai <vinod.govindapillai@intel.com> > > > --- > > > .../gpu/drm/i915/display/intel_atomic_plane.c | 28 ++++++++++++ > > > .../drm/i915/display/intel_display_types.h | 2 + > > > .../drm/i915/display/skl_universal_plane.c | 45 +++++++++++++++++-- > > > 3 files changed, 71 insertions(+), 4 deletions(-) > > > > > > diff --git a/drivers/gpu/drm/i915/display/intel_atomic_plane.c > > > b/drivers/gpu/drm/i915/display/intel_atomic_plane.c > > > index c558143f4f82..f55f7044dc67 100644 > > > --- a/drivers/gpu/drm/i915/display/intel_atomic_plane.c > > > +++ b/drivers/gpu/drm/i915/display/intel_atomic_plane.c > > > @@ -36,6 +36,7 @@ > > > > > > #include <drm/drm_atomic_helper.h> > > > #include <drm/drm_blend.h> > > > +#include <drm/drm_damage_helper.h> > > > #include <drm/drm_fourcc.h> > > > #include <drm/drm_gem.h> > > > #include <drm/drm_gem_atomic_helper.h> > > > @@ -322,6 +323,25 @@ static void intel_plane_clear_hw_state(struct intel_plane_state > > > *plane_state) > > > memset(&plane_state->hw, 0, sizeof(plane_state->hw)); > > > } > > > > > > +static void > > > +intel_plane_check_plane_damage(struct intel_plane_state *new_plane_state, > > > + const struct intel_plane_state *old_primary_plane_state, > > > + const struct intel_plane_state *new_primary_plane_state) > > > > "primary_plane_state" is a confusing name because "primary plane" > > generally means something totally different than what's used here. > > probably we should just call these "uapi_plane_state" or something. > > Okay! At this function call it is still intel_plane_state, could it be old_primary_crtc_plane_sate > and new_primary_crtc_plane_state? Or do you meant to change these parameters to old_uapi_plane_state > and new_uapi_plane_state? We should probably change all of them. But that should be a separate patch. > > > > > > +{ > > > + struct intel_display *display = to_intel_display(new_plane_state); > > > + struct drm_rect *damage_merged = &new_plane_state->damage_merged; > > > + > > > + if (!HAS_FBC_DIRTY_RECT(display)) > > > + return; > > > + > > > + if (!drm_atomic_helper_damage_merged(&old_primary_plane_state->uapi, > > > + &new_primary_plane_state->uapi, > > > + damage_merged)) > > > + /* Incase helper fails, mark whole plane region as damage */ > > > + *damage_merged = > > > + drm_plane_state_src(&new_primary_plane_state->uapi); > > > +} > > > + > > > void intel_plane_copy_uapi_to_hw_state(struct intel_plane_state *plane_state, > > > const struct intel_plane_state *from_plane_state, > > > struct intel_crtc *crtc) > > > @@ -691,6 +711,7 @@ int intel_plane_atomic_check(struct intel_atomic_state *state, > > > const struct intel_plane_state *old_plane_state = > > > intel_atomic_get_old_plane_state(state, plane); > > > const struct intel_plane_state *new_primary_crtc_plane_state; > > > + const struct intel_plane_state *old_primary_crtc_plane_state; > > > struct intel_crtc *crtc = intel_crtc_for_pipe(display, plane->pipe); > > > const struct intel_crtc_state *old_crtc_state = > > > intel_atomic_get_old_crtc_state(state, crtc); > > > @@ -705,10 +726,17 @@ int intel_plane_atomic_check(struct intel_atomic_state *state, > > > > > > new_primary_crtc_plane_state = > > > intel_atomic_get_new_plane_state(state, primary_crtc_plane); > > > + old_primary_crtc_plane_state = > > > + intel_atomic_get_old_plane_state(state, primary_crtc_plane); > > > } else { > > > new_primary_crtc_plane_state = new_plane_state; > > > + old_primary_crtc_plane_state = old_plane_state; > > > } > > > > > > + intel_plane_check_plane_damage(new_plane_state, > > > + old_primary_crtc_plane_state, > > > + new_primary_crtc_plane_state); > > > + > > > intel_plane_copy_uapi_to_hw_state(new_plane_state, > > > new_primary_crtc_plane_state, > > > crtc); > > > diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h > > > b/drivers/gpu/drm/i915/display/intel_display_types.h > > > index cb51b7936f93..8d53bcca9614 100644 > > > --- a/drivers/gpu/drm/i915/display/intel_display_types.h > > > +++ b/drivers/gpu/drm/i915/display/intel_display_types.h > > > @@ -695,6 +695,8 @@ struct intel_plane_state { > > > u64 ccval; > > > > > > const char *no_fbc_reason; > > > + > > > + struct drm_rect damage_merged; > > > > Since this is only used for the fbc stuff I would just > > call it 'fbc_dirty'. Though I suppose if we were to also > > use this for the PSR stuff then "damage" might be a decent > > name. The _merged part is pointless imo. > > Yes. I was thinking if PSR can also use it at some point. But I can change it to fbc_dirty Hmm. Maybe leave it as "damage". And since it's ephemeral it should be cleared out in intel_plane_duplicate_state(). And then the "we need at least one scanline for FBC" thing does need to be handle somewhere later. > > > > > > }; > > > > > > struct intel_initial_plane_config { > > > diff --git a/drivers/gpu/drm/i915/display/skl_universal_plane.c > > > b/drivers/gpu/drm/i915/display/skl_universal_plane.c > > > index 301ad3a22c4c..b90a7d52c071 100644 > > > --- a/drivers/gpu/drm/i915/display/skl_universal_plane.c > > > +++ b/drivers/gpu/drm/i915/display/skl_universal_plane.c > > > @@ -2249,11 +2249,42 @@ static void check_protection(struct intel_plane_state *plane_state) > > > !plane_state->decrypt; > > > } > > > > > > +static void > > > +skl_plane_check_damage_with_viewport(struct intel_plane_state *plane_state) > > > +{ > > > + struct drm_rect *damage_merged = &plane_state->damage_merged; > > > + const struct drm_framebuffer *fb = plane_state->hw.fb; > > > + unsigned int rotation = plane_state->hw.rotation; > > > + struct drm_rect *src = &plane_state->uapi.src; > > > > const > > Ack. > > > > > > + > > > + if (drm_rotation_90_or_270(rotation)) { > > > + drm_rect_rotate(damage_merged, fb->width, fb->height, > > > > fb might be NULL here. > > > > I guess we might as well do something like: > > if (!visible) -> make the dirty rect empty > > Actually, the drm_atomic_helper_damage_merged() returns false in case the plane not visible. Then > intel_plane_check_plane_damage() makes the damage area as a full plane region! > > So will check if (plane_state->uapi.visible) before calling the functions to make rect relative to > viewport and plane SURF. > > So the fbc_dirty will point to whole plane in such cases. And in the FBC dirty rect handling part > plane->visible condition is checked. > > What do you think about this? If the plane is invisible there should be no damage. > > > > > > + DRM_MODE_ROTATE_270); > > > + drm_rect_translate(damage_merged, -(src->y1 >> 16), > > > + -(src->x1 >> 16)); > > > + } else { > > > + drm_rect_translate(damage_merged, -(src->x1 >> 16), > > > + -(src->y1 >> 16)); > > > + } > > > +} > > > + > > > +static void > > > +skl_plane_check_damage_with_plane_surf(struct intel_plane_state *plane_state) > > > > the "with" stuff in the name is a bit confusing. What we are doing > > is make the rectangle relative to plane SURF. Same story with the > > other function. > > Sure. How about > skl_plane_check_fbc_dirty_relativeto_viewport() > skl_plane_check_fbc_dirty_relativeto_plane_surf() Still rather confusing to me. If we do leave it as just "damage" maybe we should in fact keep it viewport relative always, then the latter function could be called just clip_damage()/etc. The first one I guess should be called something like make_damage_viewport_relative(). I suppose what we should really do is have intel_atomic_plane_check_clipping() do all of it already. But that does mean we might have to move the src coordinate tweaking from intel_plane_check_src_coordinates() into there already. But I haven't really though through the full implications what it means for sub-pixel coordinates and such (not that we handle those properly anyway atm). > > > > > > +{ > > > + struct drm_rect *damage_merged = &plane_state->damage_merged; > > > + struct drm_rect src; > > > + > > > + drm_rect_fp_to_int(&src, &plane_state->uapi.src); > > > + drm_rect_translate(damage_merged, src.x1, src.y1); > > > + drm_rect_intersect(damage_merged, &src); > > > > Missing the "make it at last one scanline" here. Though if we do > > decide to use this also for PSR then I guess we'd need to handle > > that elsewhere. For now it could just be here. > > I am doing that as part of the FBC dirty prepare. > Isnt it really a FBC dirty rect validation restriction than here? > > BR > Vinod > > > > > > +} > > > + > > > static int skl_plane_check(struct intel_crtc_state *crtc_state, > > > struct intel_plane_state *plane_state) > > > { > > > + struct intel_display *display = to_intel_display(crtc_state); > > > struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane); > > > - struct drm_i915_private *dev_priv = to_i915(plane->base.dev); > > > + struct drm_i915_private *i915 = to_i915(plane->base.dev); > > > const struct drm_framebuffer *fb = plane_state->hw.fb; > > > int min_scale = DRM_PLANE_NO_SCALING; > > > int max_scale = DRM_PLANE_NO_SCALING; > > > @@ -2266,7 +2297,7 @@ static int skl_plane_check(struct intel_crtc_state *crtc_state, > > > /* use scaler when colorkey is not required */ > > > if (!plane_state->ckey.flags && skl_fb_scalable(fb)) { > > > min_scale = 1; > > > - max_scale = skl_plane_max_scale(dev_priv, fb); > > > + max_scale = skl_plane_max_scale(i915, fb); > > > } > > > > > > ret = intel_atomic_plane_check_clipping(plane_state, crtc_state, > > > @@ -2274,6 +2305,9 @@ static int skl_plane_check(struct intel_crtc_state *crtc_state, > > > if (ret) > > > return ret; > > > > > > + if (HAS_FBC_DIRTY_RECT(display)) > > > + skl_plane_check_damage_with_viewport(plane_state); > > > + > > > ret = skl_check_plane_surface(plane_state); > > > if (ret) > > > return ret; > > > @@ -2289,6 +2323,9 @@ static int skl_plane_check(struct intel_crtc_state *crtc_state, > > > if (ret) > > > return ret; > > > > > > + if (HAS_FBC_DIRTY_RECT(display)) > > > + skl_plane_check_damage_with_plane_surf(plane_state); > > > + > > > ret = skl_plane_check_nv12_rotation(plane_state); > > > if (ret) > > > return ret; > > > @@ -2301,12 +2338,12 @@ static int skl_plane_check(struct intel_crtc_state *crtc_state, > > > > > > plane_state->ctl = skl_plane_ctl(crtc_state, plane_state); > > > > > > - if (DISPLAY_VER(dev_priv) >= 10) > > > + if (DISPLAY_VER(display) >= 10) > > > plane_state->color_ctl = glk_plane_color_ctl(crtc_state, > > > plane_state); > > > > > > if (intel_format_info_is_yuv_semiplanar(fb->format, fb->modifier) && > > > - icl_is_hdr_plane(dev_priv, plane->id)) > > > + icl_is_hdr_plane(i915, plane->id)) > > > /* Enable and use MPEG-2 chroma siting */ > > > plane_state->cus_ctl = PLANE_CUS_ENABLE | > > > PLANE_CUS_HPHASE_0 | > > > -- > > > 2.43.0 > > > -- Ville Syrjälä Intel ^ permalink raw reply [flat|nested] 28+ messages in thread
* [PATCH v6 5/7] drm/i915/xe3: dirty rect support for FBC 2025-01-30 21:00 [PATCH v6 0/7] drm/i915/xe3: FBC Dirty rect feature support Vinod Govindapillai ` (3 preceding siblings ...) 2025-01-30 21:00 ` [PATCH v6 4/7] drm/i915/xe3: update and store the plane damage clips Vinod Govindapillai @ 2025-01-30 21:00 ` Vinod Govindapillai 2025-02-05 13:31 ` Ville Syrjälä 2025-01-30 21:00 ` [PATCH v6 6/7] drm/i915/xe3: avoid calling fbc activate if fbc is active Vinod Govindapillai ` (6 subsequent siblings) 11 siblings, 1 reply; 28+ messages in thread From: Vinod Govindapillai @ 2025-01-30 21:00 UTC (permalink / raw) To: intel-gfx, intel-xe Cc: vinod.govindapillai, ville.syrjala, santhosh.reddy.guddati, jani.saarinen Dirty rectangle feature allows FBC to recompress a subsection of a frame. When this feature is enabled, display will read the scan lines between dirty rectangle start line and dirty rectangle end line in subsequent frames. Use the merged damage clip stored in the plane state to configure the FBC dirty rect areas. v2: - Move dirty rect handling to fbc state (Ville) v3: - Use intel_fbc_dirty_rect_update_noarm (Ville) - Split plane damage collection and dirty rect preparation - Handle case where dirty rect fall outside the visible region v4: - A state variable to check if we need to update dirty rect registers in case intel_fbc_can_flip_nuke() (Ville) Bspec: 68881, 71675, 73424 Signed-off-by: Vinod Govindapillai <vinod.govindapillai@intel.com> --- drivers/gpu/drm/i915/display/intel_display.c | 7 + drivers/gpu/drm/i915/display/intel_fbc.c | 132 +++++++++++++++++++ drivers/gpu/drm/i915/display/intel_fbc.h | 6 + 3 files changed, 145 insertions(+) diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c index 7d68d652c1bc..33277f892279 100644 --- a/drivers/gpu/drm/i915/display/intel_display.c +++ b/drivers/gpu/drm/i915/display/intel_display.c @@ -7263,6 +7263,8 @@ static void intel_update_crtc(struct intel_atomic_state *state, commit_pipe_pre_planes(state, crtc); + intel_fbc_dirty_rect_update_noarm(NULL, state, crtc); + intel_crtc_planes_update_arm(NULL, state, crtc); commit_pipe_post_planes(state, crtc); @@ -7723,6 +7725,8 @@ static void intel_atomic_dsb_finish(struct intel_atomic_state *state, new_crtc_state); intel_crtc_planes_update_noarm(new_crtc_state->dsb_commit, state, crtc); + intel_fbc_dirty_rect_update_noarm(new_crtc_state->dsb_commit, + state, crtc); intel_dsb_vblank_evade(state, new_crtc_state->dsb_commit); @@ -7769,6 +7773,9 @@ static void intel_atomic_commit_tail(struct intel_atomic_state *state) intel_atomic_prepare_plane_clear_colors(state); + for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) + intel_fbc_prepare_dirty_rect(state, crtc); + for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) intel_atomic_dsb_finish(state, crtc); diff --git a/drivers/gpu/drm/i915/display/intel_fbc.c b/drivers/gpu/drm/i915/display/intel_fbc.c index df05904bac8a..24736c7a79a6 100644 --- a/drivers/gpu/drm/i915/display/intel_fbc.c +++ b/drivers/gpu/drm/i915/display/intel_fbc.c @@ -88,6 +88,10 @@ struct intel_fbc_state { u16 override_cfb_stride; u16 interval; s8 fence_id; + struct { + struct drm_rect rect; + bool valid; + } fbc_dirty_rect; }; struct intel_fbc { @@ -527,6 +531,9 @@ static void ilk_fbc_deactivate(struct intel_fbc *fbc) struct intel_display *display = fbc->display; u32 dpfc_ctl; + if (HAS_FBC_DIRTY_RECT(display)) + intel_de_write(display, XE3_FBC_DIRTY_CTL(fbc->id), 0); + /* Disable compression */ dpfc_ctl = intel_de_read(display, ILK_DPFC_CONTROL(fbc->id)); if (dpfc_ctl & DPFC_CTL_EN) { @@ -670,6 +677,10 @@ static void ivb_fbc_activate(struct intel_fbc *fbc) if (DISPLAY_VER(display) >= 20) intel_de_write(display, ILK_DPFC_CONTROL(fbc->id), dpfc_ctl); + if (HAS_FBC_DIRTY_RECT(display)) + intel_de_write(display, XE3_FBC_DIRTY_CTL(fbc->id), + FBC_DIRTY_RECT_EN); + intel_de_write(display, ILK_DPFC_CONTROL(fbc->id), DPFC_CTL_EN | dpfc_ctl); } @@ -1203,6 +1214,127 @@ static bool tiling_is_valid(const struct intel_plane_state *plane_state) return i8xx_fbc_tiling_valid(plane_state); } +static bool intel_fbc_can_flip_nuke(struct intel_atomic_state *state, + struct intel_crtc *crtc, + struct intel_plane *plane); + +static void +intel_fbc_dirty_rect_update(struct intel_dsb *dsb, struct intel_plane *plane) +{ + struct intel_display *display = to_intel_display(plane); + struct intel_fbc *fbc = plane->fbc; + struct intel_fbc_state *fbc_state = &fbc->state; + struct drm_rect *fbc_dirty_rect = &fbc_state->fbc_dirty_rect.rect; + + if (fbc_state->plane != plane) + return; + + if (!fbc_state->fbc_dirty_rect.valid) + return; + + intel_de_write_dsb(display, dsb, XE3_FBC_DIRTY_RECT(fbc->id), + FBC_DIRTY_RECT_START_LINE(fbc_dirty_rect->y1) | + FBC_DIRTY_RECT_END_LINE(fbc_dirty_rect->y2)); + + fbc_state->fbc_dirty_rect.valid = false; +} + +void +intel_fbc_dirty_rect_update_noarm(struct intel_dsb *dsb, + struct intel_atomic_state *state, + struct intel_crtc *crtc) +{ + struct intel_display *display = to_intel_display(state); + struct intel_plane_state *plane_state; + struct intel_plane *plane; + int i; + + if (!HAS_FBC_DIRTY_RECT(display)) + return; + + for_each_new_intel_plane_in_state(state, plane, plane_state, i) { + struct intel_fbc *fbc = plane->fbc; + + if (!fbc || plane->pipe != crtc->pipe) + continue; + + if (!plane_state->uapi.visible) + continue; + + intel_fbc_dirty_rect_update(dsb, plane); + } +} + +static void +validate_and_clip_dirty_rect(struct intel_plane_state *plane_state, + struct drm_rect *dirty_rect) +{ + int y_offset = plane_state->view.color_plane[0].y; + int plane_height = drm_rect_height(&plane_state->uapi.src) >> 16; + int max_endline = y_offset + plane_height - 1; + + dirty_rect->y1 = clamp(dirty_rect->y1, y_offset, max_endline); + dirty_rect->y2 = clamp(dirty_rect->y2, dirty_rect->y1, max_endline); +} + +static void +__intel_fbc_prepare_dirty_rect(struct intel_plane *plane, + struct intel_plane_state *plane_state, + bool fbc_dirty_rect_valid) +{ + struct intel_fbc_state *fbc_state = &plane->fbc->state; + struct drm_rect *fbc_dirty_rect = &fbc_state->fbc_dirty_rect.rect; + struct drm_rect *damage_merged = &plane_state->damage_merged; + int y_offset = plane_state->view.color_plane[0].y; + + fbc_state->fbc_dirty_rect.valid = fbc_dirty_rect_valid; + + if (drm_rect_visible(damage_merged)) { + fbc_dirty_rect->y1 = damage_merged->y1; + fbc_dirty_rect->y2 = damage_merged->y2; + } else { + /* If not visible, we need to set one single line */ + fbc_dirty_rect->y1 = y_offset; + fbc_dirty_rect->y2 = y_offset; + } + fbc_dirty_rect->x1 = damage_merged->x1; + fbc_dirty_rect->x2 = damage_merged->x2; + + validate_and_clip_dirty_rect(plane_state, fbc_dirty_rect); +} + +void +intel_fbc_prepare_dirty_rect(struct intel_atomic_state *state, + struct intel_crtc *crtc) +{ + struct intel_display *display = to_intel_display(state); + struct intel_plane_state *plane_state; + struct intel_plane *plane; + int i; + + if (!HAS_FBC_DIRTY_RECT(display)) + return; + + for_each_new_intel_plane_in_state(state, plane, plane_state, i) { + struct intel_fbc *fbc = plane->fbc; + + if (!fbc || plane->pipe != crtc->pipe) + continue; + + if (!fbc->state.plane) + continue; + + /* If plane not visible, dirty rect might have invalid coordinates */ + if (!plane_state->uapi.visible) + continue; + + __intel_fbc_prepare_dirty_rect(plane, plane_state, + intel_fbc_can_flip_nuke(state, + crtc, + plane)); + } +} + static void intel_fbc_update_state(struct intel_atomic_state *state, struct intel_crtc *crtc, struct intel_plane *plane) diff --git a/drivers/gpu/drm/i915/display/intel_fbc.h b/drivers/gpu/drm/i915/display/intel_fbc.h index ceae55458e14..8f1b11c6f4d2 100644 --- a/drivers/gpu/drm/i915/display/intel_fbc.h +++ b/drivers/gpu/drm/i915/display/intel_fbc.h @@ -14,6 +14,7 @@ struct intel_atomic_state; struct intel_crtc; struct intel_crtc_state; struct intel_display; +struct intel_dsb; struct intel_fbc; struct intel_plane; struct intel_plane_state; @@ -48,5 +49,10 @@ void intel_fbc_handle_fifo_underrun_irq(struct intel_display *display); void intel_fbc_reset_underrun(struct intel_display *display); void intel_fbc_crtc_debugfs_add(struct intel_crtc *crtc); void intel_fbc_debugfs_register(struct intel_display *display); +void intel_fbc_prepare_dirty_rect(struct intel_atomic_state *state, + struct intel_crtc *crtc); +void intel_fbc_dirty_rect_update_noarm(struct intel_dsb *dsb, + struct intel_atomic_state *state, + struct intel_crtc *crtc); #endif /* __INTEL_FBC_H__ */ -- 2.43.0 ^ permalink raw reply related [flat|nested] 28+ messages in thread
* Re: [PATCH v6 5/7] drm/i915/xe3: dirty rect support for FBC 2025-01-30 21:00 ` [PATCH v6 5/7] drm/i915/xe3: dirty rect support for FBC Vinod Govindapillai @ 2025-02-05 13:31 ` Ville Syrjälä 2025-02-05 14:49 ` Govindapillai, Vinod 0 siblings, 1 reply; 28+ messages in thread From: Ville Syrjälä @ 2025-02-05 13:31 UTC (permalink / raw) To: Vinod Govindapillai Cc: intel-gfx, intel-xe, ville.syrjala, santhosh.reddy.guddati, jani.saarinen On Thu, Jan 30, 2025 at 11:00:24PM +0200, Vinod Govindapillai wrote: > Dirty rectangle feature allows FBC to recompress a subsection > of a frame. When this feature is enabled, display will read > the scan lines between dirty rectangle start line and dirty > rectangle end line in subsequent frames. > > Use the merged damage clip stored in the plane state to > configure the FBC dirty rect areas. > > v2: - Move dirty rect handling to fbc state (Ville) > > v3: - Use intel_fbc_dirty_rect_update_noarm (Ville) > - Split plane damage collection and dirty rect preparation > - Handle case where dirty rect fall outside the visible region > > v4: - A state variable to check if we need to update dirty rect > registers in case intel_fbc_can_flip_nuke() (Ville) > > Bspec: 68881, 71675, 73424 > Signed-off-by: Vinod Govindapillai <vinod.govindapillai@intel.com> > --- > drivers/gpu/drm/i915/display/intel_display.c | 7 + > drivers/gpu/drm/i915/display/intel_fbc.c | 132 +++++++++++++++++++ > drivers/gpu/drm/i915/display/intel_fbc.h | 6 + > 3 files changed, 145 insertions(+) > > diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c > index 7d68d652c1bc..33277f892279 100644 > --- a/drivers/gpu/drm/i915/display/intel_display.c > +++ b/drivers/gpu/drm/i915/display/intel_display.c > @@ -7263,6 +7263,8 @@ static void intel_update_crtc(struct intel_atomic_state *state, > > commit_pipe_pre_planes(state, crtc); > > + intel_fbc_dirty_rect_update_noarm(NULL, state, crtc); > + That is not the right place for _noarm() stuff. Hmm, maybe we should just do this as part of intel_plane_update_noarm()? How does the dirty rect interact with async flips? > intel_crtc_planes_update_arm(NULL, state, crtc); > > commit_pipe_post_planes(state, crtc); > @@ -7723,6 +7725,8 @@ static void intel_atomic_dsb_finish(struct intel_atomic_state *state, > new_crtc_state); > intel_crtc_planes_update_noarm(new_crtc_state->dsb_commit, > state, crtc); > + intel_fbc_dirty_rect_update_noarm(new_crtc_state->dsb_commit, > + state, crtc); > > intel_dsb_vblank_evade(state, new_crtc_state->dsb_commit); > > @@ -7769,6 +7773,9 @@ static void intel_atomic_commit_tail(struct intel_atomic_state *state) > > intel_atomic_prepare_plane_clear_colors(state); > > + for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) > + intel_fbc_prepare_dirty_rect(state, crtc); > + > for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) > intel_atomic_dsb_finish(state, crtc); > > diff --git a/drivers/gpu/drm/i915/display/intel_fbc.c b/drivers/gpu/drm/i915/display/intel_fbc.c > index df05904bac8a..24736c7a79a6 100644 > --- a/drivers/gpu/drm/i915/display/intel_fbc.c > +++ b/drivers/gpu/drm/i915/display/intel_fbc.c > @@ -88,6 +88,10 @@ struct intel_fbc_state { > u16 override_cfb_stride; > u16 interval; > s8 fence_id; > + struct { > + struct drm_rect rect; > + bool valid; > + } fbc_dirty_rect; > }; > > struct intel_fbc { > @@ -527,6 +531,9 @@ static void ilk_fbc_deactivate(struct intel_fbc *fbc) > struct intel_display *display = fbc->display; > u32 dpfc_ctl; > > + if (HAS_FBC_DIRTY_RECT(display)) > + intel_de_write(display, XE3_FBC_DIRTY_CTL(fbc->id), 0); > + > /* Disable compression */ > dpfc_ctl = intel_de_read(display, ILK_DPFC_CONTROL(fbc->id)); > if (dpfc_ctl & DPFC_CTL_EN) { > @@ -670,6 +677,10 @@ static void ivb_fbc_activate(struct intel_fbc *fbc) > if (DISPLAY_VER(display) >= 20) > intel_de_write(display, ILK_DPFC_CONTROL(fbc->id), dpfc_ctl); > > + if (HAS_FBC_DIRTY_RECT(display)) > + intel_de_write(display, XE3_FBC_DIRTY_CTL(fbc->id), > + FBC_DIRTY_RECT_EN); > + > intel_de_write(display, ILK_DPFC_CONTROL(fbc->id), > DPFC_CTL_EN | dpfc_ctl); > } > @@ -1203,6 +1214,127 @@ static bool tiling_is_valid(const struct intel_plane_state *plane_state) > return i8xx_fbc_tiling_valid(plane_state); > } > > +static bool intel_fbc_can_flip_nuke(struct intel_atomic_state *state, > + struct intel_crtc *crtc, > + struct intel_plane *plane); You should put the code into a place that doesn't need this extra declaration. > + > +static void > +intel_fbc_dirty_rect_update(struct intel_dsb *dsb, struct intel_plane *plane) > +{ > + struct intel_display *display = to_intel_display(plane); > + struct intel_fbc *fbc = plane->fbc; > + struct intel_fbc_state *fbc_state = &fbc->state; > + struct drm_rect *fbc_dirty_rect = &fbc_state->fbc_dirty_rect.rect; > + > + if (fbc_state->plane != plane) > + return; > + > + if (!fbc_state->fbc_dirty_rect.valid) > + return; I think that extra flag can be thrown out and you can just check if the rect is visible here. > + > + intel_de_write_dsb(display, dsb, XE3_FBC_DIRTY_RECT(fbc->id), > + FBC_DIRTY_RECT_START_LINE(fbc_dirty_rect->y1) | > + FBC_DIRTY_RECT_END_LINE(fbc_dirty_rect->y2)); > + > + fbc_state->fbc_dirty_rect.valid = false; Why? > +} > + > +void > +intel_fbc_dirty_rect_update_noarm(struct intel_dsb *dsb, > + struct intel_atomic_state *state, > + struct intel_crtc *crtc) > +{ > + struct intel_display *display = to_intel_display(state); > + struct intel_plane_state *plane_state; const, although it seems to me we can just rely on the rect being valid or not and then the plane visiblility is also already covered. > + struct intel_plane *plane; > + int i; > + > + if (!HAS_FBC_DIRTY_RECT(display)) > + return; > + > + for_each_new_intel_plane_in_state(state, plane, plane_state, i) { > + struct intel_fbc *fbc = plane->fbc; > + > + if (!fbc || plane->pipe != crtc->pipe) > + continue; > + > + if (!plane_state->uapi.visible) > + continue; That check would also disappear. This does need to check if the plane is the one using FBC currently. Oh, I see you put that check inside intel_fbc_dirty_rect_update(). I think the check belongs here because that is how we do it everwhere else. I was pondering if we need to keep this lockless or not. I guess we don't since we are doing it from the noarm() section (assuming we're not planing to implement mailbox flips tomorrow). So for now I think we can just do the proper locking here too. If we do need to make this lockless in then we need to explain what makes it safe/correct. > + > + intel_fbc_dirty_rect_update(dsb, plane); > + } > +} > + > +static void > +validate_and_clip_dirty_rect(struct intel_plane_state *plane_state, > + struct drm_rect *dirty_rect) > +{ > + int y_offset = plane_state->view.color_plane[0].y; > + int plane_height = drm_rect_height(&plane_state->uapi.src) >> 16; > + int max_endline = y_offset + plane_height - 1; > + > + dirty_rect->y1 = clamp(dirty_rect->y1, y_offset, max_endline); > + dirty_rect->y2 = clamp(dirty_rect->y2, dirty_rect->y1, max_endline); > +} This is not needed. > + > +static void > +__intel_fbc_prepare_dirty_rect(struct intel_plane *plane, > + struct intel_plane_state *plane_state, > + bool fbc_dirty_rect_valid) > +{ > + struct intel_fbc_state *fbc_state = &plane->fbc->state; > + struct drm_rect *fbc_dirty_rect = &fbc_state->fbc_dirty_rect.rect; > + struct drm_rect *damage_merged = &plane_state->damage_merged; > + int y_offset = plane_state->view.color_plane[0].y; > + > + fbc_state->fbc_dirty_rect.valid = fbc_dirty_rect_valid; > + > + if (drm_rect_visible(damage_merged)) { > + fbc_dirty_rect->y1 = damage_merged->y1; > + fbc_dirty_rect->y2 = damage_merged->y2; > + } else { > + /* If not visible, we need to set one single line */ > + fbc_dirty_rect->y1 = y_offset; > + fbc_dirty_rect->y2 = y_offset; > + } > + fbc_dirty_rect->x1 = damage_merged->x1; > + fbc_dirty_rect->x2 = damage_merged->x2; > + > + validate_and_clip_dirty_rect(plane_state, fbc_dirty_rect); > +} > + > +void > +intel_fbc_prepare_dirty_rect(struct intel_atomic_state *state, > + struct intel_crtc *crtc) > +{ > + struct intel_display *display = to_intel_display(state); > + struct intel_plane_state *plane_state; > + struct intel_plane *plane; > + int i; > + > + if (!HAS_FBC_DIRTY_RECT(display)) > + return; > + > + for_each_new_intel_plane_in_state(state, plane, plane_state, i) { > + struct intel_fbc *fbc = plane->fbc; > + > + if (!fbc || plane->pipe != crtc->pipe) > + continue; > + > + if (!fbc->state.plane) > + continue; fbc->state.plane != plane Also needs locking. > + > + /* If plane not visible, dirty rect might have invalid coordinates */ > + if (!plane_state->uapi.visible) > + continue; Seems like a redundant check. > + > + __intel_fbc_prepare_dirty_rect(plane, plane_state, > + intel_fbc_can_flip_nuke(state, > + crtc, > + plane)); > + } > +} > + > static void intel_fbc_update_state(struct intel_atomic_state *state, > struct intel_crtc *crtc, > struct intel_plane *plane) > diff --git a/drivers/gpu/drm/i915/display/intel_fbc.h b/drivers/gpu/drm/i915/display/intel_fbc.h > index ceae55458e14..8f1b11c6f4d2 100644 > --- a/drivers/gpu/drm/i915/display/intel_fbc.h > +++ b/drivers/gpu/drm/i915/display/intel_fbc.h > @@ -14,6 +14,7 @@ struct intel_atomic_state; > struct intel_crtc; > struct intel_crtc_state; > struct intel_display; > +struct intel_dsb; > struct intel_fbc; > struct intel_plane; > struct intel_plane_state; > @@ -48,5 +49,10 @@ void intel_fbc_handle_fifo_underrun_irq(struct intel_display *display); > void intel_fbc_reset_underrun(struct intel_display *display); > void intel_fbc_crtc_debugfs_add(struct intel_crtc *crtc); > void intel_fbc_debugfs_register(struct intel_display *display); > +void intel_fbc_prepare_dirty_rect(struct intel_atomic_state *state, > + struct intel_crtc *crtc); > +void intel_fbc_dirty_rect_update_noarm(struct intel_dsb *dsb, > + struct intel_atomic_state *state, > + struct intel_crtc *crtc); > > #endif /* __INTEL_FBC_H__ */ > -- > 2.43.0 -- Ville Syrjälä Intel ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH v6 5/7] drm/i915/xe3: dirty rect support for FBC 2025-02-05 13:31 ` Ville Syrjälä @ 2025-02-05 14:49 ` Govindapillai, Vinod 2025-02-05 15:45 ` Ville Syrjälä 0 siblings, 1 reply; 28+ messages in thread From: Govindapillai, Vinod @ 2025-02-05 14:49 UTC (permalink / raw) To: ville.syrjala@linux.intel.com Cc: intel-xe@lists.freedesktop.org, Saarinen, Jani, Reddy Guddati, Santhosh, intel-gfx@lists.freedesktop.org, Syrjala, Ville So based on your comments on the previous patch and this one, let me conclude the changes to be done here! 1. As part of the previous patch, we collect the fbc_dirty rect from the damage_helper call. Make damage empty if the plane not visible. 2. Update the FBC dirty rect registes. This do two things 2.1 Prepare the collected FBC dirty and copy it to the correct fbc_state - intel_fbc_prepare_dirty_rect() 2.2 Write to the registers - intel_fbc_dirty_rect_update_noarm() 2.1 AT the beginning of the atomic_commit_tail() within the DSB block handling, calls intel_fbc_prepare_dirty_rect() to populate fbc_state's fbc_dirty_rect structs In the intel_fbc_prepare_dirty_rect(), iterate through each plane in the atomic_state check the correct plane, pipe etc. Then, if (drm_rect_visible(damage_merged) update fbc_state's fbc dirty rect else Make at it atleast one scan line and update the fbc_state's fbc_dirty rect 2.2 Then call intel_fbc_dirty_rect_update_noarm() form intel_plane_update_noarm() And within in intel_fbc_dirty_rect_update_noarm() just update the FBC dirty registers with the values from corresponding fbc_state->fbc_dirty I think last time when we discussed, we decided keep that valid flag to track intel_fbc_can_flip_nuke() case. So I guess that is not required anymore Regarding the async flip cases, I thought nothing specific need to be done for the fbc dirty rect. Atleast the some the tests I tried were passing with dirty rect enabled. I will add the locks in these new functions. BR Vinod On Wed, 2025-02-05 at 15:31 +0200, Ville Syrjälä wrote: > On Thu, Jan 30, 2025 at 11:00:24PM +0200, Vinod Govindapillai wrote: > > Dirty rectangle feature allows FBC to recompress a subsection > > of a frame. When this feature is enabled, display will read > > the scan lines between dirty rectangle start line and dirty > > rectangle end line in subsequent frames. > > > > Use the merged damage clip stored in the plane state to > > configure the FBC dirty rect areas. > > > > v2: - Move dirty rect handling to fbc state (Ville) > > > > v3: - Use intel_fbc_dirty_rect_update_noarm (Ville) > > - Split plane damage collection and dirty rect preparation > > - Handle case where dirty rect fall outside the visible region > > > > v4: - A state variable to check if we need to update dirty rect > > registers in case intel_fbc_can_flip_nuke() (Ville) > > > > Bspec: 68881, 71675, 73424 > > Signed-off-by: Vinod Govindapillai <vinod.govindapillai@intel.com> > > --- > > drivers/gpu/drm/i915/display/intel_display.c | 7 + > > drivers/gpu/drm/i915/display/intel_fbc.c | 132 +++++++++++++++++++ > > drivers/gpu/drm/i915/display/intel_fbc.h | 6 + > > 3 files changed, 145 insertions(+) > > > > diff --git a/drivers/gpu/drm/i915/display/intel_display.c > > b/drivers/gpu/drm/i915/display/intel_display.c > > index 7d68d652c1bc..33277f892279 100644 > > --- a/drivers/gpu/drm/i915/display/intel_display.c > > +++ b/drivers/gpu/drm/i915/display/intel_display.c > > @@ -7263,6 +7263,8 @@ static void intel_update_crtc(struct intel_atomic_state *state, > > > > commit_pipe_pre_planes(state, crtc); > > > > + intel_fbc_dirty_rect_update_noarm(NULL, state, crtc); > > + > > That is not the right place for _noarm() stuff. > > Hmm, maybe we should just do this as part of intel_plane_update_noarm()? > How does the dirty rect interact with async flips? Ok. I thought no need to handle anything specific to dirty_rect in case of async flips. Atleast the the tests that I tried were ok! > > > intel_crtc_planes_update_arm(NULL, state, crtc); > > > > commit_pipe_post_planes(state, crtc); > > @@ -7723,6 +7725,8 @@ static void intel_atomic_dsb_finish(struct intel_atomic_state *state, > > new_crtc_state); > > intel_crtc_planes_update_noarm(new_crtc_state->dsb_commit, > > state, crtc); > > + intel_fbc_dirty_rect_update_noarm(new_crtc_state->dsb_commit, > > + state, crtc); > > > > intel_dsb_vblank_evade(state, new_crtc_state->dsb_commit); > > > > @@ -7769,6 +7773,9 @@ static void intel_atomic_commit_tail(struct intel_atomic_state *state) > > > > intel_atomic_prepare_plane_clear_colors(state); > > > > + for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) > > + intel_fbc_prepare_dirty_rect(state, crtc); > > + > > for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) > > intel_atomic_dsb_finish(state, crtc); > > > > diff --git a/drivers/gpu/drm/i915/display/intel_fbc.c b/drivers/gpu/drm/i915/display/intel_fbc.c > > index df05904bac8a..24736c7a79a6 100644 > > --- a/drivers/gpu/drm/i915/display/intel_fbc.c > > +++ b/drivers/gpu/drm/i915/display/intel_fbc.c > > @@ -88,6 +88,10 @@ struct intel_fbc_state { > > u16 override_cfb_stride; > > u16 interval; > > s8 fence_id; > > + struct { > > + struct drm_rect rect; > > + bool valid; > > + } fbc_dirty_rect; > > }; > > > > struct intel_fbc { > > @@ -527,6 +531,9 @@ static void ilk_fbc_deactivate(struct intel_fbc *fbc) > > struct intel_display *display = fbc->display; > > u32 dpfc_ctl; > > > > + if (HAS_FBC_DIRTY_RECT(display)) > > + intel_de_write(display, XE3_FBC_DIRTY_CTL(fbc->id), 0); > > + > > /* Disable compression */ > > dpfc_ctl = intel_de_read(display, ILK_DPFC_CONTROL(fbc->id)); > > if (dpfc_ctl & DPFC_CTL_EN) { > > @@ -670,6 +677,10 @@ static void ivb_fbc_activate(struct intel_fbc *fbc) > > if (DISPLAY_VER(display) >= 20) > > intel_de_write(display, ILK_DPFC_CONTROL(fbc->id), dpfc_ctl); > > > > + if (HAS_FBC_DIRTY_RECT(display)) > > + intel_de_write(display, XE3_FBC_DIRTY_CTL(fbc->id), > > + FBC_DIRTY_RECT_EN); > > + > > intel_de_write(display, ILK_DPFC_CONTROL(fbc->id), > > DPFC_CTL_EN | dpfc_ctl); > > } > > @@ -1203,6 +1214,127 @@ static bool tiling_is_valid(const struct intel_plane_state *plane_state) > > return i8xx_fbc_tiling_valid(plane_state); > > } > > > > +static bool intel_fbc_can_flip_nuke(struct intel_atomic_state *state, > > + struct intel_crtc *crtc, > > + struct intel_plane *plane); > > You should put the code into a place that doesn't need this extra > declaration. > > > + > > +static void > > +intel_fbc_dirty_rect_update(struct intel_dsb *dsb, struct intel_plane *plane) > > +{ > > + struct intel_display *display = to_intel_display(plane); > > + struct intel_fbc *fbc = plane->fbc; > > + struct intel_fbc_state *fbc_state = &fbc->state; > > + struct drm_rect *fbc_dirty_rect = &fbc_state->fbc_dirty_rect.rect; > > + > > + if (fbc_state->plane != plane) > > + return; > > + > > + if (!fbc_state->fbc_dirty_rect.valid) > > + return; > > I think that extra flag can be thrown out and you can just > check if the rect is visible here. > > + > > + intel_de_write_dsb(display, dsb, XE3_FBC_DIRTY_RECT(fbc->id), > > + FBC_DIRTY_RECT_START_LINE(fbc_dirty_rect->y1) | > > + FBC_DIRTY_RECT_END_LINE(fbc_dirty_rect->y2)); > > + > > + fbc_state->fbc_dirty_rect.valid = false; > > Why? > > > +} > > + > > +void > > +intel_fbc_dirty_rect_update_noarm(struct intel_dsb *dsb, > > + struct intel_atomic_state *state, > > + struct intel_crtc *crtc) > > +{ > > + struct intel_display *display = to_intel_display(state); > > + struct intel_plane_state *plane_state; > > const, although it seems to me we can just rely on the rect being valid > or not and then the plane visiblility is also already covered. > > > + struct intel_plane *plane; > > + int i; > > + > > + if (!HAS_FBC_DIRTY_RECT(display)) > > + return; > > + > > + for_each_new_intel_plane_in_state(state, plane, plane_state, i) { > > + struct intel_fbc *fbc = plane->fbc; > > + > > + if (!fbc || plane->pipe != crtc->pipe) > > + continue; > > + > > + if (!plane_state->uapi.visible) > > + continue; > > That check would also disappear. > > This does need to check if the plane is the one using FBC > currently. Oh, I see you put that check inside > intel_fbc_dirty_rect_update(). I think the check belongs > here because that is how we do it everwhere else. > > I was pondering if we need to keep this lockless or not. > I guess we don't since we are doing it from the noarm() > section (assuming we're not planing to implement mailbox > flips tomorrow). So for now I think we can just do the proper > locking here too. If we do need to make this lockless in > then we need to explain what makes it safe/correct. > > > + > > + intel_fbc_dirty_rect_update(dsb, plane); > > + } > > +} > > + > > +static void > > +validate_and_clip_dirty_rect(struct intel_plane_state *plane_state, > > + struct drm_rect *dirty_rect) > > +{ > > + int y_offset = plane_state->view.color_plane[0].y; > > + int plane_height = drm_rect_height(&plane_state->uapi.src) >> 16; > > + int max_endline = y_offset + plane_height - 1; > > + > > + dirty_rect->y1 = clamp(dirty_rect->y1, y_offset, max_endline); > > + dirty_rect->y2 = clamp(dirty_rect->y2, dirty_rect->y1, max_endline); > > +} > > This is not needed. > > > + > > +static void > > +__intel_fbc_prepare_dirty_rect(struct intel_plane *plane, > > + struct intel_plane_state *plane_state, > > + bool fbc_dirty_rect_valid) > > +{ > > + struct intel_fbc_state *fbc_state = &plane->fbc->state; > > + struct drm_rect *fbc_dirty_rect = &fbc_state->fbc_dirty_rect.rect; > > + struct drm_rect *damage_merged = &plane_state->damage_merged; > > + int y_offset = plane_state->view.color_plane[0].y; > > + > > + fbc_state->fbc_dirty_rect.valid = fbc_dirty_rect_valid; > > + > > + if (drm_rect_visible(damage_merged)) { > > + fbc_dirty_rect->y1 = damage_merged->y1; > > + fbc_dirty_rect->y2 = damage_merged->y2; > > + } else { > > + /* If not visible, we need to set one single line */ > > + fbc_dirty_rect->y1 = y_offset; > > + fbc_dirty_rect->y2 = y_offset; > > + } > > + fbc_dirty_rect->x1 = damage_merged->x1; > > + fbc_dirty_rect->x2 = damage_merged->x2; > > + > > + validate_and_clip_dirty_rect(plane_state, fbc_dirty_rect); > > +} > > + > > +void > > +intel_fbc_prepare_dirty_rect(struct intel_atomic_state *state, > > + struct intel_crtc *crtc) > > +{ > > + struct intel_display *display = to_intel_display(state); > > + struct intel_plane_state *plane_state; > > + struct intel_plane *plane; > > + int i; > > + > > + if (!HAS_FBC_DIRTY_RECT(display)) > > + return; > > + > > + for_each_new_intel_plane_in_state(state, plane, plane_state, i) { > > + struct intel_fbc *fbc = plane->fbc; > > + > > + if (!fbc || plane->pipe != crtc->pipe) > > + continue; > > + > > + if (!fbc->state.plane) > > + continue; > > fbc->state.plane != plane > > Also needs locking. > > > + > > + /* If plane not visible, dirty rect might have invalid coordinates */ > > + if (!plane_state->uapi.visible) > > + continue; > > Seems like a redundant check. > > > + > > + __intel_fbc_prepare_dirty_rect(plane, plane_state, > > + intel_fbc_can_flip_nuke(state, > > + crtc, > > + plane)); > > + } > > +} > > + > > static void intel_fbc_update_state(struct intel_atomic_state *state, > > struct intel_crtc *crtc, > > struct intel_plane *plane) > > diff --git a/drivers/gpu/drm/i915/display/intel_fbc.h b/drivers/gpu/drm/i915/display/intel_fbc.h > > index ceae55458e14..8f1b11c6f4d2 100644 > > --- a/drivers/gpu/drm/i915/display/intel_fbc.h > > +++ b/drivers/gpu/drm/i915/display/intel_fbc.h > > @@ -14,6 +14,7 @@ struct intel_atomic_state; > > struct intel_crtc; > > struct intel_crtc_state; > > struct intel_display; > > +struct intel_dsb; > > struct intel_fbc; > > struct intel_plane; > > struct intel_plane_state; > > @@ -48,5 +49,10 @@ void intel_fbc_handle_fifo_underrun_irq(struct intel_display *display); > > void intel_fbc_reset_underrun(struct intel_display *display); > > void intel_fbc_crtc_debugfs_add(struct intel_crtc *crtc); > > void intel_fbc_debugfs_register(struct intel_display *display); > > +void intel_fbc_prepare_dirty_rect(struct intel_atomic_state *state, > > + struct intel_crtc *crtc); > > +void intel_fbc_dirty_rect_update_noarm(struct intel_dsb *dsb, > > + struct intel_atomic_state *state, > > + struct intel_crtc *crtc); > > > > #endif /* __INTEL_FBC_H__ */ > > -- > > 2.43.0 > ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH v6 5/7] drm/i915/xe3: dirty rect support for FBC 2025-02-05 14:49 ` Govindapillai, Vinod @ 2025-02-05 15:45 ` Ville Syrjälä 2025-02-10 12:15 ` Govindapillai, Vinod 0 siblings, 1 reply; 28+ messages in thread From: Ville Syrjälä @ 2025-02-05 15:45 UTC (permalink / raw) To: Govindapillai, Vinod Cc: intel-xe@lists.freedesktop.org, Saarinen, Jani, Reddy Guddati, Santhosh, intel-gfx@lists.freedesktop.org, Syrjala, Ville On Wed, Feb 05, 2025 at 02:49:46PM +0000, Govindapillai, Vinod wrote: > So based on your comments on the previous patch and this one, let me conclude the changes to be done > here! > > 1. As part of the previous patch, we collect the fbc_dirty rect from the damage_helper call. Make > damage empty if the plane not visible. > > 2. Update the FBC dirty rect registes. This do two things > 2.1 Prepare the collected FBC dirty and copy it to the correct fbc_state - > intel_fbc_prepare_dirty_rect() > > 2.2 Write to the registers - intel_fbc_dirty_rect_update_noarm() > > 2.1 AT the beginning of the atomic_commit_tail() within the DSB block handling, calls > intel_fbc_prepare_dirty_rect() to populate fbc_state's fbc_dirty_rect structs > > In the intel_fbc_prepare_dirty_rect(), > iterate through each plane in the atomic_state > check the correct plane, pipe etc. Then, > > if (drm_rect_visible(damage_merged) > update fbc_state's fbc dirty rect > else > Make at it atleast one scan line and update the fbc_state's fbc_dirty rect > > 2.2 Then call intel_fbc_dirty_rect_update_noarm() form intel_plane_update_noarm() > And within in intel_fbc_dirty_rect_update_noarm() just update the FBC dirty registers with > the values from corresponding fbc_state->fbc_dirty > > > I think last time when we discussed, we decided keep that valid flag to track > intel_fbc_can_flip_nuke() case. So I guess that is not required anymore > > Regarding the async flip cases, I thought nothing specific need to be done for the fbc dirty rect. > Atleast the some the tests I tried were passing with dirty rect enabled. > > I will add the locks in these new functions. > > BR > Vinod > > > On Wed, 2025-02-05 at 15:31 +0200, Ville Syrjälä wrote: > > On Thu, Jan 30, 2025 at 11:00:24PM +0200, Vinod Govindapillai wrote: > > > Dirty rectangle feature allows FBC to recompress a subsection > > > of a frame. When this feature is enabled, display will read > > > the scan lines between dirty rectangle start line and dirty > > > rectangle end line in subsequent frames. > > > > > > Use the merged damage clip stored in the plane state to > > > configure the FBC dirty rect areas. > > > > > > v2: - Move dirty rect handling to fbc state (Ville) > > > > > > v3: - Use intel_fbc_dirty_rect_update_noarm (Ville) > > > - Split plane damage collection and dirty rect preparation > > > - Handle case where dirty rect fall outside the visible region > > > > > > v4: - A state variable to check if we need to update dirty rect > > > registers in case intel_fbc_can_flip_nuke() (Ville) > > > > > > Bspec: 68881, 71675, 73424 > > > Signed-off-by: Vinod Govindapillai <vinod.govindapillai@intel.com> > > > --- > > > drivers/gpu/drm/i915/display/intel_display.c | 7 + > > > drivers/gpu/drm/i915/display/intel_fbc.c | 132 +++++++++++++++++++ > > > drivers/gpu/drm/i915/display/intel_fbc.h | 6 + > > > 3 files changed, 145 insertions(+) > > > > > > diff --git a/drivers/gpu/drm/i915/display/intel_display.c > > > b/drivers/gpu/drm/i915/display/intel_display.c > > > index 7d68d652c1bc..33277f892279 100644 > > > --- a/drivers/gpu/drm/i915/display/intel_display.c > > > +++ b/drivers/gpu/drm/i915/display/intel_display.c > > > @@ -7263,6 +7263,8 @@ static void intel_update_crtc(struct intel_atomic_state *state, > > > > > > commit_pipe_pre_planes(state, crtc); > > > > > > + intel_fbc_dirty_rect_update_noarm(NULL, state, crtc); > > > + > > > > That is not the right place for _noarm() stuff. > > > > Hmm, maybe we should just do this as part of intel_plane_update_noarm()? > > How does the dirty rect interact with async flips? > > Ok. > > I thought no need to handle anything specific to dirty_rect in case of async flips. > Atleast the the tests that I tried were ok! > The question is whether async flip: - results in full nuke or does it use the dirty rect? - if it uses the dirty rect does that mean the new dirty rect (*) takes effect alongside the the async flip or is it still using a previously latched dirty rect? (*) ie. one that was written into the register just before the surface register write, without there being a start of vblank in between the two writes Should be easy to confirm with something like: 1. set up a framebuffer with some color 2. scan out from said framebuffer 3. write the dirty rect register with some small area of the screen 4. write SURF to trigger a sync flip 5. wait for vblank 6. rewrite the fb with some other color 7. set the async flip bit on PLANE_CTL 8. read the frame counter 9. write the dirty rect register with some other small area 10. write SURF to trigger an async flip 11. re-read frame counter and confirm it is still the same value as in step 8. 12. observe visually which area of the screen changed That should at least tell us whether the new dirty rect gets latched due to an async flip or not, and whether we get a full nuke or not. And if the new dirty rect does get latched I suppose we can then rinse an repeat this with a full screen dirty rectangle, and then we should be able to tell whether the dirty rect gets latched alongside SURF during the async flip (tearing should be visible), or if it gets delayed until the next vblank (no tearing should be visible, assuming the entire fb did get compressed, which should hopefully be the case for a solid color fb). > > > > intel_crtc_planes_update_arm(NULL, state, crtc); > > > > > > commit_pipe_post_planes(state, crtc); > > > @@ -7723,6 +7725,8 @@ static void intel_atomic_dsb_finish(struct intel_atomic_state *state, > > > new_crtc_state); > > > intel_crtc_planes_update_noarm(new_crtc_state->dsb_commit, > > > state, crtc); > > > + intel_fbc_dirty_rect_update_noarm(new_crtc_state->dsb_commit, > > > + state, crtc); > > > > > > intel_dsb_vblank_evade(state, new_crtc_state->dsb_commit); > > > > > > @@ -7769,6 +7773,9 @@ static void intel_atomic_commit_tail(struct intel_atomic_state *state) > > > > > > intel_atomic_prepare_plane_clear_colors(state); > > > > > > + for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) > > > + intel_fbc_prepare_dirty_rect(state, crtc); > > > + > > > for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) > > > intel_atomic_dsb_finish(state, crtc); > > > > > > diff --git a/drivers/gpu/drm/i915/display/intel_fbc.c b/drivers/gpu/drm/i915/display/intel_fbc.c > > > index df05904bac8a..24736c7a79a6 100644 > > > --- a/drivers/gpu/drm/i915/display/intel_fbc.c > > > +++ b/drivers/gpu/drm/i915/display/intel_fbc.c > > > @@ -88,6 +88,10 @@ struct intel_fbc_state { > > > u16 override_cfb_stride; > > > u16 interval; > > > s8 fence_id; > > > + struct { > > > + struct drm_rect rect; > > > + bool valid; > > > + } fbc_dirty_rect; > > > }; > > > > > > struct intel_fbc { > > > @@ -527,6 +531,9 @@ static void ilk_fbc_deactivate(struct intel_fbc *fbc) > > > struct intel_display *display = fbc->display; > > > u32 dpfc_ctl; > > > > > > + if (HAS_FBC_DIRTY_RECT(display)) > > > + intel_de_write(display, XE3_FBC_DIRTY_CTL(fbc->id), 0); > > > + > > > /* Disable compression */ > > > dpfc_ctl = intel_de_read(display, ILK_DPFC_CONTROL(fbc->id)); > > > if (dpfc_ctl & DPFC_CTL_EN) { > > > @@ -670,6 +677,10 @@ static void ivb_fbc_activate(struct intel_fbc *fbc) > > > if (DISPLAY_VER(display) >= 20) > > > intel_de_write(display, ILK_DPFC_CONTROL(fbc->id), dpfc_ctl); > > > > > > + if (HAS_FBC_DIRTY_RECT(display)) > > > + intel_de_write(display, XE3_FBC_DIRTY_CTL(fbc->id), > > > + FBC_DIRTY_RECT_EN); > > > + > > > intel_de_write(display, ILK_DPFC_CONTROL(fbc->id), > > > DPFC_CTL_EN | dpfc_ctl); > > > } > > > @@ -1203,6 +1214,127 @@ static bool tiling_is_valid(const struct intel_plane_state *plane_state) > > > return i8xx_fbc_tiling_valid(plane_state); > > > } > > > > > > +static bool intel_fbc_can_flip_nuke(struct intel_atomic_state *state, > > > + struct intel_crtc *crtc, > > > + struct intel_plane *plane); > > > > You should put the code into a place that doesn't need this extra > > declaration. > > > > > + > > > +static void > > > +intel_fbc_dirty_rect_update(struct intel_dsb *dsb, struct intel_plane *plane) > > > +{ > > > + struct intel_display *display = to_intel_display(plane); > > > + struct intel_fbc *fbc = plane->fbc; > > > + struct intel_fbc_state *fbc_state = &fbc->state; > > > + struct drm_rect *fbc_dirty_rect = &fbc_state->fbc_dirty_rect.rect; > > > + > > > + if (fbc_state->plane != plane) > > > + return; > > > + > > > + if (!fbc_state->fbc_dirty_rect.valid) > > > + return; > > > > I think that extra flag can be thrown out and you can just > > check if the rect is visible here. > > > + > > > + intel_de_write_dsb(display, dsb, XE3_FBC_DIRTY_RECT(fbc->id), > > > + FBC_DIRTY_RECT_START_LINE(fbc_dirty_rect->y1) | > > > + FBC_DIRTY_RECT_END_LINE(fbc_dirty_rect->y2)); > > > + > > > + fbc_state->fbc_dirty_rect.valid = false; > > > > Why? > > > > > +} > > > + > > > +void > > > +intel_fbc_dirty_rect_update_noarm(struct intel_dsb *dsb, > > > + struct intel_atomic_state *state, > > > + struct intel_crtc *crtc) > > > +{ > > > + struct intel_display *display = to_intel_display(state); > > > + struct intel_plane_state *plane_state; > > > > const, although it seems to me we can just rely on the rect being valid > > or not and then the plane visiblility is also already covered. > > > > > + struct intel_plane *plane; > > > + int i; > > > + > > > + if (!HAS_FBC_DIRTY_RECT(display)) > > > + return; > > > + > > > + for_each_new_intel_plane_in_state(state, plane, plane_state, i) { > > > + struct intel_fbc *fbc = plane->fbc; > > > + > > > + if (!fbc || plane->pipe != crtc->pipe) > > > + continue; > > > + > > > + if (!plane_state->uapi.visible) > > > + continue; > > > > That check would also disappear. > > > > This does need to check if the plane is the one using FBC > > currently. Oh, I see you put that check inside > > intel_fbc_dirty_rect_update(). I think the check belongs > > here because that is how we do it everwhere else. > > > > I was pondering if we need to keep this lockless or not. > > I guess we don't since we are doing it from the noarm() > > section (assuming we're not planing to implement mailbox > > flips tomorrow). So for now I think we can just do the proper > > locking here too. If we do need to make this lockless in > > then we need to explain what makes it safe/correct. > > > > > + > > > + intel_fbc_dirty_rect_update(dsb, plane); > > > + } > > > +} > > > + > > > +static void > > > +validate_and_clip_dirty_rect(struct intel_plane_state *plane_state, > > > + struct drm_rect *dirty_rect) > > > +{ > > > + int y_offset = plane_state->view.color_plane[0].y; > > > + int plane_height = drm_rect_height(&plane_state->uapi.src) >> 16; > > > + int max_endline = y_offset + plane_height - 1; > > > + > > > + dirty_rect->y1 = clamp(dirty_rect->y1, y_offset, max_endline); > > > + dirty_rect->y2 = clamp(dirty_rect->y2, dirty_rect->y1, max_endline); > > > +} > > > > This is not needed. > > > > > + > > > +static void > > > +__intel_fbc_prepare_dirty_rect(struct intel_plane *plane, > > > + struct intel_plane_state *plane_state, > > > + bool fbc_dirty_rect_valid) > > > +{ > > > + struct intel_fbc_state *fbc_state = &plane->fbc->state; > > > + struct drm_rect *fbc_dirty_rect = &fbc_state->fbc_dirty_rect.rect; > > > + struct drm_rect *damage_merged = &plane_state->damage_merged; > > > + int y_offset = plane_state->view.color_plane[0].y; > > > + > > > + fbc_state->fbc_dirty_rect.valid = fbc_dirty_rect_valid; > > > + > > > + if (drm_rect_visible(damage_merged)) { > > > + fbc_dirty_rect->y1 = damage_merged->y1; > > > + fbc_dirty_rect->y2 = damage_merged->y2; > > > + } else { > > > + /* If not visible, we need to set one single line */ > > > + fbc_dirty_rect->y1 = y_offset; > > > + fbc_dirty_rect->y2 = y_offset; > > > + } > > > + fbc_dirty_rect->x1 = damage_merged->x1; > > > + fbc_dirty_rect->x2 = damage_merged->x2; > > > + > > > + validate_and_clip_dirty_rect(plane_state, fbc_dirty_rect); > > > +} > > > + > > > +void > > > +intel_fbc_prepare_dirty_rect(struct intel_atomic_state *state, > > > + struct intel_crtc *crtc) > > > +{ > > > + struct intel_display *display = to_intel_display(state); > > > + struct intel_plane_state *plane_state; > > > + struct intel_plane *plane; > > > + int i; > > > + > > > + if (!HAS_FBC_DIRTY_RECT(display)) > > > + return; > > > + > > > + for_each_new_intel_plane_in_state(state, plane, plane_state, i) { > > > + struct intel_fbc *fbc = plane->fbc; > > > + > > > + if (!fbc || plane->pipe != crtc->pipe) > > > + continue; > > > + > > > + if (!fbc->state.plane) > > > + continue; > > > > fbc->state.plane != plane > > > > Also needs locking. > > > > > + > > > + /* If plane not visible, dirty rect might have invalid coordinates */ > > > + if (!plane_state->uapi.visible) > > > + continue; > > > > Seems like a redundant check. > > > > > + > > > + __intel_fbc_prepare_dirty_rect(plane, plane_state, > > > + intel_fbc_can_flip_nuke(state, > > > + crtc, > > > + plane)); > > > + } > > > +} > > > + > > > static void intel_fbc_update_state(struct intel_atomic_state *state, > > > struct intel_crtc *crtc, > > > struct intel_plane *plane) > > > diff --git a/drivers/gpu/drm/i915/display/intel_fbc.h b/drivers/gpu/drm/i915/display/intel_fbc.h > > > index ceae55458e14..8f1b11c6f4d2 100644 > > > --- a/drivers/gpu/drm/i915/display/intel_fbc.h > > > +++ b/drivers/gpu/drm/i915/display/intel_fbc.h > > > @@ -14,6 +14,7 @@ struct intel_atomic_state; > > > struct intel_crtc; > > > struct intel_crtc_state; > > > struct intel_display; > > > +struct intel_dsb; > > > struct intel_fbc; > > > struct intel_plane; > > > struct intel_plane_state; > > > @@ -48,5 +49,10 @@ void intel_fbc_handle_fifo_underrun_irq(struct intel_display *display); > > > void intel_fbc_reset_underrun(struct intel_display *display); > > > void intel_fbc_crtc_debugfs_add(struct intel_crtc *crtc); > > > void intel_fbc_debugfs_register(struct intel_display *display); > > > +void intel_fbc_prepare_dirty_rect(struct intel_atomic_state *state, > > > + struct intel_crtc *crtc); > > > +void intel_fbc_dirty_rect_update_noarm(struct intel_dsb *dsb, > > > + struct intel_atomic_state *state, > > > + struct intel_crtc *crtc); > > > > > > #endif /* __INTEL_FBC_H__ */ > > > -- > > > 2.43.0 > > > -- Ville Syrjälä Intel ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH v6 5/7] drm/i915/xe3: dirty rect support for FBC 2025-02-05 15:45 ` Ville Syrjälä @ 2025-02-10 12:15 ` Govindapillai, Vinod 2025-02-10 21:49 ` Govindapillai, Vinod 0 siblings, 1 reply; 28+ messages in thread From: Govindapillai, Vinod @ 2025-02-10 12:15 UTC (permalink / raw) To: ville.syrjala@linux.intel.com Cc: intel-xe@lists.freedesktop.org, Saarinen, Jani, Reddy Guddati, Santhosh, intel-gfx@lists.freedesktop.org, Syrjala, Ville Hi Ville, I need to check the async flip tests for dirty rect cases. But could you please clarify some of your comments before i send another version.. On Wed, 2025-02-05 at 17:45 +0200, Ville Syrjälä wrote: > On Wed, Feb 05, 2025 at 02:49:46PM +0000, Govindapillai, Vinod wrote: > > So based on your comments on the previous patch and this one, let me conclude the changes to be > > done > > here! > > > > 1. As part of the previous patch, we collect the fbc_dirty rect from the damage_helper call. > > Make > > damage empty if the plane not visible. > > > > 2. Update the FBC dirty rect registes. This do two things > > 2.1 Prepare the collected FBC dirty and copy it to the correct fbc_state - > > > > intel_fbc_prepare_dirty_rect() > > > > 2.2 Write to the registers - intel_fbc_dirty_rect_update_noarm() > > > > 2.1 AT the beginning of the atomic_commit_tail() within the DSB block handling, calls > > intel_fbc_prepare_dirty_rect() to populate fbc_state's fbc_dirty_rect structs > > > > In the intel_fbc_prepare_dirty_rect(), > > iterate through each plane in the atomic_state > > check the correct plane, pipe etc. Then, > > > > if (drm_rect_visible(damage_merged) > > update fbc_state's fbc dirty rect > > else > > Make at it atleast one scan line and update the fbc_state's fbc_dirty rect > > > > 2.2 Then call intel_fbc_dirty_rect_update_noarm() form intel_plane_update_noarm() > > And within in intel_fbc_dirty_rect_update_noarm() just update the FBC dirty registers > > with > > the values from corresponding fbc_state->fbc_dirty > > > > > > I think last time when we discussed, we decided keep that valid flag to track > > intel_fbc_can_flip_nuke() case. So I guess that is not required anymore > > > > Regarding the async flip cases, I thought nothing specific need to be done for the fbc dirty > > rect. > > Atleast the some the tests I tried were passing with dirty rect enabled. > > > > I will add the locks in these new functions. > > > > BR > > Vinod > > > > > > On Wed, 2025-02-05 at 15:31 +0200, Ville Syrjälä wrote: > > > On Thu, Jan 30, 2025 at 11:00:24PM +0200, Vinod Govindapillai wrote: > > > > Dirty rectangle feature allows FBC to recompress a subsection > > > > of a frame. When this feature is enabled, display will read > > > > the scan lines between dirty rectangle start line and dirty > > > > rectangle end line in subsequent frames. > > > > > > > > Use the merged damage clip stored in the plane state to > > > > configure the FBC dirty rect areas. > > > > > > > > v2: - Move dirty rect handling to fbc state (Ville) > > > > > > > > v3: - Use intel_fbc_dirty_rect_update_noarm (Ville) > > > > - Split plane damage collection and dirty rect preparation > > > > - Handle case where dirty rect fall outside the visible region > > > > > > > > v4: - A state variable to check if we need to update dirty rect > > > > registers in case intel_fbc_can_flip_nuke() (Ville) > > > > > > > > Bspec: 68881, 71675, 73424 > > > > Signed-off-by: Vinod Govindapillai <vinod.govindapillai@intel.com> > > > > --- > > > > drivers/gpu/drm/i915/display/intel_display.c | 7 + > > > > drivers/gpu/drm/i915/display/intel_fbc.c | 132 +++++++++++++++++++ > > > > drivers/gpu/drm/i915/display/intel_fbc.h | 6 + > > > > 3 files changed, 145 insertions(+) > > > > > > > > diff --git a/drivers/gpu/drm/i915/display/intel_display.c > > > > b/drivers/gpu/drm/i915/display/intel_display.c > > > > index 7d68d652c1bc..33277f892279 100644 > > > > --- a/drivers/gpu/drm/i915/display/intel_display.c > > > > +++ b/drivers/gpu/drm/i915/display/intel_display.c > > > > @@ -7263,6 +7263,8 @@ static void intel_update_crtc(struct intel_atomic_state *state, > > > > > > > > commit_pipe_pre_planes(state, crtc); > > > > > > > > + intel_fbc_dirty_rect_update_noarm(NULL, state, crtc); > > > > + > > > > > > That is not the right place for _noarm() stuff. > > > > > > Hmm, maybe we should just do this as part of intel_plane_update_noarm()? > > > How does the dirty rect interact with async flips? > > > > Ok. > > > > I thought no need to handle anything specific to dirty_rect in case of async flips. > > Atleast the the tests that I tried were ok! > > > > The question is whether async flip: > - results in full nuke or does it use the dirty rect? > - if it uses the dirty rect does that mean the new > dirty rect (*) takes effect alongside the the async flip > or is it still using a previously latched dirty rect? > > (*) ie. one that was written into the register just before > the surface register write, without there being a start > of vblank in between the two writes > > Should be easy to confirm with something like: > 1. set up a framebuffer with some color > 2. scan out from said framebuffer > 3. write the dirty rect register with some small area of the screen > 4. write SURF to trigger a sync flip > 5. wait for vblank > 6. rewrite the fb with some other color > 7. set the async flip bit on PLANE_CTL > 8. read the frame counter > 9. write the dirty rect register with some other small area > 10. write SURF to trigger an async flip > 11. re-read frame counter and confirm it is still the same value > as in step 8. > 12. observe visually which area of the screen changed > > That should at least tell us whether the new dirty rect gets latched due > to an async flip or not, and whether we get a full nuke or not. > > And if the new dirty rect does get latched I suppose we can then > rinse an repeat this with a full screen dirty rectangle, and then > we should be able to tell whether the dirty rect gets latched alongside > SURF during the async flip (tearing should be visible), or if it gets > delayed until the next vblank (no tearing should be visible, assuming > the entire fb did get compressed, which should hopefully be the case > for a solid color fb). > > > > > > > intel_crtc_planes_update_arm(NULL, state, crtc); > > > > > > > > commit_pipe_post_planes(state, crtc); > > > > @@ -7723,6 +7725,8 @@ static void intel_atomic_dsb_finish(struct intel_atomic_state *state, > > > > new_crtc_state); > > > > intel_crtc_planes_update_noarm(new_crtc_state->dsb_commit, > > > > state, crtc); > > > > + intel_fbc_dirty_rect_update_noarm(new_crtc_state->dsb_commit, > > > > + state, crtc); > > > > > > > > intel_dsb_vblank_evade(state, new_crtc_state->dsb_commit); > > > > > > > > @@ -7769,6 +7773,9 @@ static void intel_atomic_commit_tail(struct intel_atomic_state *state) > > > > > > > > intel_atomic_prepare_plane_clear_colors(state); > > > > > > > > + for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) > > > > + intel_fbc_prepare_dirty_rect(state, crtc); > > > > + > > > > for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) > > > > intel_atomic_dsb_finish(state, crtc); > > > > > > > > diff --git a/drivers/gpu/drm/i915/display/intel_fbc.c > > > > b/drivers/gpu/drm/i915/display/intel_fbc.c > > > > index df05904bac8a..24736c7a79a6 100644 > > > > --- a/drivers/gpu/drm/i915/display/intel_fbc.c > > > > +++ b/drivers/gpu/drm/i915/display/intel_fbc.c > > > > @@ -88,6 +88,10 @@ struct intel_fbc_state { > > > > u16 override_cfb_stride; > > > > u16 interval; > > > > s8 fence_id; > > > > + struct { > > > > + struct drm_rect rect; > > > > + bool valid; > > > > + } fbc_dirty_rect; > > > > }; > > > > > > > > struct intel_fbc { > > > > @@ -527,6 +531,9 @@ static void ilk_fbc_deactivate(struct intel_fbc *fbc) > > > > struct intel_display *display = fbc->display; > > > > u32 dpfc_ctl; > > > > > > > > + if (HAS_FBC_DIRTY_RECT(display)) > > > > + intel_de_write(display, XE3_FBC_DIRTY_CTL(fbc->id), 0); > > > > + > > > > /* Disable compression */ > > > > dpfc_ctl = intel_de_read(display, ILK_DPFC_CONTROL(fbc->id)); > > > > if (dpfc_ctl & DPFC_CTL_EN) { > > > > @@ -670,6 +677,10 @@ static void ivb_fbc_activate(struct intel_fbc *fbc) > > > > if (DISPLAY_VER(display) >= 20) > > > > intel_de_write(display, ILK_DPFC_CONTROL(fbc->id), dpfc_ctl); > > > > > > > > + if (HAS_FBC_DIRTY_RECT(display)) > > > > + intel_de_write(display, XE3_FBC_DIRTY_CTL(fbc->id), > > > > + FBC_DIRTY_RECT_EN); > > > > + > > > > intel_de_write(display, ILK_DPFC_CONTROL(fbc->id), > > > > DPFC_CTL_EN | dpfc_ctl); > > > > } > > > > @@ -1203,6 +1214,127 @@ static bool tiling_is_valid(const struct intel_plane_state > > > > *plane_state) > > > > return i8xx_fbc_tiling_valid(plane_state); > > > > } > > > > > > > > +static bool intel_fbc_can_flip_nuke(struct intel_atomic_state *state, > > > > + struct intel_crtc *crtc, > > > > + struct intel_plane *plane); > > > > > > You should put the code into a place that doesn't need this extra > > > declaration. > > > > > > > + > > > > +static void > > > > +intel_fbc_dirty_rect_update(struct intel_dsb *dsb, struct intel_plane *plane) > > > > +{ > > > > + struct intel_display *display = to_intel_display(plane); > > > > + struct intel_fbc *fbc = plane->fbc; > > > > + struct intel_fbc_state *fbc_state = &fbc->state; > > > > + struct drm_rect *fbc_dirty_rect = &fbc_state->fbc_dirty_rect.rect; > > > > + > > > > + if (fbc_state->plane != plane) > > > > + return; > > > > + > > > > + if (!fbc_state->fbc_dirty_rect.valid) > > > > + return; > > > > > > I think that extra flag can be thrown out and you can just > > > check if the rect is visible here. HAS recommends to program one line in case damage area rect is not visible! So not sure how can we use rect is visible here. Earlier in our discussions, you mentioned we might need to check "intel_fbc_can_flip_nuke()" before updating the dirty_rect. So that extra flag was mainly tracking intel_fbc_can_flip_nuke()! I see mainly two cases where "intel_fbc_can_flip_nuke" can have a impact - at the time of enabling FBC and disabling FBC. In case of enabling FBC, HW ignores what is programmed in dirty rect registers for the first frame after FBC is enabled. It fetches the entire frame. And in case of Disabling FBC, anyway dirty rect registers will be ignored as FBC will be disabled. In intel_fbc_prepare_dirty_rect() which is called from commit tail.. if (fbc && plane->pipe == crtc->pipe && fbc->state.plane != plane) { fbc_dirty_rect->y1 = drm_rect_visible(damage) ? damage->y1 : y_offset; fbc_dirty_rect->y2 = drm_rect_visible(damage) ? damage->y2 : y_offset; fbc_dirty_rect->x1 = damage->x1; fbc_dirty_rect->x2 = damage->x2; } And in intel_fbc_dirty_rect_update_noarm() which is called from intel_plane_update_noarm() if (fbc && fbc->state.plane != plane) { intel_de_write_dsb(display, dsb, XE3_FBC_DIRTY_RECT(fbc->id), FBC_DIRTY_RECT_START_LINE(fbc_dirty_rect->y1) | FBC_DIRTY_RECT_END_LINE(fbc_dirty_rect->y2)); } > > > > + > > > > + intel_de_write_dsb(display, dsb, XE3_FBC_DIRTY_RECT(fbc->id), > > > > + FBC_DIRTY_RECT_START_LINE(fbc_dirty_rect->y1) | > > > > + FBC_DIRTY_RECT_END_LINE(fbc_dirty_rect->y2)); > > > > + > > > > + fbc_state->fbc_dirty_rect.valid = false; > > > > > > Why? > > > > > > > +} > > > > + > > > > +void > > > > +intel_fbc_dirty_rect_update_noarm(struct intel_dsb *dsb, > > > > + struct intel_atomic_state *state, > > > > + struct intel_crtc *crtc) > > > > +{ > > > > + struct intel_display *display = to_intel_display(state); > > > > + struct intel_plane_state *plane_state; > > > > > > const, although it seems to me we can just rely on the rect being valid > > > or not and then the plane visiblility is also already covered. > > > > > > > + struct intel_plane *plane; > > > > + int i; > > > > + > > > > + if (!HAS_FBC_DIRTY_RECT(display)) > > > > + return; > > > > + > > > > + for_each_new_intel_plane_in_state(state, plane, plane_state, i) { > > > > + struct intel_fbc *fbc = plane->fbc; > > > > + > > > > + if (!fbc || plane->pipe != crtc->pipe) > > > > + continue; > > > > + > > > > + if (!plane_state->uapi.visible) > > > > + continue; > > > > > > That check would also disappear. > > > > > > This does need to check if the plane is the one using FBC > > > currently. Oh, I see you put that check inside > > > intel_fbc_dirty_rect_update(). I think the check belongs > > > here because that is how we do it everwhere else. > > > > > > I was pondering if we need to keep this lockless or not. > > > I guess we don't since we are doing it from the noarm() > > > section (assuming we're not planing to implement mailbox > > > flips tomorrow). So for now I think we can just do the proper > > > locking here too. If we do need to make this lockless in > > > then we need to explain what makes it safe/correct. > > > > > > > + > > > > + intel_fbc_dirty_rect_update(dsb, plane); > > > > + } > > > > +} > > > > + > > > > +static void > > > > +validate_and_clip_dirty_rect(struct intel_plane_state *plane_state, > > > > + struct drm_rect *dirty_rect) > > > > +{ > > > > + int y_offset = plane_state->view.color_plane[0].y; > > > > + int plane_height = drm_rect_height(&plane_state->uapi.src) >> 16; > > > > + int max_endline = y_offset + plane_height - 1; > > > > + > > > > + dirty_rect->y1 = clamp(dirty_rect->y1, y_offset, max_endline); > > > > + dirty_rect->y2 = clamp(dirty_rect->y2, dirty_rect->y1, max_endline); > > > > +} > > > > > > This is not needed. But I noticed that from one of the test cases created, if the damage area set as (0, 0) (plane_width, plane_height), without that clipping, we will set dirty_rect->y1 = 0 and dirty_rect->y2 = height. With this screen is not updated correctly. To get this working correctly I had to make dirty_rect->y2 as plane_height -1. Wonder if I am I missing anything here? BR Vinod > > > > > > > + > > > > +static void > > > > +__intel_fbc_prepare_dirty_rect(struct intel_plane *plane, > > > > + struct intel_plane_state *plane_state, > > > > + bool fbc_dirty_rect_valid) > > > > +{ > > > > + struct intel_fbc_state *fbc_state = &plane->fbc->state; > > > > + struct drm_rect *fbc_dirty_rect = &fbc_state->fbc_dirty_rect.rect; > > > > + struct drm_rect *damage_merged = &plane_state->damage_merged; > > > > + int y_offset = plane_state->view.color_plane[0].y; > > > > + > > > > + fbc_state->fbc_dirty_rect.valid = fbc_dirty_rect_valid; > > > > + > > > > + if (drm_rect_visible(damage_merged)) { > > > > + fbc_dirty_rect->y1 = damage_merged->y1; > > > > + fbc_dirty_rect->y2 = damage_merged->y2; > > > > + } else { > > > > + /* If not visible, we need to set one single line */ > > > > + fbc_dirty_rect->y1 = y_offset; > > > > + fbc_dirty_rect->y2 = y_offset; > > > > + } > > > > + fbc_dirty_rect->x1 = damage_merged->x1; > > > > + fbc_dirty_rect->x2 = damage_merged->x2; > > > > + > > > > + validate_and_clip_dirty_rect(plane_state, fbc_dirty_rect); > > > > +} > > > > + > > > > +void > > > > +intel_fbc_prepare_dirty_rect(struct intel_atomic_state *state, > > > > + struct intel_crtc *crtc) > > > > +{ > > > > + struct intel_display *display = to_intel_display(state); > > > > + struct intel_plane_state *plane_state; > > > > + struct intel_plane *plane; > > > > + int i; > > > > + > > > > + if (!HAS_FBC_DIRTY_RECT(display)) > > > > + return; > > > > + > > > > + for_each_new_intel_plane_in_state(state, plane, plane_state, i) { > > > > + struct intel_fbc *fbc = plane->fbc; > > > > + > > > > + if (!fbc || plane->pipe != crtc->pipe) > > > > + continue; > > > > + > > > > + if (!fbc->state.plane) > > > > + continue; > > > > > > fbc->state.plane != plane > > > > > > Also needs locking. > > > > > > > + > > > > + /* If plane not visible, dirty rect might have invalid coordinates */ > > > > + if (!plane_state->uapi.visible) > > > > + continue; > > > > > > Seems like a redundant check. > > > > > > > + > > > > + __intel_fbc_prepare_dirty_rect(plane, plane_state, > > > > + intel_fbc_can_flip_nuke(state, > > > > + crtc, > > > > + plane)); > > > > + } > > > > +} > > > > + > > > > static void intel_fbc_update_state(struct intel_atomic_state *state, > > > > struct intel_crtc *crtc, > > > > struct intel_plane *plane) > > > > diff --git a/drivers/gpu/drm/i915/display/intel_fbc.h > > > > b/drivers/gpu/drm/i915/display/intel_fbc.h > > > > index ceae55458e14..8f1b11c6f4d2 100644 > > > > --- a/drivers/gpu/drm/i915/display/intel_fbc.h > > > > +++ b/drivers/gpu/drm/i915/display/intel_fbc.h > > > > @@ -14,6 +14,7 @@ struct intel_atomic_state; > > > > struct intel_crtc; > > > > struct intel_crtc_state; > > > > struct intel_display; > > > > +struct intel_dsb; > > > > struct intel_fbc; > > > > struct intel_plane; > > > > struct intel_plane_state; > > > > @@ -48,5 +49,10 @@ void intel_fbc_handle_fifo_underrun_irq(struct intel_display *display); > > > > void intel_fbc_reset_underrun(struct intel_display *display); > > > > void intel_fbc_crtc_debugfs_add(struct intel_crtc *crtc); > > > > void intel_fbc_debugfs_register(struct intel_display *display); > > > > +void intel_fbc_prepare_dirty_rect(struct intel_atomic_state *state, > > > > + struct intel_crtc *crtc); > > > > +void intel_fbc_dirty_rect_update_noarm(struct intel_dsb *dsb, > > > > + struct intel_atomic_state *state, > > > > + struct intel_crtc *crtc); > > > > > > > > #endif /* __INTEL_FBC_H__ */ > > > > -- > > > > 2.43.0 > > > > > > ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH v6 5/7] drm/i915/xe3: dirty rect support for FBC 2025-02-10 12:15 ` Govindapillai, Vinod @ 2025-02-10 21:49 ` Govindapillai, Vinod 0 siblings, 0 replies; 28+ messages in thread From: Govindapillai, Vinod @ 2025-02-10 21:49 UTC (permalink / raw) To: ville.syrjala@linux.intel.com Cc: intel-xe@lists.freedesktop.org, Saarinen, Jani, Reddy Guddati, Santhosh, intel-gfx@lists.freedesktop.org, Syrjala, Ville Hi Ville, Regarding the async_clip I was trying a new test case but noticed that it was nuking on asyn_flip. So I checked with HW folks, then confirmed that FBC will nuke on async_flip. Dirty rectangle only works with sync flip. He pointed out that in the bspec (I overlooked that aspect though!), "When the Dirty Rectangle Enable bit is set in the FBC_DIRTY_CTL register, and there is a *sync flip indication, display will read the scanlines between....." Well.. basically this is now confirmed from my trials as well. BR Vinod On Mon, 2025-02-10 at 14:15 +0200, Govindapillai, Vinod wrote: > Hi Ville, > > I need to check the async flip tests for dirty rect cases. > > But could you please clarify some of your comments before i send another version.. > > On Wed, 2025-02-05 at 17:45 +0200, Ville Syrjälä wrote: > > On Wed, Feb 05, 2025 at 02:49:46PM +0000, Govindapillai, Vinod wrote: > > > So based on your comments on the previous patch and this one, let me conclude the changes to > > > be > > > done > > > here! > > > > > > 1. As part of the previous patch, we collect the fbc_dirty rect from the damage_helper call. > > > Make > > > damage empty if the plane not visible. > > > > > > 2. Update the FBC dirty rect registes. This do two things > > > 2.1 Prepare the collected FBC dirty and copy it to the correct fbc_state - > > > > > > intel_fbc_prepare_dirty_rect() > > > > > > 2.2 Write to the registers - intel_fbc_dirty_rect_update_noarm() > > > > > > 2.1 AT the beginning of the atomic_commit_tail() within the DSB block handling, calls > > > intel_fbc_prepare_dirty_rect() to populate fbc_state's fbc_dirty_rect structs > > > > > > In the intel_fbc_prepare_dirty_rect(), > > > iterate through each plane in the atomic_state > > > check the correct plane, pipe etc. Then, > > > > > > if (drm_rect_visible(damage_merged) > > > update fbc_state's fbc dirty rect > > > else > > > Make at it atleast one scan line and update the fbc_state's fbc_dirty rect > > > > > > 2.2 Then call intel_fbc_dirty_rect_update_noarm() form intel_plane_update_noarm() > > > And within in intel_fbc_dirty_rect_update_noarm() just update the FBC dirty registers > > > with > > > the values from corresponding fbc_state->fbc_dirty > > > > > > > > > I think last time when we discussed, we decided keep that valid flag to track > > > intel_fbc_can_flip_nuke() case. So I guess that is not required anymore > > > > > > Regarding the async flip cases, I thought nothing specific need to be done for the fbc dirty > > > rect. > > > Atleast the some the tests I tried were passing with dirty rect enabled. > > > > > > I will add the locks in these new functions. > > > > > > BR > > > Vinod > > > > > > > > > On Wed, 2025-02-05 at 15:31 +0200, Ville Syrjälä wrote: > > > > On Thu, Jan 30, 2025 at 11:00:24PM +0200, Vinod Govindapillai wrote: > > > > > Dirty rectangle feature allows FBC to recompress a subsection > > > > > of a frame. When this feature is enabled, display will read > > > > > the scan lines between dirty rectangle start line and dirty > > > > > rectangle end line in subsequent frames. > > > > > > > > > > Use the merged damage clip stored in the plane state to > > > > > configure the FBC dirty rect areas. > > > > > > > > > > v2: - Move dirty rect handling to fbc state (Ville) > > > > > > > > > > v3: - Use intel_fbc_dirty_rect_update_noarm (Ville) > > > > > - Split plane damage collection and dirty rect preparation > > > > > - Handle case where dirty rect fall outside the visible region > > > > > > > > > > v4: - A state variable to check if we need to update dirty rect > > > > > registers in case intel_fbc_can_flip_nuke() (Ville) > > > > > > > > > > Bspec: 68881, 71675, 73424 > > > > > Signed-off-by: Vinod Govindapillai <vinod.govindapillai@intel.com> > > > > > --- > > > > > drivers/gpu/drm/i915/display/intel_display.c | 7 + > > > > > drivers/gpu/drm/i915/display/intel_fbc.c | 132 +++++++++++++++++++ > > > > > drivers/gpu/drm/i915/display/intel_fbc.h | 6 + > > > > > 3 files changed, 145 insertions(+) > > > > > > > > > > diff --git a/drivers/gpu/drm/i915/display/intel_display.c > > > > > b/drivers/gpu/drm/i915/display/intel_display.c > > > > > index 7d68d652c1bc..33277f892279 100644 > > > > > --- a/drivers/gpu/drm/i915/display/intel_display.c > > > > > +++ b/drivers/gpu/drm/i915/display/intel_display.c > > > > > @@ -7263,6 +7263,8 @@ static void intel_update_crtc(struct intel_atomic_state *state, > > > > > > > > > > commit_pipe_pre_planes(state, crtc); > > > > > > > > > > + intel_fbc_dirty_rect_update_noarm(NULL, state, crtc); > > > > > + > > > > > > > > That is not the right place for _noarm() stuff. > > > > > > > > Hmm, maybe we should just do this as part of intel_plane_update_noarm()? > > > > How does the dirty rect interact with async flips? > > > > > > Ok. > > > > > > I thought no need to handle anything specific to dirty_rect in case of async flips. > > > Atleast the the tests that I tried were ok! > > > > > > > The question is whether async flip: > > - results in full nuke or does it use the dirty rect? > > - if it uses the dirty rect does that mean the new > > dirty rect (*) takes effect alongside the the async flip > > or is it still using a previously latched dirty rect? > > > > (*) ie. one that was written into the register just before > > the surface register write, without there being a start > > of vblank in between the two writes > > > > Should be easy to confirm with something like: > > 1. set up a framebuffer with some color > > 2. scan out from said framebuffer > > 3. write the dirty rect register with some small area of the screen > > 4. write SURF to trigger a sync flip > > 5. wait for vblank > > 6. rewrite the fb with some other color > > 7. set the async flip bit on PLANE_CTL > > 8. read the frame counter > > 9. write the dirty rect register with some other small area > > 10. write SURF to trigger an async flip > > 11. re-read frame counter and confirm it is still the same value > > as in step 8. > > 12. observe visually which area of the screen changed > > > > That should at least tell us whether the new dirty rect gets latched due > > to an async flip or not, and whether we get a full nuke or not. > > > > And if the new dirty rect does get latched I suppose we can then > > rinse an repeat this with a full screen dirty rectangle, and then > > we should be able to tell whether the dirty rect gets latched alongside > > SURF during the async flip (tearing should be visible), or if it gets > > delayed until the next vblank (no tearing should be visible, assuming > > the entire fb did get compressed, which should hopefully be the case > > for a solid color fb). > > > > > > > > > > intel_crtc_planes_update_arm(NULL, state, crtc); > > > > > > > > > > commit_pipe_post_planes(state, crtc); > > > > > @@ -7723,6 +7725,8 @@ static void intel_atomic_dsb_finish(struct intel_atomic_state > > > > > *state, > > > > > new_crtc_state); > > > > > intel_crtc_planes_update_noarm(new_crtc_state->dsb_commit, > > > > > state, crtc); > > > > > + intel_fbc_dirty_rect_update_noarm(new_crtc_state->dsb_commit, > > > > > + state, crtc); > > > > > > > > > > intel_dsb_vblank_evade(state, new_crtc_state->dsb_commit); > > > > > > > > > > @@ -7769,6 +7773,9 @@ static void intel_atomic_commit_tail(struct intel_atomic_state > > > > > *state) > > > > > > > > > > intel_atomic_prepare_plane_clear_colors(state); > > > > > > > > > > + for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) > > > > > + intel_fbc_prepare_dirty_rect(state, crtc); > > > > > + > > > > > for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) > > > > > intel_atomic_dsb_finish(state, crtc); > > > > > > > > > > diff --git a/drivers/gpu/drm/i915/display/intel_fbc.c > > > > > b/drivers/gpu/drm/i915/display/intel_fbc.c > > > > > index df05904bac8a..24736c7a79a6 100644 > > > > > --- a/drivers/gpu/drm/i915/display/intel_fbc.c > > > > > +++ b/drivers/gpu/drm/i915/display/intel_fbc.c > > > > > @@ -88,6 +88,10 @@ struct intel_fbc_state { > > > > > u16 override_cfb_stride; > > > > > u16 interval; > > > > > s8 fence_id; > > > > > + struct { > > > > > + struct drm_rect rect; > > > > > + bool valid; > > > > > + } fbc_dirty_rect; > > > > > }; > > > > > > > > > > struct intel_fbc { > > > > > @@ -527,6 +531,9 @@ static void ilk_fbc_deactivate(struct intel_fbc *fbc) > > > > > struct intel_display *display = fbc->display; > > > > > u32 dpfc_ctl; > > > > > > > > > > + if (HAS_FBC_DIRTY_RECT(display)) > > > > > + intel_de_write(display, XE3_FBC_DIRTY_CTL(fbc->id), 0); > > > > > + > > > > > /* Disable compression */ > > > > > dpfc_ctl = intel_de_read(display, ILK_DPFC_CONTROL(fbc->id)); > > > > > if (dpfc_ctl & DPFC_CTL_EN) { > > > > > @@ -670,6 +677,10 @@ static void ivb_fbc_activate(struct intel_fbc *fbc) > > > > > if (DISPLAY_VER(display) >= 20) > > > > > intel_de_write(display, ILK_DPFC_CONTROL(fbc->id), dpfc_ctl); > > > > > > > > > > + if (HAS_FBC_DIRTY_RECT(display)) > > > > > + intel_de_write(display, XE3_FBC_DIRTY_CTL(fbc->id), > > > > > + FBC_DIRTY_RECT_EN); > > > > > + > > > > > intel_de_write(display, ILK_DPFC_CONTROL(fbc->id), > > > > > DPFC_CTL_EN | dpfc_ctl); > > > > > } > > > > > @@ -1203,6 +1214,127 @@ static bool tiling_is_valid(const struct intel_plane_state > > > > > *plane_state) > > > > > return i8xx_fbc_tiling_valid(plane_state); > > > > > } > > > > > > > > > > +static bool intel_fbc_can_flip_nuke(struct intel_atomic_state *state, > > > > > + struct intel_crtc *crtc, > > > > > + struct intel_plane *plane); > > > > > > > > You should put the code into a place that doesn't need this extra > > > > declaration. > > > > > > > > > + > > > > > +static void > > > > > +intel_fbc_dirty_rect_update(struct intel_dsb *dsb, struct intel_plane *plane) > > > > > +{ > > > > > + struct intel_display *display = to_intel_display(plane); > > > > > + struct intel_fbc *fbc = plane->fbc; > > > > > + struct intel_fbc_state *fbc_state = &fbc->state; > > > > > + struct drm_rect *fbc_dirty_rect = &fbc_state->fbc_dirty_rect.rect; > > > > > + > > > > > + if (fbc_state->plane != plane) > > > > > + return; > > > > > + > > > > > + if (!fbc_state->fbc_dirty_rect.valid) > > > > > + return; > > > > > > > > I think that extra flag can be thrown out and you can just > > > > check if the rect is visible here. > > HAS recommends to program one line in case damage area rect is not visible! So not sure how can we > use rect is visible here. > > Earlier in our discussions, you mentioned we might need to check "intel_fbc_can_flip_nuke()" > before > updating the dirty_rect. So that extra flag was mainly tracking intel_fbc_can_flip_nuke()! > > I see mainly two cases where "intel_fbc_can_flip_nuke" can have a impact - at the time of enabling > FBC and disabling FBC. In case of enabling FBC, HW ignores what is programmed in dirty rect > registers for the first frame after FBC is enabled. It fetches the entire frame. And in case of > Disabling FBC, anyway dirty rect registers will be ignored as FBC will be disabled. > > In intel_fbc_prepare_dirty_rect() which is called from commit tail.. > > if (fbc && plane->pipe == crtc->pipe && fbc->state.plane != plane) { > fbc_dirty_rect->y1 = drm_rect_visible(damage) ? damage->y1 : y_offset; > fbc_dirty_rect->y2 = drm_rect_visible(damage) ? damage->y2 : y_offset; > fbc_dirty_rect->x1 = damage->x1; > fbc_dirty_rect->x2 = damage->x2; > } > > And in intel_fbc_dirty_rect_update_noarm() which is called from intel_plane_update_noarm() > > if (fbc && fbc->state.plane != plane) { > intel_de_write_dsb(display, dsb, XE3_FBC_DIRTY_RECT(fbc->id), > FBC_DIRTY_RECT_START_LINE(fbc_dirty_rect->y1) | > FBC_DIRTY_RECT_END_LINE(fbc_dirty_rect->y2)); > } > > > > > > + > > > > > + intel_de_write_dsb(display, dsb, XE3_FBC_DIRTY_RECT(fbc->id), > > > > > + FBC_DIRTY_RECT_START_LINE(fbc_dirty_rect->y1) | > > > > > + FBC_DIRTY_RECT_END_LINE(fbc_dirty_rect->y2)); > > > > > + > > > > > + fbc_state->fbc_dirty_rect.valid = false; > > > > > > > > Why? > > > > > > > > > +} > > > > > + > > > > > +void > > > > > +intel_fbc_dirty_rect_update_noarm(struct intel_dsb *dsb, > > > > > + struct intel_atomic_state *state, > > > > > + struct intel_crtc *crtc) > > > > > +{ > > > > > + struct intel_display *display = to_intel_display(state); > > > > > + struct intel_plane_state *plane_state; > > > > > > > > const, although it seems to me we can just rely on the rect being valid > > > > or not and then the plane visiblility is also already covered. > > > > > > > > > + struct intel_plane *plane; > > > > > + int i; > > > > > + > > > > > + if (!HAS_FBC_DIRTY_RECT(display)) > > > > > + return; > > > > > + > > > > > + for_each_new_intel_plane_in_state(state, plane, plane_state, i) { > > > > > + struct intel_fbc *fbc = plane->fbc; > > > > > + > > > > > + if (!fbc || plane->pipe != crtc->pipe) > > > > > + continue; > > > > > + > > > > > + if (!plane_state->uapi.visible) > > > > > + continue; > > > > > > > > That check would also disappear. > > > > > > > > This does need to check if the plane is the one using FBC > > > > currently. Oh, I see you put that check inside > > > > intel_fbc_dirty_rect_update(). I think the check belongs > > > > here because that is how we do it everwhere else. > > > > > > > > I was pondering if we need to keep this lockless or not. > > > > I guess we don't since we are doing it from the noarm() > > > > section (assuming we're not planing to implement mailbox > > > > flips tomorrow). So for now I think we can just do the proper > > > > locking here too. If we do need to make this lockless in > > > > then we need to explain what makes it safe/correct. > > > > > > > > > + > > > > > + intel_fbc_dirty_rect_update(dsb, plane); > > > > > + } > > > > > +} > > > > > + > > > > > +static void > > > > > +validate_and_clip_dirty_rect(struct intel_plane_state *plane_state, > > > > > + struct drm_rect *dirty_rect) > > > > > +{ > > > > > + int y_offset = plane_state->view.color_plane[0].y; > > > > > + int plane_height = drm_rect_height(&plane_state->uapi.src) >> 16; > > > > > + int max_endline = y_offset + plane_height - 1; > > > > > + > > > > > + dirty_rect->y1 = clamp(dirty_rect->y1, y_offset, max_endline); > > > > > + dirty_rect->y2 = clamp(dirty_rect->y2, dirty_rect->y1, max_endline); > > > > > +} > > > > > > > > This is not needed. > > But I noticed that from one of the test cases created, if the damage area set as (0, 0) > (plane_width, plane_height), without that clipping, we will set > dirty_rect->y1 = 0 and dirty_rect->y2 = height. > With this screen is not updated correctly. > To get this working correctly I had to make dirty_rect->y2 as plane_height -1. > > Wonder if I am I missing anything here? > > BR > Vinod > > > > > > > > > > + > > > > > +static void > > > > > +__intel_fbc_prepare_dirty_rect(struct intel_plane *plane, > > > > > + struct intel_plane_state *plane_state, > > > > > + bool fbc_dirty_rect_valid) > > > > > +{ > > > > > + struct intel_fbc_state *fbc_state = &plane->fbc->state; > > > > > + struct drm_rect *fbc_dirty_rect = &fbc_state->fbc_dirty_rect.rect; > > > > > + struct drm_rect *damage_merged = &plane_state->damage_merged; > > > > > + int y_offset = plane_state->view.color_plane[0].y; > > > > > + > > > > > + fbc_state->fbc_dirty_rect.valid = fbc_dirty_rect_valid; > > > > > + > > > > > + if (drm_rect_visible(damage_merged)) { > > > > > + fbc_dirty_rect->y1 = damage_merged->y1; > > > > > + fbc_dirty_rect->y2 = damage_merged->y2; > > > > > + } else { > > > > > + /* If not visible, we need to set one single line */ > > > > > + fbc_dirty_rect->y1 = y_offset; > > > > > + fbc_dirty_rect->y2 = y_offset; > > > > > + } > > > > > + fbc_dirty_rect->x1 = damage_merged->x1; > > > > > + fbc_dirty_rect->x2 = damage_merged->x2; > > > > > + > > > > > + validate_and_clip_dirty_rect(plane_state, fbc_dirty_rect); > > > > > +} > > > > > + > > > > > +void > > > > > +intel_fbc_prepare_dirty_rect(struct intel_atomic_state *state, > > > > > + struct intel_crtc *crtc) > > > > > +{ > > > > > + struct intel_display *display = to_intel_display(state); > > > > > + struct intel_plane_state *plane_state; > > > > > + struct intel_plane *plane; > > > > > + int i; > > > > > + > > > > > + if (!HAS_FBC_DIRTY_RECT(display)) > > > > > + return; > > > > > + > > > > > + for_each_new_intel_plane_in_state(state, plane, plane_state, i) { > > > > > + struct intel_fbc *fbc = plane->fbc; > > > > > + > > > > > + if (!fbc || plane->pipe != crtc->pipe) > > > > > + continue; > > > > > + > > > > > + if (!fbc->state.plane) > > > > > + continue; > > > > > > > > fbc->state.plane != plane > > > > > > > > Also needs locking. > > > > > > > > > + > > > > > + /* If plane not visible, dirty rect might have invalid coordinates */ > > > > > + if (!plane_state->uapi.visible) > > > > > + continue; > > > > > > > > Seems like a redundant check. > > > > > > > > > + > > > > > + __intel_fbc_prepare_dirty_rect(plane, plane_state, > > > > > + intel_fbc_can_flip_nuke(state, > > > > > + crtc, > > > > > + plane)); > > > > > + } > > > > > +} > > > > > + > > > > > static void intel_fbc_update_state(struct intel_atomic_state *state, > > > > > struct intel_crtc *crtc, > > > > > struct intel_plane *plane) > > > > > diff --git a/drivers/gpu/drm/i915/display/intel_fbc.h > > > > > b/drivers/gpu/drm/i915/display/intel_fbc.h > > > > > index ceae55458e14..8f1b11c6f4d2 100644 > > > > > --- a/drivers/gpu/drm/i915/display/intel_fbc.h > > > > > +++ b/drivers/gpu/drm/i915/display/intel_fbc.h > > > > > @@ -14,6 +14,7 @@ struct intel_atomic_state; > > > > > struct intel_crtc; > > > > > struct intel_crtc_state; > > > > > struct intel_display; > > > > > +struct intel_dsb; > > > > > struct intel_fbc; > > > > > struct intel_plane; > > > > > struct intel_plane_state; > > > > > @@ -48,5 +49,10 @@ void intel_fbc_handle_fifo_underrun_irq(struct intel_display *display); > > > > > void intel_fbc_reset_underrun(struct intel_display *display); > > > > > void intel_fbc_crtc_debugfs_add(struct intel_crtc *crtc); > > > > > void intel_fbc_debugfs_register(struct intel_display *display); > > > > > +void intel_fbc_prepare_dirty_rect(struct intel_atomic_state *state, > > > > > + struct intel_crtc *crtc); > > > > > +void intel_fbc_dirty_rect_update_noarm(struct intel_dsb *dsb, > > > > > + struct intel_atomic_state *state, > > > > > + struct intel_crtc *crtc); > > > > > > > > > > #endif /* __INTEL_FBC_H__ */ > > > > > -- > > > > > 2.43.0 > > > > > > > > > > ^ permalink raw reply [flat|nested] 28+ messages in thread
* [PATCH v6 6/7] drm/i915/xe3: avoid calling fbc activate if fbc is active 2025-01-30 21:00 [PATCH v6 0/7] drm/i915/xe3: FBC Dirty rect feature support Vinod Govindapillai ` (4 preceding siblings ...) 2025-01-30 21:00 ` [PATCH v6 5/7] drm/i915/xe3: dirty rect support for FBC Vinod Govindapillai @ 2025-01-30 21:00 ` Vinod Govindapillai 2025-01-30 21:00 ` [PATCH v6 7/7] drm/i915/xe3: disable FBC if PSR2 selective fetch is enabled Vinod Govindapillai ` (5 subsequent siblings) 11 siblings, 0 replies; 28+ messages in thread From: Vinod Govindapillai @ 2025-01-30 21:00 UTC (permalink / raw) To: intel-gfx, intel-xe Cc: vinod.govindapillai, ville.syrjala, santhosh.reddy.guddati, jani.saarinen If FBC is already active, we don't need to call FBC activate routine again. This is more relevant in case of dirty rect support in FBC. Xe doesn't support legacy fences. Hence fence programming also not required as part of this fbc_hw_activate. Any FBC related register updates done after enabling the dirty rect support in xe3 will trigger nuke by FBC HW. So avoid calling fbc activate routine again if the FBC is already active. The front buffer rendering sequence will call intel_fbc_flush() and which will call intel_fbc_nuke() or intel_fbc_activate() based on FBC status explicitly and won't get impacted by this change. v2: use HAS_FBC_DIRTY_RECT() move this functionality within intel_fbc_activate() Signed-off-by: Vinod Govindapillai <vinod.govindapillai@intel.com> --- drivers/gpu/drm/i915/display/intel_fbc.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/drivers/gpu/drm/i915/display/intel_fbc.c b/drivers/gpu/drm/i915/display/intel_fbc.c index 24736c7a79a6..b17ee1797118 100644 --- a/drivers/gpu/drm/i915/display/intel_fbc.c +++ b/drivers/gpu/drm/i915/display/intel_fbc.c @@ -750,8 +750,19 @@ static void intel_fbc_nuke(struct intel_fbc *fbc) static void intel_fbc_activate(struct intel_fbc *fbc) { + struct intel_display *display = fbc->display; + lockdep_assert_held(&fbc->lock); + /* + * When dirty rectangle is enabled, any updates to FBC registers will + * trigger nuke. So avoid calling intel_fbc_activate if fbc is already + * active and for XE3 cases. Xe doesn't support legacy fences. So + * no need to update the fences as well. + */ + if (HAS_FBC_DIRTY_RECT(display) && fbc->active) + return; + intel_fbc_hw_activate(fbc); intel_fbc_nuke(fbc); -- 2.43.0 ^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH v6 7/7] drm/i915/xe3: disable FBC if PSR2 selective fetch is enabled 2025-01-30 21:00 [PATCH v6 0/7] drm/i915/xe3: FBC Dirty rect feature support Vinod Govindapillai ` (5 preceding siblings ...) 2025-01-30 21:00 ` [PATCH v6 6/7] drm/i915/xe3: avoid calling fbc activate if fbc is active Vinod Govindapillai @ 2025-01-30 21:00 ` Vinod Govindapillai 2025-02-05 9:58 ` Kandpal, Suraj 2025-01-30 22:00 ` ✗ Fi.CI.CHECKPATCH: warning for drm/i915/xe3: FBC Dirty rect feature support (rev7) Patchwork ` (4 subsequent siblings) 11 siblings, 1 reply; 28+ messages in thread From: Vinod Govindapillai @ 2025-01-30 21:00 UTC (permalink / raw) To: intel-gfx, intel-xe Cc: vinod.govindapillai, ville.syrjala, santhosh.reddy.guddati, jani.saarinen It is not recommended to have both FBC dirty rect and PSR2 selective fetch be enabled at the same time. If PSR2 selective fetch or panel replay is on, mark FBC as not possible. v2: fix the condition to disable FBC if PSR2 enabled (Jani) v3: use HAS_FBC_DIRTY_RECT() Bspec: 68881 Signed-off-by: Vinod Govindapillai <vinod.govindapillai@intel.com> --- drivers/gpu/drm/i915/display/intel_fbc.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/i915/display/intel_fbc.c b/drivers/gpu/drm/i915/display/intel_fbc.c index b17ee1797118..429e213e1dcd 100644 --- a/drivers/gpu/drm/i915/display/intel_fbc.c +++ b/drivers/gpu/drm/i915/display/intel_fbc.c @@ -1481,9 +1481,14 @@ static int intel_fbc_check_plane(struct intel_atomic_state *state, * Display 12+ is not supporting FBC with PSR2. * Recommendation is to keep this combination disabled * Bspec: 50422 HSD: 14010260002 + * + * In Xe3, PSR2 selective fetch and FBC dirty rect feature cannot + * coexist. So if PSR2 selective fetch is supported then mark that + * FBC is not supported. + * TODO: Need a logic to decide between PSR2 and FBC Dirty rect */ - if (IS_DISPLAY_VER(display, 12, 14) && crtc_state->has_sel_update && - !crtc_state->has_panel_replay) { + if ((IS_DISPLAY_VER(display, 12, 14) || HAS_FBC_DIRTY_RECT(display)) && + crtc_state->has_sel_update && !crtc_state->has_panel_replay) { plane_state->no_fbc_reason = "PSR2 enabled"; return 0; } -- 2.43.0 ^ permalink raw reply related [flat|nested] 28+ messages in thread
* RE: [PATCH v6 7/7] drm/i915/xe3: disable FBC if PSR2 selective fetch is enabled 2025-01-30 21:00 ` [PATCH v6 7/7] drm/i915/xe3: disable FBC if PSR2 selective fetch is enabled Vinod Govindapillai @ 2025-02-05 9:58 ` Kandpal, Suraj 0 siblings, 0 replies; 28+ messages in thread From: Kandpal, Suraj @ 2025-02-05 9:58 UTC (permalink / raw) To: Govindapillai, Vinod, intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org Cc: Govindapillai, Vinod, Syrjala, Ville, Reddy Guddati, Santhosh, Saarinen, Jani > -----Original Message----- > From: Intel-gfx <intel-gfx-bounces@lists.freedesktop.org> On Behalf Of Vinod > Govindapillai > Sent: Friday, January 31, 2025 2:30 AM > To: intel-gfx@lists.freedesktop.org; intel-xe@lists.freedesktop.org > Cc: Govindapillai, Vinod <vinod.govindapillai@intel.com>; Syrjala, Ville > <ville.syrjala@intel.com>; Reddy Guddati, Santhosh > <santhosh.reddy.guddati@intel.com>; Saarinen, Jani > <jani.saarinen@intel.com> > Subject: [PATCH v6 7/7] drm/i915/xe3: disable FBC if PSR2 selective fetch is > enabled > > It is not recommended to have both FBC dirty rect and PSR2 selective fetch be > enabled at the same time. If PSR2 selective fetch or panel replay is on, mark > FBC as not possible. > > v2: fix the condition to disable FBC if PSR2 enabled (Jani) > > v3: use HAS_FBC_DIRTY_RECT() > > Bspec: 68881 > Signed-off-by: Vinod Govindapillai <vinod.govindapillai@intel.com> LGTM, Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com> > --- > drivers/gpu/drm/i915/display/intel_fbc.c | 9 +++++++-- > 1 file changed, 7 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_fbc.c > b/drivers/gpu/drm/i915/display/intel_fbc.c > index b17ee1797118..429e213e1dcd 100644 > --- a/drivers/gpu/drm/i915/display/intel_fbc.c > +++ b/drivers/gpu/drm/i915/display/intel_fbc.c > @@ -1481,9 +1481,14 @@ static int intel_fbc_check_plane(struct > intel_atomic_state *state, > * Display 12+ is not supporting FBC with PSR2. > * Recommendation is to keep this combination disabled > * Bspec: 50422 HSD: 14010260002 > + * > + * In Xe3, PSR2 selective fetch and FBC dirty rect feature cannot > + * coexist. So if PSR2 selective fetch is supported then mark that > + * FBC is not supported. > + * TODO: Need a logic to decide between PSR2 and FBC Dirty rect > */ > - if (IS_DISPLAY_VER(display, 12, 14) && crtc_state->has_sel_update && > - !crtc_state->has_panel_replay) { > + if ((IS_DISPLAY_VER(display, 12, 14) || HAS_FBC_DIRTY_RECT(display)) > && > + crtc_state->has_sel_update && !crtc_state->has_panel_replay) { > plane_state->no_fbc_reason = "PSR2 enabled"; > return 0; > } > -- > 2.43.0 ^ permalink raw reply [flat|nested] 28+ messages in thread
* ✗ Fi.CI.CHECKPATCH: warning for drm/i915/xe3: FBC Dirty rect feature support (rev7) 2025-01-30 21:00 [PATCH v6 0/7] drm/i915/xe3: FBC Dirty rect feature support Vinod Govindapillai ` (6 preceding siblings ...) 2025-01-30 21:00 ` [PATCH v6 7/7] drm/i915/xe3: disable FBC if PSR2 selective fetch is enabled Vinod Govindapillai @ 2025-01-30 22:00 ` Patchwork 2025-01-30 22:00 ` ✗ Fi.CI.SPARSE: " Patchwork ` (3 subsequent siblings) 11 siblings, 0 replies; 28+ messages in thread From: Patchwork @ 2025-01-30 22:00 UTC (permalink / raw) To: Vinod Govindapillai; +Cc: intel-gfx == Series Details == Series: drm/i915/xe3: FBC Dirty rect feature support (rev7) URL : https://patchwork.freedesktop.org/series/141527/ State : warning == Summary == Error: dim checkpatch failed 73dbd0845cac drm/i915/xe3: add register definitions for fbc dirty rect support -:24: WARNING:LONG_LINE: line length of 101 exceeds 100 columns #24: FILE: drivers/gpu/drm/i915/display/intel_fbc_regs.h:107: +#define FBC_DIRTY_RECT_START_LINE(val) REG_FIELD_PREP(FBC_DIRTY_RECT_START_LINE_MASK, (val)) total: 0 errors, 1 warnings, 0 checks, 15 lines checked 11b227139f8a drm/i915/xe3: introduce HAS_FBC_DIRTY_RECT() for FBC dirty rect support ffc3026626b5 drm/damage-helper: add const qualifier in drm_atomic_helper_damage_merged() 0ec3efcf3af0 drm/i915/xe3: update and store the plane damage clips 35d2c226a650 drm/i915/xe3: dirty rect support for FBC f4d33535af6a drm/i915/xe3: avoid calling fbc activate if fbc is active d2e5ce0aa316 drm/i915/xe3: disable FBC if PSR2 selective fetch is enabled ^ permalink raw reply [flat|nested] 28+ messages in thread
* ✗ Fi.CI.SPARSE: warning for drm/i915/xe3: FBC Dirty rect feature support (rev7) 2025-01-30 21:00 [PATCH v6 0/7] drm/i915/xe3: FBC Dirty rect feature support Vinod Govindapillai ` (7 preceding siblings ...) 2025-01-30 22:00 ` ✗ Fi.CI.CHECKPATCH: warning for drm/i915/xe3: FBC Dirty rect feature support (rev7) Patchwork @ 2025-01-30 22:00 ` Patchwork 2025-01-30 22:14 ` ✓ i915.CI.BAT: success " Patchwork ` (2 subsequent siblings) 11 siblings, 0 replies; 28+ messages in thread From: Patchwork @ 2025-01-30 22:00 UTC (permalink / raw) To: Vinod Govindapillai; +Cc: intel-gfx == Series Details == Series: drm/i915/xe3: FBC Dirty rect feature support (rev7) URL : https://patchwork.freedesktop.org/series/141527/ State : warning == Summary == Error: dim sparse failed Sparse version: v0.6.2 Fast mode used, each commit won't be checked separately. ^ permalink raw reply [flat|nested] 28+ messages in thread
* ✓ i915.CI.BAT: success for drm/i915/xe3: FBC Dirty rect feature support (rev7) 2025-01-30 21:00 [PATCH v6 0/7] drm/i915/xe3: FBC Dirty rect feature support Vinod Govindapillai ` (8 preceding siblings ...) 2025-01-30 22:00 ` ✗ Fi.CI.SPARSE: " Patchwork @ 2025-01-30 22:14 ` Patchwork 2025-01-31 1:13 ` ✗ i915.CI.Full: failure " Patchwork 2025-02-04 9:09 ` [PATCH v6 0/7] drm/i915/xe3: FBC Dirty rect feature support Jani Nikula 11 siblings, 0 replies; 28+ messages in thread From: Patchwork @ 2025-01-30 22:14 UTC (permalink / raw) To: Vinod Govindapillai; +Cc: intel-gfx [-- Attachment #1: Type: text/plain, Size: 4285 bytes --] == Series Details == Series: drm/i915/xe3: FBC Dirty rect feature support (rev7) URL : https://patchwork.freedesktop.org/series/141527/ State : success == Summary == CI Bug Log - changes from CI_DRM_16046 -> Patchwork_141527v7 ==================================================== Summary ------- **SUCCESS** No regressions found. External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/index.html Participating hosts (44 -> 43) ------------------------------ Missing (1): fi-snb-2520m Known issues ------------ Here are the changes found in Patchwork_141527v7 that come from known issues: ### IGT changes ### #### Issues hit #### * igt@i915_pm_rpm@module-reload: - bat-adls-6: [PASS][1] -> [FAIL][2] ([i915#13401]) [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16046/bat-adls-6/igt@i915_pm_rpm@module-reload.html [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/bat-adls-6/igt@i915_pm_rpm@module-reload.html - bat-dg1-7: [PASS][3] -> [FAIL][4] ([i915#13401]) [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16046/bat-dg1-7/igt@i915_pm_rpm@module-reload.html [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/bat-dg1-7/igt@i915_pm_rpm@module-reload.html * igt@i915_selftest@live: - bat-twl-1: NOTRUN -> [ABORT][5] ([i915#12435] / [i915#12919] / [i915#13503]) [5]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/bat-twl-1/igt@i915_selftest@live.html - bat-arlh-2: [PASS][6] -> [DMESG-FAIL][7] ([i915#12061] / [i915#12435]) [6]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16046/bat-arlh-2/igt@i915_selftest@live.html [7]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/bat-arlh-2/igt@i915_selftest@live.html * igt@i915_selftest@live@requests: - bat-twl-1: [PASS][8] -> [ABORT][9] ([i915#12919]) [8]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16046/bat-twl-1/igt@i915_selftest@live@requests.html [9]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/bat-twl-1/igt@i915_selftest@live@requests.html * igt@i915_selftest@live@workarounds: - bat-arlh-2: [PASS][10] -> [DMESG-FAIL][11] ([i915#12061]) [10]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16046/bat-arlh-2/igt@i915_selftest@live@workarounds.html [11]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/bat-arlh-2/igt@i915_selftest@live@workarounds.html * igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence: - bat-dg2-11: [PASS][12] -> [SKIP][13] ([i915#9197]) +3 other tests skip [12]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16046/bat-dg2-11/igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence.html [13]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/bat-dg2-11/igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence.html #### Possible fixes #### * igt@i915_selftest@live@workarounds: - bat-arlh-3: [DMESG-FAIL][14] ([i915#12061]) -> [PASS][15] +1 other test pass [14]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16046/bat-arlh-3/igt@i915_selftest@live@workarounds.html [15]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/bat-arlh-3/igt@i915_selftest@live@workarounds.html [i915#12061]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12061 [i915#12435]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12435 [i915#12919]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12919 [i915#13401]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13401 [i915#13503]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13503 [i915#9197]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9197 Build changes ------------- * Linux: CI_DRM_16046 -> Patchwork_141527v7 CI-20190529: 20190529 CI_DRM_16046: 54974a9354d844eca54feeec70870790fac17160 @ git://anongit.freedesktop.org/gfx-ci/linux IGT_8218: fafef52e0a83fec5f8c4f8df851d27319467762b @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git Patchwork_141527v7: 54974a9354d844eca54feeec70870790fac17160 @ git://anongit.freedesktop.org/gfx-ci/linux == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/index.html [-- Attachment #2: Type: text/html, Size: 5390 bytes --] ^ permalink raw reply [flat|nested] 28+ messages in thread
* ✗ i915.CI.Full: failure for drm/i915/xe3: FBC Dirty rect feature support (rev7) 2025-01-30 21:00 [PATCH v6 0/7] drm/i915/xe3: FBC Dirty rect feature support Vinod Govindapillai ` (9 preceding siblings ...) 2025-01-30 22:14 ` ✓ i915.CI.BAT: success " Patchwork @ 2025-01-31 1:13 ` Patchwork 2025-02-04 9:09 ` [PATCH v6 0/7] drm/i915/xe3: FBC Dirty rect feature support Jani Nikula 11 siblings, 0 replies; 28+ messages in thread From: Patchwork @ 2025-01-31 1:13 UTC (permalink / raw) To: Vinod Govindapillai; +Cc: intel-gfx [-- Attachment #1: Type: text/plain, Size: 100278 bytes --] == Series Details == Series: drm/i915/xe3: FBC Dirty rect feature support (rev7) URL : https://patchwork.freedesktop.org/series/141527/ State : failure == Summary == CI Bug Log - changes from CI_DRM_16046_full -> Patchwork_141527v7_full ==================================================== Summary ------- **FAILURE** Serious unknown changes coming with Patchwork_141527v7_full absolutely need to be verified manually. If you think the reported changes have nothing to do with the changes introduced in Patchwork_141527v7_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. External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/index.html Participating hosts (11 -> 11) ------------------------------ No changes in participating hosts Possible new issues ------------------- Here are the unknown changes that may have been introduced in Patchwork_141527v7_full: ### IGT changes ### #### Possible regressions #### * igt@gem_ctx_persistence@legacy-engines-mixed-process@bsd2: - shard-mtlp: [PASS][1] -> [DMESG-WARN][2] [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16046/shard-mtlp-7/igt@gem_ctx_persistence@legacy-engines-mixed-process@bsd2.html [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-7/igt@gem_ctx_persistence@legacy-engines-mixed-process@bsd2.html * igt@gem_eio@banned: - shard-mtlp: NOTRUN -> [ABORT][3] [3]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-4/igt@gem_eio@banned.html * igt@i915_module_load@reload-with-fault-injection: - shard-dg1: NOTRUN -> [INCOMPLETE][4] [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-17/igt@i915_module_load@reload-with-fault-injection.html * igt@sysfs_heartbeat_interval@nopreempt@vcs1: - shard-mtlp: [PASS][5] -> [ABORT][6] [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16046/shard-mtlp-5/igt@sysfs_heartbeat_interval@nopreempt@vcs1.html [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-7/igt@sysfs_heartbeat_interval@nopreempt@vcs1.html Known issues ------------ Here are the changes found in Patchwork_141527v7_full that come from known issues: ### IGT changes ### #### Issues hit #### * igt@api_intel_bb@crc32: - shard-rkl: NOTRUN -> [SKIP][7] ([i915#6230]) [7]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-7/igt@api_intel_bb@crc32.html * igt@debugfs_test@basic-hwmon: - shard-tglu: NOTRUN -> [SKIP][8] ([i915#9318]) [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-6/igt@debugfs_test@basic-hwmon.html * igt@drm_fdinfo@busy-hang@bcs0: - shard-dg1: NOTRUN -> [SKIP][9] ([i915#8414]) +6 other tests skip [9]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-18/igt@drm_fdinfo@busy-hang@bcs0.html * igt@drm_fdinfo@most-busy-idle-check-all@ccs0: - shard-mtlp: NOTRUN -> [SKIP][10] ([i915#8414]) +13 other tests skip [10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-2/igt@drm_fdinfo@most-busy-idle-check-all@ccs0.html * igt@gem_bad_reloc@negative-reloc-bltcopy: - shard-rkl: NOTRUN -> [SKIP][11] ([i915#3281]) +2 other tests skip [11]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-2/igt@gem_bad_reloc@negative-reloc-bltcopy.html * igt@gem_ccs@block-copy-compressed: - shard-mtlp: NOTRUN -> [SKIP][12] ([i915#3555] / [i915#9323]) [12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-4/igt@gem_ccs@block-copy-compressed.html * igt@gem_ccs@block-multicopy-compressed: - shard-dg1: NOTRUN -> [SKIP][13] ([i915#9323]) +1 other test skip [13]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-13/igt@gem_ccs@block-multicopy-compressed.html * igt@gem_ccs@block-multicopy-inplace: - shard-rkl: NOTRUN -> [SKIP][14] ([i915#3555] / [i915#9323]) [14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-7/igt@gem_ccs@block-multicopy-inplace.html * igt@gem_ccs@ctrl-surf-copy: - shard-dg1: NOTRUN -> [SKIP][15] ([i915#3555] / [i915#9323]) [15]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-18/igt@gem_ccs@ctrl-surf-copy.html * igt@gem_ccs@suspend-resume: - shard-dg2: NOTRUN -> [INCOMPLETE][16] ([i915#7297]) [16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-6/igt@gem_ccs@suspend-resume.html * igt@gem_ccs@suspend-resume@tile64-compressed-compfmt0-lmem0-lmem0: - shard-dg2: NOTRUN -> [INCOMPLETE][17] ([i915#12392] / [i915#7297]) [17]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-6/igt@gem_ccs@suspend-resume@tile64-compressed-compfmt0-lmem0-lmem0.html * igt@gem_close_race@multigpu-basic-process: - shard-mtlp: NOTRUN -> [SKIP][18] ([i915#7697]) [18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-2/igt@gem_close_race@multigpu-basic-process.html * igt@gem_close_race@multigpu-basic-threads: - shard-dg2: NOTRUN -> [SKIP][19] ([i915#7697]) +1 other test skip [19]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-7/igt@gem_close_race@multigpu-basic-threads.html * igt@gem_ctx_persistence@engines-mixed-process: - shard-snb: NOTRUN -> [SKIP][20] ([i915#1099]) +1 other test skip [20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-snb2/igt@gem_ctx_persistence@engines-mixed-process.html * igt@gem_ctx_persistence@heartbeat-hostile: - shard-mtlp: NOTRUN -> [SKIP][21] ([i915#8555]) +1 other test skip [21]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-4/igt@gem_ctx_persistence@heartbeat-hostile.html * igt@gem_exec_balancer@bonded-dual: - shard-dg2: NOTRUN -> [SKIP][22] ([i915#4771]) [22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-7/igt@gem_exec_balancer@bonded-dual.html * igt@gem_exec_balancer@bonded-false-hang: - shard-mtlp: NOTRUN -> [SKIP][23] ([i915#4812]) [23]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-2/igt@gem_exec_balancer@bonded-false-hang.html * igt@gem_exec_balancer@bonded-sync: - shard-dg1: NOTRUN -> [SKIP][24] ([i915#4771]) [24]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-18/igt@gem_exec_balancer@bonded-sync.html * igt@gem_exec_balancer@parallel-balancer: - shard-tglu: NOTRUN -> [SKIP][25] ([i915#4525]) +1 other test skip [25]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-10/igt@gem_exec_balancer@parallel-balancer.html * igt@gem_exec_fence@submit3: - shard-dg1: NOTRUN -> [SKIP][26] ([i915#4812]) +1 other test skip [26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-18/igt@gem_exec_fence@submit3.html * igt@gem_exec_flush@basic-batch-kernel-default-uc: - shard-dg2: NOTRUN -> [SKIP][27] ([i915#3539] / [i915#4852]) [27]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-10/igt@gem_exec_flush@basic-batch-kernel-default-uc.html * igt@gem_exec_flush@basic-uc-prw-default: - shard-dg2: NOTRUN -> [SKIP][28] ([i915#3539]) [28]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-10/igt@gem_exec_flush@basic-uc-prw-default.html * igt@gem_exec_flush@basic-uc-rw-default: - shard-dg1: NOTRUN -> [SKIP][29] ([i915#3539] / [i915#4852]) +1 other test skip [29]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-13/igt@gem_exec_flush@basic-uc-rw-default.html * igt@gem_exec_params@secure-non-root: - shard-dg2: NOTRUN -> [SKIP][30] +4 other tests skip [30]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-10/igt@gem_exec_params@secure-non-root.html * igt@gem_exec_reloc@basic-concurrent0: - shard-mtlp: NOTRUN -> [SKIP][31] ([i915#3281]) +1 other test skip [31]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-2/igt@gem_exec_reloc@basic-concurrent0.html * igt@gem_exec_reloc@basic-gtt-wc: - shard-dg2: NOTRUN -> [SKIP][32] ([i915#3281]) +3 other tests skip [32]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-7/igt@gem_exec_reloc@basic-gtt-wc.html * igt@gem_exec_reloc@basic-wc-gtt-noreloc: - shard-dg1: NOTRUN -> [SKIP][33] ([i915#3281]) +9 other tests skip [33]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-18/igt@gem_exec_reloc@basic-wc-gtt-noreloc.html * igt@gem_exec_schedule@reorder-wide: - shard-dg2: NOTRUN -> [SKIP][34] ([i915#4537] / [i915#4812]) [34]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-7/igt@gem_exec_schedule@reorder-wide.html * igt@gem_exec_suspend@basic-s4-devices: - shard-rkl: NOTRUN -> [ABORT][35] ([i915#7975] / [i915#8213]) +1 other test abort [35]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-2/igt@gem_exec_suspend@basic-s4-devices.html * igt@gem_fence_thrash@bo-write-verify-y: - shard-mtlp: NOTRUN -> [SKIP][36] ([i915#4860]) [36]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-2/igt@gem_fence_thrash@bo-write-verify-y.html * igt@gem_fenced_exec_thrash@2-spare-fences: - shard-dg2: NOTRUN -> [SKIP][37] ([i915#4860]) [37]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-10/igt@gem_fenced_exec_thrash@2-spare-fences.html * igt@gem_fenced_exec_thrash@no-spare-fences: - shard-dg1: NOTRUN -> [SKIP][38] ([i915#4860]) +1 other test skip [38]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-18/igt@gem_fenced_exec_thrash@no-spare-fences.html * igt@gem_lmem_swapping@heavy-verify-multi-ccs: - shard-tglu: NOTRUN -> [SKIP][39] ([i915#4613]) +1 other test skip [39]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-10/igt@gem_lmem_swapping@heavy-verify-multi-ccs.html * igt@gem_lmem_swapping@heavy-verify-random-ccs: - shard-rkl: NOTRUN -> [SKIP][40] ([i915#4613]) +1 other test skip [40]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-7/igt@gem_lmem_swapping@heavy-verify-random-ccs.html * igt@gem_lmem_swapping@parallel-random-verify-ccs: - shard-tglu-1: NOTRUN -> [SKIP][41] ([i915#4613]) +1 other test skip [41]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-1/igt@gem_lmem_swapping@parallel-random-verify-ccs.html * igt@gem_lmem_swapping@smem-oom: - shard-mtlp: NOTRUN -> [SKIP][42] ([i915#4613]) +1 other test skip [42]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-4/igt@gem_lmem_swapping@smem-oom.html * igt@gem_mmap@bad-object: - shard-dg1: NOTRUN -> [SKIP][43] ([i915#4083]) +4 other tests skip [43]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-18/igt@gem_mmap@bad-object.html * igt@gem_mmap_gtt@cpuset-basic-small-copy: - shard-dg1: NOTRUN -> [SKIP][44] ([i915#4077]) +9 other tests skip [44]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-13/igt@gem_mmap_gtt@cpuset-basic-small-copy.html * igt@gem_mmap_gtt@fault-concurrent-x: - shard-dg2: NOTRUN -> [SKIP][45] ([i915#4077]) +1 other test skip [45]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-10/igt@gem_mmap_gtt@fault-concurrent-x.html * igt@gem_mmap_wc@invalid-flags: - shard-dg2: NOTRUN -> [SKIP][46] ([i915#4083]) +2 other tests skip [46]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-10/igt@gem_mmap_wc@invalid-flags.html * igt@gem_mmap_wc@write: - shard-mtlp: NOTRUN -> [SKIP][47] ([i915#4083]) +2 other tests skip [47]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-4/igt@gem_mmap_wc@write.html * igt@gem_partial_pwrite_pread@writes-after-reads-display: - shard-mtlp: NOTRUN -> [SKIP][48] ([i915#3282]) +1 other test skip [48]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-2/igt@gem_partial_pwrite_pread@writes-after-reads-display.html * igt@gem_pread@bench: - shard-rkl: NOTRUN -> [SKIP][49] ([i915#3282]) +3 other tests skip [49]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-7/igt@gem_pread@bench.html * igt@gem_pwrite@basic-exhaustion: - shard-dg1: NOTRUN -> [SKIP][50] ([i915#3282]) +2 other tests skip [50]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-18/igt@gem_pwrite@basic-exhaustion.html * igt@gem_pxp@create-valid-protected-context: - shard-dg2: NOTRUN -> [SKIP][51] ([i915#4270]) [51]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-10/igt@gem_pxp@create-valid-protected-context.html * igt@gem_pxp@verify-pxp-execution-after-suspend-resume: - shard-rkl: NOTRUN -> [TIMEOUT][52] ([i915#12917] / [i915#12964]) [52]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-3/igt@gem_pxp@verify-pxp-execution-after-suspend-resume.html * igt@gem_pxp@verify-pxp-key-change-after-suspend-resume: - shard-dg1: NOTRUN -> [SKIP][53] ([i915#4270]) +1 other test skip [53]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-13/igt@gem_pxp@verify-pxp-key-change-after-suspend-resume.html * igt@gem_render_copy@x-tiled-to-vebox-y-tiled: - shard-mtlp: NOTRUN -> [SKIP][54] ([i915#8428]) [54]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-2/igt@gem_render_copy@x-tiled-to-vebox-y-tiled.html * igt@gem_render_copy@yf-tiled-to-vebox-x-tiled: - shard-dg2: NOTRUN -> [SKIP][55] ([i915#5190] / [i915#8428]) +1 other test skip [55]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-2/igt@gem_render_copy@yf-tiled-to-vebox-x-tiled.html * igt@gem_set_tiling_vs_blt@tiled-to-untiled: - shard-rkl: NOTRUN -> [SKIP][56] ([i915#8411]) [56]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-3/igt@gem_set_tiling_vs_blt@tiled-to-untiled.html * igt@gem_set_tiling_vs_pwrite: - shard-dg1: NOTRUN -> [SKIP][57] ([i915#4079]) [57]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-13/igt@gem_set_tiling_vs_pwrite.html * igt@gem_softpin@evict-snoop-interruptible: - shard-dg2: NOTRUN -> [SKIP][58] ([i915#4885]) [58]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-7/igt@gem_softpin@evict-snoop-interruptible.html * igt@gem_tiled_pread_basic: - shard-mtlp: NOTRUN -> [SKIP][59] ([i915#4079]) +1 other test skip [59]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-2/igt@gem_tiled_pread_basic.html * igt@gem_tiled_pread_pwrite: - shard-dg2: NOTRUN -> [SKIP][60] ([i915#4079]) [60]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-2/igt@gem_tiled_pread_pwrite.html * igt@gem_tiled_swapping@non-threaded: - shard-tglu: [PASS][61] -> [FAIL][62] ([i915#12941]) [61]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16046/shard-tglu-9/igt@gem_tiled_swapping@non-threaded.html [62]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-8/igt@gem_tiled_swapping@non-threaded.html * igt@gem_tiling_max_stride: - shard-mtlp: NOTRUN -> [SKIP][63] ([i915#4077]) +4 other tests skip [63]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-4/igt@gem_tiling_max_stride.html * igt@gem_unfence_active_buffers: - shard-mtlp: NOTRUN -> [SKIP][64] ([i915#4879]) [64]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-4/igt@gem_unfence_active_buffers.html * igt@gem_userptr_blits@create-destroy-unsync: - shard-dg1: NOTRUN -> [SKIP][65] ([i915#3297]) [65]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-18/igt@gem_userptr_blits@create-destroy-unsync.html * igt@gem_userptr_blits@dmabuf-sync: - shard-tglu: NOTRUN -> [SKIP][66] ([i915#3297] / [i915#3323]) [66]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-6/igt@gem_userptr_blits@dmabuf-sync.html * igt@gem_userptr_blits@map-fixed-invalidate-overlap-busy: - shard-dg2: NOTRUN -> [SKIP][67] ([i915#3297] / [i915#4880]) [67]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-10/igt@gem_userptr_blits@map-fixed-invalidate-overlap-busy.html * igt@gem_userptr_blits@relocations: - shard-dg1: NOTRUN -> [SKIP][68] ([i915#3281] / [i915#3297]) [68]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-18/igt@gem_userptr_blits@relocations.html * igt@gem_userptr_blits@unsync-unmap-cycles: - shard-rkl: NOTRUN -> [SKIP][69] ([i915#3297]) +2 other tests skip [69]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-3/igt@gem_userptr_blits@unsync-unmap-cycles.html * igt@gen7_exec_parse@cmd-crossing-page: - shard-mtlp: NOTRUN -> [SKIP][70] +10 other tests skip [70]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-2/igt@gen7_exec_parse@cmd-crossing-page.html * igt@gen9_exec_parse@basic-rejected-ctx-param: - shard-tglu: NOTRUN -> [SKIP][71] ([i915#2527] / [i915#2856]) +1 other test skip [71]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-10/igt@gen9_exec_parse@basic-rejected-ctx-param.html * igt@gen9_exec_parse@bb-chained: - shard-dg1: NOTRUN -> [SKIP][72] ([i915#2527]) +1 other test skip [72]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-18/igt@gen9_exec_parse@bb-chained.html * igt@gen9_exec_parse@bb-oversize: - shard-rkl: NOTRUN -> [SKIP][73] ([i915#2527]) +2 other tests skip [73]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-7/igt@gen9_exec_parse@bb-oversize.html * igt@gen9_exec_parse@bb-start-cmd: - shard-tglu-1: NOTRUN -> [SKIP][74] ([i915#2527] / [i915#2856]) +1 other test skip [74]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-1/igt@gen9_exec_parse@bb-start-cmd.html * igt@gen9_exec_parse@secure-batches: - shard-dg2: NOTRUN -> [SKIP][75] ([i915#2856]) [75]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-10/igt@gen9_exec_parse@secure-batches.html - shard-mtlp: NOTRUN -> [SKIP][76] ([i915#2856]) [76]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-2/igt@gen9_exec_parse@secure-batches.html * igt@i915_module_load@reload-with-fault-injection: - shard-rkl: [PASS][77] -> [ABORT][78] ([i915#9820]) [77]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16046/shard-rkl-5/igt@i915_module_load@reload-with-fault-injection.html [78]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-7/igt@i915_module_load@reload-with-fault-injection.html - shard-tglu-1: NOTRUN -> [ABORT][79] ([i915#12817] / [i915#9820]) [79]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-1/igt@i915_module_load@reload-with-fault-injection.html - shard-dg2: [PASS][80] -> [ABORT][81] ([i915#9820]) [80]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16046/shard-dg2-6/igt@i915_module_load@reload-with-fault-injection.html [81]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-1/igt@i915_module_load@reload-with-fault-injection.html * igt@i915_pm_freq_api@freq-suspend@gt0: - shard-dg2: [PASS][82] -> [INCOMPLETE][83] ([i915#12455]) +1 other test incomplete [82]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16046/shard-dg2-6/igt@i915_pm_freq_api@freq-suspend@gt0.html [83]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-7/igt@i915_pm_freq_api@freq-suspend@gt0.html * igt@i915_pm_rps@basic-api: - shard-dg1: NOTRUN -> [SKIP][84] ([i915#11681] / [i915#6621]) [84]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-18/igt@i915_pm_rps@basic-api.html * igt@i915_pm_sseu@full-enable: - shard-tglu: NOTRUN -> [SKIP][85] ([i915#4387]) [85]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-6/igt@i915_pm_sseu@full-enable.html * igt@i915_power@sanity: - shard-mtlp: [PASS][86] -> [SKIP][87] ([i915#7984]) [86]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16046/shard-mtlp-3/igt@i915_power@sanity.html [87]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-7/igt@i915_power@sanity.html * igt@i915_query@query-topology-coherent-slice-mask: - shard-mtlp: NOTRUN -> [SKIP][88] ([i915#6188]) [88]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-2/igt@i915_query@query-topology-coherent-slice-mask.html * igt@i915_selftest@mock: - shard-snb: NOTRUN -> [DMESG-WARN][89] ([i915#9311]) +1 other test dmesg-warn [89]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-snb5/igt@i915_selftest@mock.html * igt@i915_suspend@basic-s2idle-without-i915: - shard-dg1: [PASS][90] -> [DMESG-WARN][91] ([i915#4391] / [i915#4423]) [90]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16046/shard-dg1-12/igt@i915_suspend@basic-s2idle-without-i915.html [91]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-12/igt@i915_suspend@basic-s2idle-without-i915.html * igt@kms_addfb_basic@addfb25-x-tiled-mismatch-legacy: - shard-dg1: NOTRUN -> [SKIP][92] ([i915#4212]) +1 other test skip [92]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-18/igt@kms_addfb_basic@addfb25-x-tiled-mismatch-legacy.html * igt@kms_async_flips@async-flip-with-page-flip-events@pipe-b-hdmi-a-2-y-rc-ccs-cc: - shard-rkl: NOTRUN -> [SKIP][93] ([i915#8709]) +3 other tests skip [93]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-5/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-b-hdmi-a-2-y-rc-ccs-cc.html * igt@kms_async_flips@async-flip-with-page-flip-events@pipe-c-dp-4-4-rc-ccs-cc: - shard-dg2: NOTRUN -> [SKIP][94] ([i915#8709]) +15 other tests skip [94]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-10/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-c-dp-4-4-rc-ccs-cc.html * igt@kms_atomic_transition@plane-all-modeset-transition-fencing: - shard-dg2: [PASS][95] -> [FAIL][96] ([i915#5956]) +1 other test fail [95]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16046/shard-dg2-8/igt@kms_atomic_transition@plane-all-modeset-transition-fencing.html [96]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-4/igt@kms_atomic_transition@plane-all-modeset-transition-fencing.html - shard-rkl: NOTRUN -> [FAIL][97] ([i915#11808]) +1 other test fail [97]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-2/igt@kms_atomic_transition@plane-all-modeset-transition-fencing.html * igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels: - shard-dg2: NOTRUN -> [SKIP][98] ([i915#1769] / [i915#3555]) [98]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-10/igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels.html * igt@kms_big_fb@4-tiled-64bpp-rotate-0: - shard-tglu: NOTRUN -> [SKIP][99] ([i915#5286]) +2 other tests skip [99]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-10/igt@kms_big_fb@4-tiled-64bpp-rotate-0.html * igt@kms_big_fb@4-tiled-8bpp-rotate-90: - shard-rkl: NOTRUN -> [SKIP][100] ([i915#5286]) +3 other tests skip [100]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-7/igt@kms_big_fb@4-tiled-8bpp-rotate-90.html - shard-tglu-1: NOTRUN -> [SKIP][101] ([i915#5286]) +4 other tests skip [101]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-1/igt@kms_big_fb@4-tiled-8bpp-rotate-90.html * igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-async-flip: - shard-dg1: NOTRUN -> [SKIP][102] ([i915#4538] / [i915#5286]) +2 other tests skip [102]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-18/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-async-flip.html * igt@kms_big_fb@linear-8bpp-rotate-270: - shard-dg1: NOTRUN -> [SKIP][103] ([i915#3638]) +2 other tests skip [103]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-18/igt@kms_big_fb@linear-8bpp-rotate-270.html * igt@kms_big_fb@y-tiled-8bpp-rotate-90: - shard-rkl: NOTRUN -> [SKIP][104] ([i915#3638]) +2 other tests skip [104]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-3/igt@kms_big_fb@y-tiled-8bpp-rotate-90.html * igt@kms_big_fb@y-tiled-addfb: - shard-dg2: NOTRUN -> [SKIP][105] ([i915#5190]) +2 other tests skip [105]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-10/igt@kms_big_fb@y-tiled-addfb.html - shard-mtlp: NOTRUN -> [SKIP][106] ([i915#6187]) [106]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-2/igt@kms_big_fb@y-tiled-addfb.html * igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-hflip-async-flip: - shard-dg2: NOTRUN -> [SKIP][107] ([i915#4538] / [i915#5190]) +3 other tests skip [107]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-7/igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-hflip-async-flip.html * igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-0: - shard-dg1: NOTRUN -> [SKIP][108] ([i915#4538]) +3 other tests skip [108]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-18/igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-0.html * igt@kms_ccs@bad-pixel-format-y-tiled-gen12-mc-ccs@pipe-d-hdmi-a-1: - shard-dg2: NOTRUN -> [SKIP][109] ([i915#10307] / [i915#10434] / [i915#6095]) +3 other tests skip [109]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-8/igt@kms_ccs@bad-pixel-format-y-tiled-gen12-mc-ccs@pipe-d-hdmi-a-1.html * igt@kms_ccs@bad-rotation-90-4-tiled-bmg-ccs: - shard-rkl: NOTRUN -> [SKIP][110] ([i915#12313]) [110]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-3/igt@kms_ccs@bad-rotation-90-4-tiled-bmg-ccs.html * igt@kms_ccs@bad-rotation-90-4-tiled-dg2-rc-ccs-cc@pipe-b-hdmi-a-1: - shard-tglu-1: NOTRUN -> [SKIP][111] ([i915#6095]) +44 other tests skip [111]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-1/igt@kms_ccs@bad-rotation-90-4-tiled-dg2-rc-ccs-cc@pipe-b-hdmi-a-1.html * igt@kms_ccs@crc-primary-basic-4-tiled-mtl-rc-ccs: - shard-dg2: NOTRUN -> [SKIP][112] ([i915#10307] / [i915#6095]) +114 other tests skip [112]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-10/igt@kms_ccs@crc-primary-basic-4-tiled-mtl-rc-ccs.html * igt@kms_ccs@crc-primary-rotation-180-4-tiled-lnl-ccs: - shard-dg1: NOTRUN -> [SKIP][113] ([i915#12313]) [113]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-13/igt@kms_ccs@crc-primary-rotation-180-4-tiled-lnl-ccs.html * igt@kms_ccs@crc-primary-rotation-180-yf-tiled-ccs@pipe-a-hdmi-a-4: - shard-dg1: NOTRUN -> [SKIP][114] ([i915#6095]) +137 other tests skip [114]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-14/igt@kms_ccs@crc-primary-rotation-180-yf-tiled-ccs@pipe-a-hdmi-a-4.html * igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs: - shard-tglu: NOTRUN -> [SKIP][115] ([i915#12805]) [115]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-6/igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs.html * igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-mc-ccs@pipe-b-hdmi-a-2: - shard-rkl: NOTRUN -> [SKIP][116] ([i915#6095]) +69 other tests skip [116]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-5/igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-mc-ccs@pipe-b-hdmi-a-2.html * igt@kms_ccs@crc-primary-suspend-4-tiled-mtl-mc-ccs@pipe-d-hdmi-a-3: - shard-dg2: NOTRUN -> [SKIP][117] ([i915#6095]) +20 other tests skip [117]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-5/igt@kms_ccs@crc-primary-suspend-4-tiled-mtl-mc-ccs@pipe-d-hdmi-a-3.html * igt@kms_ccs@crc-sprite-planes-basic-4-tiled-bmg-ccs: - shard-mtlp: NOTRUN -> [SKIP][118] ([i915#12313]) [118]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-2/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-bmg-ccs.html * igt@kms_ccs@crc-sprite-planes-basic-4-tiled-dg2-mc-ccs@pipe-a-hdmi-a-1: - shard-tglu: NOTRUN -> [SKIP][119] ([i915#6095]) +39 other tests skip [119]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-10/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-dg2-mc-ccs@pipe-a-hdmi-a-1.html * igt@kms_ccs@missing-ccs-buffer-yf-tiled-ccs@pipe-a-edp-1: - shard-mtlp: NOTRUN -> [SKIP][120] ([i915#6095]) +34 other tests skip [120]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-2/igt@kms_ccs@missing-ccs-buffer-yf-tiled-ccs@pipe-a-edp-1.html * igt@kms_ccs@random-ccs-data-4-tiled-bmg-ccs: - shard-dg2: NOTRUN -> [SKIP][121] ([i915#12313]) [121]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-10/igt@kms_ccs@random-ccs-data-4-tiled-bmg-ccs.html * igt@kms_cdclk@mode-transition@pipe-d-hdmi-a-1: - shard-dg2: NOTRUN -> [SKIP][122] ([i915#11616] / [i915#7213]) +3 other tests skip [122]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-4/igt@kms_cdclk@mode-transition@pipe-d-hdmi-a-1.html * igt@kms_chamelium_edid@dp-edid-stress-resolution-4k: - shard-tglu-1: NOTRUN -> [SKIP][123] ([i915#11151] / [i915#7828]) +6 other tests skip [123]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-1/igt@kms_chamelium_edid@dp-edid-stress-resolution-4k.html - shard-mtlp: NOTRUN -> [SKIP][124] ([i915#11151] / [i915#7828]) +1 other test skip [124]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-2/igt@kms_chamelium_edid@dp-edid-stress-resolution-4k.html * igt@kms_chamelium_edid@hdmi-edid-stress-resolution-4k: - shard-tglu: NOTRUN -> [SKIP][125] ([i915#11151] / [i915#7828]) +2 other tests skip [125]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-6/igt@kms_chamelium_edid@hdmi-edid-stress-resolution-4k.html * igt@kms_chamelium_hpd@dp-hpd: - shard-rkl: NOTRUN -> [SKIP][126] ([i915#11151] / [i915#7828]) +8 other tests skip [126]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-3/igt@kms_chamelium_hpd@dp-hpd.html * igt@kms_chamelium_hpd@dp-hpd-after-suspend: - shard-dg1: NOTRUN -> [SKIP][127] ([i915#11151] / [i915#7828]) +4 other tests skip [127]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-13/igt@kms_chamelium_hpd@dp-hpd-after-suspend.html * igt@kms_chamelium_hpd@hdmi-hpd-for-each-pipe: - shard-dg2: NOTRUN -> [SKIP][128] ([i915#11151] / [i915#7828]) +4 other tests skip [128]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-2/igt@kms_chamelium_hpd@hdmi-hpd-for-each-pipe.html * igt@kms_color@deep-color: - shard-tglu: NOTRUN -> [SKIP][129] ([i915#3555] / [i915#9979]) [129]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-10/igt@kms_color@deep-color.html * igt@kms_content_protection@atomic: - shard-dg1: NOTRUN -> [SKIP][130] ([i915#7116] / [i915#9424]) [130]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-18/igt@kms_content_protection@atomic.html * igt@kms_content_protection@atomic-dpms: - shard-dg2: NOTRUN -> [TIMEOUT][131] ([i915#7173]) +1 other test timeout [131]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-10/igt@kms_content_protection@atomic-dpms.html - shard-rkl: NOTRUN -> [SKIP][132] ([i915#7118] / [i915#9424]) [132]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-1/igt@kms_content_protection@atomic-dpms.html * igt@kms_content_protection@content-type-change: - shard-mtlp: NOTRUN -> [SKIP][133] ([i915#6944] / [i915#9424]) [133]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-4/igt@kms_content_protection@content-type-change.html * igt@kms_content_protection@dp-mst-lic-type-0: - shard-mtlp: NOTRUN -> [SKIP][134] ([i915#3299]) +1 other test skip [134]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-2/igt@kms_content_protection@dp-mst-lic-type-0.html - shard-dg2: NOTRUN -> [SKIP][135] ([i915#3299]) [135]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-10/igt@kms_content_protection@dp-mst-lic-type-0.html * igt@kms_content_protection@dp-mst-lic-type-1: - shard-rkl: NOTRUN -> [SKIP][136] ([i915#3116]) [136]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-7/igt@kms_content_protection@dp-mst-lic-type-1.html * igt@kms_content_protection@dp-mst-type-0: - shard-tglu-1: NOTRUN -> [SKIP][137] ([i915#3116] / [i915#3299]) [137]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-1/igt@kms_content_protection@dp-mst-type-0.html * igt@kms_content_protection@legacy: - shard-dg2: NOTRUN -> [SKIP][138] ([i915#7118] / [i915#9424]) [138]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-2/igt@kms_content_protection@legacy.html * igt@kms_content_protection@lic-type-0: - shard-dg1: NOTRUN -> [SKIP][139] ([i915#9424]) [139]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-18/igt@kms_content_protection@lic-type-0.html * igt@kms_content_protection@lic-type-1: - shard-tglu: NOTRUN -> [SKIP][140] ([i915#6944] / [i915#9424]) [140]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-6/igt@kms_content_protection@lic-type-1.html * igt@kms_content_protection@uevent: - shard-tglu: NOTRUN -> [SKIP][141] ([i915#6944] / [i915#7116] / [i915#7118] / [i915#9424]) [141]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-10/igt@kms_content_protection@uevent.html * igt@kms_cursor_crc@cursor-offscreen-512x512: - shard-dg1: NOTRUN -> [SKIP][142] ([i915#13049]) [142]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-18/igt@kms_cursor_crc@cursor-offscreen-512x512.html * igt@kms_cursor_crc@cursor-onscreen-32x32: - shard-dg1: NOTRUN -> [SKIP][143] ([i915#3555]) +5 other tests skip [143]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-18/igt@kms_cursor_crc@cursor-onscreen-32x32.html * igt@kms_cursor_crc@cursor-random-256x85: - shard-mtlp: NOTRUN -> [SKIP][144] ([i915#8814]) +1 other test skip [144]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-4/igt@kms_cursor_crc@cursor-random-256x85.html * igt@kms_cursor_crc@cursor-random-32x32: - shard-tglu: NOTRUN -> [SKIP][145] ([i915#3555]) +1 other test skip [145]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-10/igt@kms_cursor_crc@cursor-random-32x32.html * igt@kms_cursor_crc@cursor-random-512x170: - shard-dg2: NOTRUN -> [SKIP][146] ([i915#13049]) +1 other test skip [146]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-10/igt@kms_cursor_crc@cursor-random-512x170.html * igt@kms_cursor_crc@cursor-random-512x512: - shard-tglu: NOTRUN -> [SKIP][147] ([i915#13049]) [147]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-6/igt@kms_cursor_crc@cursor-random-512x512.html * igt@kms_cursor_legacy@2x-long-flip-vs-cursor-atomic: - shard-dg2: NOTRUN -> [SKIP][148] ([i915#13046] / [i915#5354]) +4 other tests skip [148]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-2/igt@kms_cursor_legacy@2x-long-flip-vs-cursor-atomic.html * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy: - shard-dg1: NOTRUN -> [SKIP][149] ([i915#4103] / [i915#4213]) [149]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-18/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy.html * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-varying-size: - shard-dg2: NOTRUN -> [SKIP][150] ([i915#4103] / [i915#4213]) [150]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-7/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-varying-size.html * igt@kms_cursor_legacy@cursora-vs-flipb-varying-size: - shard-mtlp: NOTRUN -> [SKIP][151] ([i915#9809]) +3 other tests skip [151]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-2/igt@kms_cursor_legacy@cursora-vs-flipb-varying-size.html * igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions: - shard-mtlp: NOTRUN -> [SKIP][152] ([i915#4213]) [152]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-4/igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions.html * igt@kms_cursor_legacy@short-busy-flip-before-cursor-toggle: - shard-rkl: NOTRUN -> [SKIP][153] ([i915#4103]) [153]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-7/igt@kms_cursor_legacy@short-busy-flip-before-cursor-toggle.html * igt@kms_dirtyfb@drrs-dirtyfb-ioctl: - shard-dg2: NOTRUN -> [SKIP][154] ([i915#9833]) [154]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-10/igt@kms_dirtyfb@drrs-dirtyfb-ioctl.html - shard-mtlp: NOTRUN -> [SKIP][155] ([i915#9833]) [155]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-2/igt@kms_dirtyfb@drrs-dirtyfb-ioctl.html * igt@kms_dirtyfb@psr-dirtyfb-ioctl: - shard-dg1: NOTRUN -> [SKIP][156] ([i915#9723]) [156]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-18/igt@kms_dirtyfb@psr-dirtyfb-ioctl.html * igt@kms_dither@fb-8bpc-vs-panel-6bpc: - shard-tglu-1: NOTRUN -> [SKIP][157] ([i915#1769] / [i915#3555] / [i915#3804]) [157]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-1/igt@kms_dither@fb-8bpc-vs-panel-6bpc.html * igt@kms_dither@fb-8bpc-vs-panel-6bpc@pipe-a-hdmi-a-1: - shard-tglu-1: NOTRUN -> [SKIP][158] ([i915#3804]) [158]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-1/igt@kms_dither@fb-8bpc-vs-panel-6bpc@pipe-a-hdmi-a-1.html * igt@kms_dsc@dsc-fractional-bpp: - shard-rkl: NOTRUN -> [SKIP][159] ([i915#3840]) [159]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-7/igt@kms_dsc@dsc-fractional-bpp.html * igt@kms_dsc@dsc-with-bpc: - shard-rkl: NOTRUN -> [SKIP][160] ([i915#3555] / [i915#3840]) [160]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-3/igt@kms_dsc@dsc-with-bpc.html * igt@kms_dsc@dsc-with-output-formats: - shard-tglu: NOTRUN -> [SKIP][161] ([i915#3555] / [i915#3840]) [161]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-10/igt@kms_dsc@dsc-with-output-formats.html * igt@kms_dsc@dsc-with-output-formats-with-bpc: - shard-dg1: NOTRUN -> [SKIP][162] ([i915#3840] / [i915#9053]) [162]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-13/igt@kms_dsc@dsc-with-output-formats-with-bpc.html * igt@kms_feature_discovery@display-4x: - shard-dg1: NOTRUN -> [SKIP][163] ([i915#1839]) +1 other test skip [163]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-18/igt@kms_feature_discovery@display-4x.html * igt@kms_flip@2x-flip-vs-dpms: - shard-dg1: NOTRUN -> [SKIP][164] ([i915#9934]) +4 other tests skip [164]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-13/igt@kms_flip@2x-flip-vs-dpms.html * igt@kms_flip@2x-flip-vs-expired-vblank-interruptible: - shard-mtlp: NOTRUN -> [SKIP][165] ([i915#3637]) +5 other tests skip [165]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-2/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible.html * igt@kms_flip@2x-flip-vs-fences: - shard-dg1: NOTRUN -> [SKIP][166] ([i915#8381]) [166]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-18/igt@kms_flip@2x-flip-vs-fences.html * igt@kms_flip@2x-flip-vs-panning-vs-hang: - shard-dg2: NOTRUN -> [SKIP][167] ([i915#9934]) +5 other tests skip [167]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-7/igt@kms_flip@2x-flip-vs-panning-vs-hang.html * igt@kms_flip@2x-plain-flip: - shard-rkl: NOTRUN -> [SKIP][168] ([i915#9934]) +5 other tests skip [168]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-7/igt@kms_flip@2x-plain-flip.html - shard-tglu-1: NOTRUN -> [SKIP][169] ([i915#3637]) +4 other tests skip [169]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-1/igt@kms_flip@2x-plain-flip.html * igt@kms_flip@flip-vs-absolute-wf_vblank-interruptible@a-hdmi-a2: - shard-rkl: NOTRUN -> [FAIL][170] ([i915#11989]) [170]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-1/igt@kms_flip@flip-vs-absolute-wf_vblank-interruptible@a-hdmi-a2.html * igt@kms_flip@flip-vs-absolute-wf_vblank-interruptible@b-edp1: - shard-mtlp: [PASS][171] -> [FAIL][172] ([i915#11989]) +2 other tests fail [171]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16046/shard-mtlp-2/igt@kms_flip@flip-vs-absolute-wf_vblank-interruptible@b-edp1.html [172]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-8/igt@kms_flip@flip-vs-absolute-wf_vblank-interruptible@b-edp1.html * igt@kms_flip@flip-vs-absolute-wf_vblank-interruptible@d-hdmi-a1: - shard-tglu: [PASS][173] -> [FAIL][174] ([i915#11989]) [173]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16046/shard-tglu-10/igt@kms_flip@flip-vs-absolute-wf_vblank-interruptible@d-hdmi-a1.html [174]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-7/igt@kms_flip@flip-vs-absolute-wf_vblank-interruptible@d-hdmi-a1.html * igt@kms_flip@flip-vs-fences-interruptible: - shard-dg2: NOTRUN -> [SKIP][175] ([i915#8381]) [175]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-10/igt@kms_flip@flip-vs-fences-interruptible.html * igt@kms_flip_scaled_crc@flip-32bpp-4tile-to-32bpp-4tiledg2rcccs-downscaling: - shard-tglu: NOTRUN -> [SKIP][176] ([i915#2672] / [i915#3555]) +3 other tests skip [176]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-6/igt@kms_flip_scaled_crc@flip-32bpp-4tile-to-32bpp-4tiledg2rcccs-downscaling.html * igt@kms_flip_scaled_crc@flip-32bpp-4tile-to-32bpp-4tiledg2rcccs-upscaling: - shard-rkl: NOTRUN -> [SKIP][177] ([i915#2672] / [i915#3555]) +4 other tests skip [177]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-3/igt@kms_flip_scaled_crc@flip-32bpp-4tile-to-32bpp-4tiledg2rcccs-upscaling.html * igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-64bpp-yftile-upscaling: - shard-tglu-1: NOTRUN -> [SKIP][178] ([i915#2672] / [i915#3555]) +1 other test skip [178]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-1/igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-64bpp-yftile-upscaling.html * igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-64bpp-yftile-upscaling@pipe-a-valid-mode: - shard-rkl: NOTRUN -> [SKIP][179] ([i915#2672]) +4 other tests skip [179]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-7/igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-64bpp-yftile-upscaling@pipe-a-valid-mode.html - shard-tglu-1: NOTRUN -> [SKIP][180] ([i915#2587] / [i915#2672]) +2 other tests skip [180]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-1/igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-64bpp-yftile-upscaling@pipe-a-valid-mode.html * igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytileccs-downscaling: - shard-dg1: NOTRUN -> [SKIP][181] ([i915#2587] / [i915#2672] / [i915#3555]) [181]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-18/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytileccs-downscaling.html * igt@kms_flip_scaled_crc@flip-32bpp-ytileccs-to-64bpp-ytile-upscaling: - shard-tglu-1: NOTRUN -> [SKIP][182] ([i915#2587] / [i915#2672] / [i915#3555]) [182]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-1/igt@kms_flip_scaled_crc@flip-32bpp-ytileccs-to-64bpp-ytile-upscaling.html * igt@kms_flip_scaled_crc@flip-32bpp-ytileccs-to-64bpp-ytile-upscaling@pipe-a-default-mode: - shard-mtlp: NOTRUN -> [SKIP][183] ([i915#2672] / [i915#8813]) [183]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-2/igt@kms_flip_scaled_crc@flip-32bpp-ytileccs-to-64bpp-ytile-upscaling@pipe-a-default-mode.html * igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tile-upscaling@pipe-a-valid-mode: - shard-tglu: NOTRUN -> [SKIP][184] ([i915#2587] / [i915#2672]) +3 other tests skip [184]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-10/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tile-upscaling@pipe-a-valid-mode.html * igt@kms_flip_scaled_crc@flip-64bpp-xtile-to-16bpp-xtile-downscaling: - shard-mtlp: NOTRUN -> [SKIP][185] ([i915#3555] / [i915#8810] / [i915#8813]) [185]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-2/igt@kms_flip_scaled_crc@flip-64bpp-xtile-to-16bpp-xtile-downscaling.html * igt@kms_flip_scaled_crc@flip-64bpp-xtile-to-16bpp-xtile-downscaling@pipe-a-default-mode: - shard-mtlp: NOTRUN -> [SKIP][186] ([i915#3555] / [i915#8810]) [186]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-2/igt@kms_flip_scaled_crc@flip-64bpp-xtile-to-16bpp-xtile-downscaling@pipe-a-default-mode.html * igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-32bpp-yftile-downscaling: - shard-dg2: NOTRUN -> [SKIP][187] ([i915#2672] / [i915#3555]) [187]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-7/igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-32bpp-yftile-downscaling.html * igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-32bpp-yftile-downscaling@pipe-a-valid-mode: - shard-dg2: NOTRUN -> [SKIP][188] ([i915#2672]) [188]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-7/igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-32bpp-yftile-downscaling@pipe-a-valid-mode.html * igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-32bpp-yftile-upscaling: - shard-dg1: NOTRUN -> [SKIP][189] ([i915#2672] / [i915#3555]) +1 other test skip [189]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-13/igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-32bpp-yftile-upscaling.html * igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-32bpp-yftile-upscaling@pipe-a-valid-mode: - shard-dg1: NOTRUN -> [SKIP][190] ([i915#2587] / [i915#2672]) +2 other tests skip [190]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-13/igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-32bpp-yftile-upscaling@pipe-a-valid-mode.html * igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilercccs-downscaling: - shard-mtlp: NOTRUN -> [SKIP][191] ([i915#2672] / [i915#3555] / [i915#8813]) +4 other tests skip [191]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-4/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilercccs-downscaling.html * igt@kms_frontbuffer_tracking@fbc-stridechange: - shard-dg2: [PASS][192] -> [FAIL][193] ([i915#6880]) [192]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16046/shard-dg2-4/igt@kms_frontbuffer_tracking@fbc-stridechange.html [193]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-5/igt@kms_frontbuffer_tracking@fbc-stridechange.html * igt@kms_frontbuffer_tracking@fbc-tiling-y: - shard-mtlp: NOTRUN -> [SKIP][194] ([i915#10055]) [194]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-4/igt@kms_frontbuffer_tracking@fbc-tiling-y.html * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-spr-indfb-draw-mmap-gtt: - shard-rkl: NOTRUN -> [SKIP][195] ([i915#3023]) +20 other tests skip [195]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-2/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-spr-indfb-draw-mmap-gtt.html * igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-cur-indfb-draw-mmap-wc: - shard-dg1: NOTRUN -> [SKIP][196] ([i915#8708]) +9 other tests skip [196]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-18/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-cur-indfb-draw-mmap-wc.html * igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-pri-indfb-draw-mmap-gtt: - shard-rkl: NOTRUN -> [SKIP][197] ([i915#1825]) +26 other tests skip [197]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-7/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-pri-indfb-draw-mmap-gtt.html * igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-pri-indfb-draw-render: - shard-dg1: NOTRUN -> [SKIP][198] +27 other tests skip [198]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-13/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-pri-indfb-draw-render.html * igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-pri-shrfb-draw-blt: - shard-mtlp: NOTRUN -> [SKIP][199] ([i915#1825]) +12 other tests skip [199]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-2/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-pri-shrfb-draw-blt.html * igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-pri-shrfb-draw-mmap-gtt: - shard-mtlp: NOTRUN -> [SKIP][200] ([i915#8708]) +2 other tests skip [200]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-2/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-pri-shrfb-draw-mmap-gtt.html * igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-spr-indfb-draw-pwrite: - shard-tglu-1: NOTRUN -> [SKIP][201] +57 other tests skip [201]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-1/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-spr-indfb-draw-pwrite.html * igt@kms_frontbuffer_tracking@fbcpsr-tiling-4: - shard-tglu: NOTRUN -> [SKIP][202] ([i915#5439]) [202]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-6/igt@kms_frontbuffer_tracking@fbcpsr-tiling-4.html * igt@kms_frontbuffer_tracking@pipe-fbc-rte: - shard-dg1: NOTRUN -> [SKIP][203] ([i915#9766]) [203]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-13/igt@kms_frontbuffer_tracking@pipe-fbc-rte.html * igt@kms_frontbuffer_tracking@psr-1p-primscrn-spr-indfb-draw-mmap-wc: - shard-dg2: NOTRUN -> [SKIP][204] ([i915#8708]) +9 other tests skip [204]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-10/igt@kms_frontbuffer_tracking@psr-1p-primscrn-spr-indfb-draw-mmap-wc.html * igt@kms_frontbuffer_tracking@psr-2p-primscrn-spr-indfb-onoff: - shard-dg2: NOTRUN -> [SKIP][205] ([i915#5354]) +11 other tests skip [205]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-10/igt@kms_frontbuffer_tracking@psr-2p-primscrn-spr-indfb-onoff.html * igt@kms_frontbuffer_tracking@psr-rgb101010-draw-render: - shard-dg2: NOTRUN -> [SKIP][206] ([i915#3458]) +5 other tests skip [206]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-2/igt@kms_frontbuffer_tracking@psr-rgb101010-draw-render.html * igt@kms_frontbuffer_tracking@psr-rgb565-draw-blt: - shard-tglu: NOTRUN -> [SKIP][207] +41 other tests skip [207]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-10/igt@kms_frontbuffer_tracking@psr-rgb565-draw-blt.html * igt@kms_frontbuffer_tracking@psr-rgb565-draw-pwrite: - shard-dg1: NOTRUN -> [SKIP][208] ([i915#3458]) +14 other tests skip [208]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-18/igt@kms_frontbuffer_tracking@psr-rgb565-draw-pwrite.html * igt@kms_hdr@bpc-switch: - shard-tglu: NOTRUN -> [SKIP][209] ([i915#3555] / [i915#8228]) +1 other test skip [209]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-10/igt@kms_hdr@bpc-switch.html * igt@kms_hdr@bpc-switch-suspend: - shard-tglu-1: NOTRUN -> [SKIP][210] ([i915#3555] / [i915#8228]) [210]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-1/igt@kms_hdr@bpc-switch-suspend.html * igt@kms_hdr@brightness-with-hdr: - shard-rkl: NOTRUN -> [SKIP][211] ([i915#12713]) [211]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-7/igt@kms_hdr@brightness-with-hdr.html * igt@kms_hdr@static-swap: - shard-rkl: NOTRUN -> [SKIP][212] ([i915#3555] / [i915#8228]) [212]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-3/igt@kms_hdr@static-swap.html * igt@kms_hdr@static-toggle: - shard-dg2: [PASS][213] -> [SKIP][214] ([i915#3555] / [i915#8228]) +1 other test skip [213]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16046/shard-dg2-10/igt@kms_hdr@static-toggle.html [214]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-4/igt@kms_hdr@static-toggle.html * igt@kms_invalid_mode@clock-too-high: - shard-mtlp: NOTRUN -> [SKIP][215] ([i915#3555] / [i915#6403] / [i915#8826]) [215]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-2/igt@kms_invalid_mode@clock-too-high.html * igt@kms_invalid_mode@clock-too-high@pipe-a-edp-1: - shard-mtlp: NOTRUN -> [SKIP][216] ([i915#9457]) +3 other tests skip [216]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-2/igt@kms_invalid_mode@clock-too-high@pipe-a-edp-1.html * igt@kms_joiner@basic-big-joiner: - shard-rkl: NOTRUN -> [SKIP][217] ([i915#10656]) [217]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-3/igt@kms_joiner@basic-big-joiner.html * igt@kms_joiner@basic-force-big-joiner: - shard-tglu-1: NOTRUN -> [SKIP][218] ([i915#12388]) [218]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-1/igt@kms_joiner@basic-force-big-joiner.html * igt@kms_joiner@basic-force-ultra-joiner: - shard-dg1: NOTRUN -> [SKIP][219] ([i915#12394]) [219]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-18/igt@kms_joiner@basic-force-ultra-joiner.html * igt@kms_joiner@basic-ultra-joiner: - shard-dg1: NOTRUN -> [SKIP][220] ([i915#12339]) [220]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-13/igt@kms_joiner@basic-ultra-joiner.html * igt@kms_joiner@invalid-modeset-force-big-joiner: - shard-dg2: [PASS][221] -> [SKIP][222] ([i915#12388]) [221]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16046/shard-dg2-10/igt@kms_joiner@invalid-modeset-force-big-joiner.html [222]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-1/igt@kms_joiner@invalid-modeset-force-big-joiner.html - shard-tglu: NOTRUN -> [SKIP][223] ([i915#12388]) [223]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-6/igt@kms_joiner@invalid-modeset-force-big-joiner.html * igt@kms_panel_fitting@atomic-fastset: - shard-dg1: NOTRUN -> [SKIP][224] ([i915#6301]) [224]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-18/igt@kms_panel_fitting@atomic-fastset.html * igt@kms_panel_fitting@legacy: - shard-rkl: NOTRUN -> [SKIP][225] ([i915#6301]) [225]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-7/igt@kms_panel_fitting@legacy.html * igt@kms_plane_multiple@tiling-yf: - shard-rkl: NOTRUN -> [SKIP][226] ([i915#3555]) +2 other tests skip [226]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-7/igt@kms_plane_multiple@tiling-yf.html - shard-tglu-1: NOTRUN -> [SKIP][227] ([i915#3555]) +1 other test skip [227]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-1/igt@kms_plane_multiple@tiling-yf.html * igt@kms_plane_scaling@intel-max-src-size: - shard-rkl: NOTRUN -> [SKIP][228] ([i915#6953]) [228]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-3/igt@kms_plane_scaling@intel-max-src-size.html * igt@kms_plane_scaling@plane-downscale-factor-0-25-with-pixel-format: - shard-dg1: NOTRUN -> [SKIP][229] ([i915#12247]) +9 other tests skip [229]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-13/igt@kms_plane_scaling@plane-downscale-factor-0-25-with-pixel-format.html * igt@kms_plane_scaling@plane-downscale-factor-0-5-with-pixel-format@pipe-a: - shard-mtlp: NOTRUN -> [SKIP][230] ([i915#12247]) +14 other tests skip [230]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-2/igt@kms_plane_scaling@plane-downscale-factor-0-5-with-pixel-format@pipe-a.html * igt@kms_plane_scaling@plane-downscale-factor-0-75-with-rotation: - shard-tglu: NOTRUN -> [SKIP][231] ([i915#12247]) +4 other tests skip [231]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-10/igt@kms_plane_scaling@plane-downscale-factor-0-75-with-rotation.html * igt@kms_plane_scaling@planes-downscale-factor-0-25-unity-scaling: - shard-dg2: NOTRUN -> [SKIP][232] ([i915#12247] / [i915#9423]) [232]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-7/igt@kms_plane_scaling@planes-downscale-factor-0-25-unity-scaling.html * igt@kms_plane_scaling@planes-downscale-factor-0-25-unity-scaling@pipe-d: - shard-dg2: NOTRUN -> [SKIP][233] ([i915#12247]) +7 other tests skip [233]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-7/igt@kms_plane_scaling@planes-downscale-factor-0-25-unity-scaling@pipe-d.html * igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-factor-0-25: - shard-dg2: NOTRUN -> [SKIP][234] ([i915#12247] / [i915#6953] / [i915#9423]) [234]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-2/igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-factor-0-25.html * igt@kms_plane_scaling@planes-downscale-factor-0-75: - shard-rkl: [PASS][235] -> [DMESG-WARN][236] ([i915#12964]) +8 other tests dmesg-warn [235]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16046/shard-rkl-3/igt@kms_plane_scaling@planes-downscale-factor-0-75.html [236]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-3/igt@kms_plane_scaling@planes-downscale-factor-0-75.html * igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-25: - shard-rkl: NOTRUN -> [SKIP][237] ([i915#12247] / [i915#3555]) [237]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-7/igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-25.html * igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-25@pipe-a: - shard-rkl: NOTRUN -> [SKIP][238] ([i915#12247]) +1 other test skip [238]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-7/igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-25@pipe-a.html * igt@kms_pm_backlight@basic-brightness: - shard-rkl: NOTRUN -> [SKIP][239] ([i915#5354]) [239]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-7/igt@kms_pm_backlight@basic-brightness.html * igt@kms_pm_backlight@fade: - shard-dg1: NOTRUN -> [SKIP][240] ([i915#5354]) [240]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-18/igt@kms_pm_backlight@fade.html * igt@kms_pm_dc@dc3co-vpb-simulation: - shard-dg1: NOTRUN -> [SKIP][241] ([i915#9685]) [241]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-13/igt@kms_pm_dc@dc3co-vpb-simulation.html * igt@kms_pm_dc@dc5-psr: - shard-tglu: NOTRUN -> [SKIP][242] ([i915#9685]) [242]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-6/igt@kms_pm_dc@dc5-psr.html * igt@kms_pm_dc@dc5-retention-flops: - shard-rkl: NOTRUN -> [SKIP][243] ([i915#3828]) [243]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-7/igt@kms_pm_dc@dc5-retention-flops.html - shard-tglu-1: NOTRUN -> [SKIP][244] ([i915#3828]) [244]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-1/igt@kms_pm_dc@dc5-retention-flops.html * igt@kms_pm_dc@dc9-dpms: - shard-tglu-1: NOTRUN -> [SKIP][245] ([i915#4281]) [245]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-1/igt@kms_pm_dc@dc9-dpms.html * igt@kms_pm_lpsp@kms-lpsp: - shard-tglu: NOTRUN -> [SKIP][246] ([i915#3828]) [246]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-10/igt@kms_pm_lpsp@kms-lpsp.html * igt@kms_pm_rpm@dpms-mode-unset-non-lpsp: - shard-rkl: NOTRUN -> [SKIP][247] ([i915#9519]) [247]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-7/igt@kms_pm_rpm@dpms-mode-unset-non-lpsp.html * igt@kms_pm_rpm@modeset-lpsp-stress-no-wait: - shard-dg2: NOTRUN -> [SKIP][248] ([i915#9519]) +1 other test skip [248]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-10/igt@kms_pm_rpm@modeset-lpsp-stress-no-wait.html * igt@kms_pm_rpm@modeset-non-lpsp-stress: - shard-rkl: [PASS][249] -> [SKIP][250] ([i915#9519]) +2 other tests skip [249]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16046/shard-rkl-5/igt@kms_pm_rpm@modeset-non-lpsp-stress.html [250]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-7/igt@kms_pm_rpm@modeset-non-lpsp-stress.html - shard-tglu-1: NOTRUN -> [SKIP][251] ([i915#9519]) [251]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-1/igt@kms_pm_rpm@modeset-non-lpsp-stress.html * igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait: - shard-mtlp: NOTRUN -> [SKIP][252] ([i915#9519]) [252]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-4/igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait.html * igt@kms_prime@basic-modeset-hybrid: - shard-rkl: NOTRUN -> [SKIP][253] ([i915#6524]) +1 other test skip [253]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-7/igt@kms_prime@basic-modeset-hybrid.html - shard-tglu-1: NOTRUN -> [SKIP][254] ([i915#6524]) [254]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-1/igt@kms_prime@basic-modeset-hybrid.html * igt@kms_psr2_sf@fbc-pr-overlay-plane-move-continuous-exceed-sf: - shard-snb: NOTRUN -> [SKIP][255] ([i915#11520]) +4 other tests skip [255]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-snb2/igt@kms_psr2_sf@fbc-pr-overlay-plane-move-continuous-exceed-sf.html * igt@kms_psr2_sf@fbc-pr-overlay-plane-move-continuous-sf: - shard-dg2: NOTRUN -> [SKIP][256] ([i915#11520]) +1 other test skip [256]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-7/igt@kms_psr2_sf@fbc-pr-overlay-plane-move-continuous-sf.html * igt@kms_psr2_sf@fbc-pr-overlay-plane-update-sf-dmg-area: - shard-tglu: NOTRUN -> [SKIP][257] ([i915#11520]) +5 other tests skip [257]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-6/igt@kms_psr2_sf@fbc-pr-overlay-plane-update-sf-dmg-area.html * igt@kms_psr2_sf@fbc-psr2-cursor-plane-update-sf@pipe-a-edp-1: - shard-mtlp: NOTRUN -> [SKIP][258] ([i915#9808]) +3 other tests skip [258]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-2/igt@kms_psr2_sf@fbc-psr2-cursor-plane-update-sf@pipe-a-edp-1.html * igt@kms_psr2_sf@fbc-psr2-overlay-plane-move-continuous-exceed-fully-sf: - shard-mtlp: NOTRUN -> [SKIP][259] ([i915#12316]) +1 other test skip [259]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-4/igt@kms_psr2_sf@fbc-psr2-overlay-plane-move-continuous-exceed-fully-sf.html * igt@kms_psr2_sf@fbc-psr2-overlay-primary-update-sf-dmg-area: - shard-tglu-1: NOTRUN -> [SKIP][260] ([i915#11520]) +5 other tests skip [260]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-1/igt@kms_psr2_sf@fbc-psr2-overlay-primary-update-sf-dmg-area.html * igt@kms_psr2_sf@fbc-psr2-plane-move-sf-dmg-area: - shard-dg1: NOTRUN -> [SKIP][261] ([i915#11520]) +5 other tests skip [261]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-18/igt@kms_psr2_sf@fbc-psr2-plane-move-sf-dmg-area.html * igt@kms_psr2_sf@pr-cursor-plane-move-continuous-exceed-fully-sf: - shard-rkl: NOTRUN -> [SKIP][262] ([i915#11520]) +8 other tests skip [262]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-2/igt@kms_psr2_sf@pr-cursor-plane-move-continuous-exceed-fully-sf.html * igt@kms_psr2_su@page_flip-xrgb8888: - shard-mtlp: NOTRUN -> [SKIP][263] ([i915#4348]) [263]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-2/igt@kms_psr2_su@page_flip-xrgb8888.html - shard-dg2: NOTRUN -> [SKIP][264] ([i915#9683]) [264]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-10/igt@kms_psr2_su@page_flip-xrgb8888.html * igt@kms_psr@fbc-pr-cursor-plane-onoff: - shard-dg1: NOTRUN -> [SKIP][265] ([i915#1072] / [i915#9732]) +15 other tests skip [265]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-18/igt@kms_psr@fbc-pr-cursor-plane-onoff.html * igt@kms_psr@fbc-psr-cursor-mmap-gtt@edp-1: - shard-mtlp: NOTRUN -> [SKIP][266] ([i915#9688]) +7 other tests skip [266]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-2/igt@kms_psr@fbc-psr-cursor-mmap-gtt@edp-1.html * igt@kms_psr@fbc-psr2-sprite-mmap-gtt: - shard-tglu-1: NOTRUN -> [SKIP][267] ([i915#9732]) +14 other tests skip [267]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-1/igt@kms_psr@fbc-psr2-sprite-mmap-gtt.html * igt@kms_psr@psr-cursor-render: - shard-dg2: NOTRUN -> [SKIP][268] ([i915#1072] / [i915#9732]) +11 other tests skip [268]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-10/igt@kms_psr@psr-cursor-render.html * igt@kms_psr@psr-sprite-blt: - shard-snb: NOTRUN -> [SKIP][269] +136 other tests skip [269]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-snb5/igt@kms_psr@psr-sprite-blt.html * igt@kms_psr@psr2-cursor-plane-onoff: - shard-tglu: NOTRUN -> [SKIP][270] ([i915#9732]) +9 other tests skip [270]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-10/igt@kms_psr@psr2-cursor-plane-onoff.html * igt@kms_psr@psr2-primary-mmap-gtt@edp-1: - shard-mtlp: NOTRUN -> [SKIP][271] ([i915#4077] / [i915#9688]) +1 other test skip [271]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-2/igt@kms_psr@psr2-primary-mmap-gtt@edp-1.html * igt@kms_psr@psr2-suspend: - shard-rkl: NOTRUN -> [SKIP][272] ([i915#1072] / [i915#9732]) +13 other tests skip [272]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-3/igt@kms_psr@psr2-suspend.html * igt@kms_psr_stress_test@flip-primary-invalidate-overlay: - shard-rkl: NOTRUN -> [SKIP][273] ([i915#9685]) [273]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-3/igt@kms_psr_stress_test@flip-primary-invalidate-overlay.html * igt@kms_psr_stress_test@invalidate-primary-flip-overlay: - shard-tglu-1: NOTRUN -> [SKIP][274] ([i915#9685]) [274]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-1/igt@kms_psr_stress_test@invalidate-primary-flip-overlay.html * igt@kms_rotation_crc@primary-4-tiled-reflect-x-0: - shard-rkl: NOTRUN -> [SKIP][275] ([i915#5289]) [275]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-2/igt@kms_rotation_crc@primary-4-tiled-reflect-x-0.html * igt@kms_rotation_crc@primary-yf-tiled-reflect-x-90: - shard-tglu-1: NOTRUN -> [SKIP][276] ([i915#5289]) [276]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-1/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-90.html - shard-mtlp: NOTRUN -> [SKIP][277] ([i915#12755]) [277]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-2/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-90.html * igt@kms_scaling_modes@scaling-mode-none: - shard-mtlp: NOTRUN -> [SKIP][278] ([i915#3555] / [i915#5030] / [i915#9041]) [278]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-4/igt@kms_scaling_modes@scaling-mode-none.html * igt@kms_scaling_modes@scaling-mode-none@pipe-a-edp-1: - shard-mtlp: NOTRUN -> [SKIP][279] ([i915#5030]) +2 other tests skip [279]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-4/igt@kms_scaling_modes@scaling-mode-none@pipe-a-edp-1.html * igt@kms_scaling_modes@scaling-mode-none@pipe-d-edp-1: - shard-mtlp: NOTRUN -> [SKIP][280] ([i915#5030] / [i915#9041]) [280]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-4/igt@kms_scaling_modes@scaling-mode-none@pipe-d-edp-1.html * igt@kms_selftest@drm_framebuffer: - shard-rkl: NOTRUN -> [ABORT][281] ([i915#13179]) +1 other test abort [281]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-1/igt@kms_selftest@drm_framebuffer.html * igt@kms_selftest@drm_framebuffer@drm_test_framebuffer_free: - shard-dg2: NOTRUN -> [ABORT][282] ([i915#13179]) +1 other test abort [282]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-10/igt@kms_selftest@drm_framebuffer@drm_test_framebuffer_free.html * igt@kms_setmode@clone-exclusive-crtc: - shard-dg2: NOTRUN -> [SKIP][283] ([i915#3555]) [283]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-7/igt@kms_setmode@clone-exclusive-crtc.html * igt@kms_tiled_display@basic-test-pattern: - shard-tglu-1: NOTRUN -> [SKIP][284] ([i915#8623]) [284]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-1/igt@kms_tiled_display@basic-test-pattern.html * igt@kms_vblank@query-forked-hang@pipe-a-hdmi-a-2: - shard-rkl: NOTRUN -> [DMESG-WARN][285] ([i915#12917] / [i915#12964]) [285]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-6/igt@kms_vblank@query-forked-hang@pipe-a-hdmi-a-2.html * igt@kms_vblank@ts-continuation-idle-hang: - shard-dg1: [PASS][286] -> [DMESG-WARN][287] ([i915#4423]) +3 other tests dmesg-warn [286]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16046/shard-dg1-17/igt@kms_vblank@ts-continuation-idle-hang.html [287]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-18/igt@kms_vblank@ts-continuation-idle-hang.html * igt@kms_vblank@wait-forked-busy-hang: - shard-rkl: NOTRUN -> [DMESG-WARN][288] ([i915#12964]) +15 other tests dmesg-warn [288]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-3/igt@kms_vblank@wait-forked-busy-hang.html * igt@kms_vrr@flip-basic-fastset: - shard-rkl: NOTRUN -> [SKIP][289] ([i915#9906]) [289]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-7/igt@kms_vrr@flip-basic-fastset.html * igt@kms_vrr@lobf: - shard-tglu: NOTRUN -> [SKIP][290] ([i915#11920]) [290]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-10/igt@kms_vrr@lobf.html * igt@kms_vrr@negative-basic: - shard-dg2: NOTRUN -> [SKIP][291] ([i915#3555] / [i915#9906]) [291]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-7/igt@kms_vrr@negative-basic.html * igt@kms_vrr@seamless-rr-switch-drrs: - shard-dg2: NOTRUN -> [SKIP][292] ([i915#9906]) [292]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-2/igt@kms_vrr@seamless-rr-switch-drrs.html * igt@kms_writeback@writeback-check-output-xrgb2101010: - shard-rkl: NOTRUN -> [SKIP][293] ([i915#2437] / [i915#9412]) [293]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-3/igt@kms_writeback@writeback-check-output-xrgb2101010.html * igt@kms_writeback@writeback-fb-id: - shard-tglu-1: NOTRUN -> [SKIP][294] ([i915#2437]) [294]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-1/igt@kms_writeback@writeback-fb-id.html * igt@kms_writeback@writeback-pixel-formats: - shard-mtlp: NOTRUN -> [SKIP][295] ([i915#2437] / [i915#9412]) +1 other test skip [295]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-2/igt@kms_writeback@writeback-pixel-formats.html - shard-tglu-1: NOTRUN -> [SKIP][296] ([i915#2437] / [i915#9412]) [296]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-1/igt@kms_writeback@writeback-pixel-formats.html * igt@perf@mi-rpc: - shard-rkl: NOTRUN -> [SKIP][297] ([i915#2434]) [297]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-7/igt@perf@mi-rpc.html * igt@perf_pmu@cpu-hotplug: - shard-rkl: NOTRUN -> [SKIP][298] ([i915#8850]) [298]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-3/igt@perf_pmu@cpu-hotplug.html * igt@perf_pmu@rc6-all-gts: - shard-dg1: NOTRUN -> [SKIP][299] ([i915#8516]) +1 other test skip [299]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-18/igt@perf_pmu@rc6-all-gts.html * igt@prime_mmap@test_aperture_limit: - shard-dg2: NOTRUN -> [WARN][300] ([i915#9351]) [300]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-10/igt@prime_mmap@test_aperture_limit.html * igt@prime_mmap@test_aperture_limit@test_aperture_limit-smem: - shard-dg2: NOTRUN -> [CRASH][301] ([i915#9351]) [301]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-10/igt@prime_mmap@test_aperture_limit@test_aperture_limit-smem.html * igt@prime_vgem@basic-read: - shard-mtlp: NOTRUN -> [SKIP][302] ([i915#3708]) [302]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-4/igt@prime_vgem@basic-read.html * igt@prime_vgem@fence-flip-hang: - shard-dg2: NOTRUN -> [SKIP][303] ([i915#3708]) [303]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-10/igt@prime_vgem@fence-flip-hang.html * igt@prime_vgem@fence-write-hang: - shard-dg1: NOTRUN -> [SKIP][304] ([i915#3708]) [304]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-18/igt@prime_vgem@fence-write-hang.html * igt@sriov_basic@bind-unbind-vf: - shard-rkl: NOTRUN -> [SKIP][305] ([i915#9917]) [305]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-2/igt@sriov_basic@bind-unbind-vf.html * igt@sysfs_heartbeat_interval@nopreempt: - shard-mtlp: [PASS][306] -> [ABORT][307] ([i915#13193]) [306]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16046/shard-mtlp-5/igt@sysfs_heartbeat_interval@nopreempt.html [307]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-7/igt@sysfs_heartbeat_interval@nopreempt.html * igt@tools_test@sysfs_l3_parity: - shard-rkl: NOTRUN -> [SKIP][308] +15 other tests skip [308]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-2/igt@tools_test@sysfs_l3_parity.html #### Possible fixes #### * igt@gem_create@create-ext-cpu-access-big: - shard-dg2: [ABORT][309] ([i915#13427]) -> [PASS][310] [309]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16046/shard-dg2-8/igt@gem_create@create-ext-cpu-access-big.html [310]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-7/igt@gem_create@create-ext-cpu-access-big.html * igt@gem_ctx_persistence@legacy-engines-mixed-process@vebox: - shard-mtlp: [DMESG-WARN][311] -> [PASS][312] [311]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16046/shard-mtlp-7/igt@gem_ctx_persistence@legacy-engines-mixed-process@vebox.html [312]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-7/igt@gem_ctx_persistence@legacy-engines-mixed-process@vebox.html * igt@gem_eio@in-flight-internal-immediate: - shard-mtlp: [ABORT][313] -> [PASS][314] [313]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16046/shard-mtlp-7/igt@gem_eio@in-flight-internal-immediate.html [314]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-4/igt@gem_eio@in-flight-internal-immediate.html * igt@gem_eio@unwedge-stress: - shard-mtlp: [ABORT][315] ([i915#13193]) -> [PASS][316] +1 other test pass [315]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16046/shard-mtlp-7/igt@gem_eio@unwedge-stress.html [316]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-2/igt@gem_eio@unwedge-stress.html * igt@gem_exec_suspend@basic-s0@smem: - shard-dg2: [INCOMPLETE][317] ([i915#11441] / [i915#13304]) -> [PASS][318] +1 other test pass [317]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16046/shard-dg2-7/igt@gem_exec_suspend@basic-s0@smem.html [318]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-2/igt@gem_exec_suspend@basic-s0@smem.html * igt@gem_lmem_swapping@smem-oom@lmem0: - shard-dg1: [TIMEOUT][319] ([i915#5493]) -> [PASS][320] +1 other test pass [319]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16046/shard-dg1-17/igt@gem_lmem_swapping@smem-oom@lmem0.html [320]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-13/igt@gem_lmem_swapping@smem-oom@lmem0.html * igt@kms_async_flips@alternate-sync-async-flip-atomic: - shard-tglu: [FAIL][321] ([i915#10991] / [i915#13320]) -> [PASS][322] [321]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16046/shard-tglu-9/igt@kms_async_flips@alternate-sync-async-flip-atomic.html [322]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-8/igt@kms_async_flips@alternate-sync-async-flip-atomic.html * igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-a-hdmi-a-1: - shard-tglu: [FAIL][323] ([i915#10991]) -> [PASS][324] [323]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16046/shard-tglu-9/igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-a-hdmi-a-1.html [324]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-8/igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-a-hdmi-a-1.html * igt@kms_atomic@plane-overlay-legacy: - shard-rkl: [DMESG-WARN][325] ([i915#12964]) -> [PASS][326] +8 other tests pass [325]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16046/shard-rkl-3/igt@kms_atomic@plane-overlay-legacy.html [326]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-3/igt@kms_atomic@plane-overlay-legacy.html * igt@kms_cursor_crc@cursor-onscreen-128x42: - shard-rkl: [FAIL][327] ([i915#13566]) -> [PASS][328] +6 other tests pass [327]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16046/shard-rkl-2/igt@kms_cursor_crc@cursor-onscreen-128x42.html [328]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-4/igt@kms_cursor_crc@cursor-onscreen-128x42.html * igt@kms_cursor_crc@cursor-sliding-128x42: - shard-tglu: [FAIL][329] ([i915#13566]) -> [PASS][330] +3 other tests pass [329]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16046/shard-tglu-7/igt@kms_cursor_crc@cursor-sliding-128x42.html [330]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-tglu-5/igt@kms_cursor_crc@cursor-sliding-128x42.html * igt@kms_flip@blocking-wf_vblank@b-hdmi-a2: - shard-rkl: [FAIL][331] ([i915#11989]) -> [PASS][332] +2 other tests pass [331]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16046/shard-rkl-5/igt@kms_flip@blocking-wf_vblank@b-hdmi-a2.html [332]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-5/igt@kms_flip@blocking-wf_vblank@b-hdmi-a2.html * igt@kms_hdr@bpc-switch-dpms: - shard-dg2: [SKIP][333] ([i915#3555] / [i915#8228]) -> [PASS][334] [333]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16046/shard-dg2-4/igt@kms_hdr@bpc-switch-dpms.html [334]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-10/igt@kms_hdr@bpc-switch-dpms.html * igt@kms_pm_rpm@modeset-non-lpsp: - shard-rkl: [SKIP][335] ([i915#9519]) -> [PASS][336] [335]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16046/shard-rkl-7/igt@kms_pm_rpm@modeset-non-lpsp.html [336]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-1/igt@kms_pm_rpm@modeset-non-lpsp.html * igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait: - shard-dg2: [SKIP][337] ([i915#9519]) -> [PASS][338] [337]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16046/shard-dg2-4/igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait.html [338]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-5/igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait.html #### Warnings #### * igt@kms_chamelium_audio@dp-audio: - shard-dg1: [SKIP][339] ([i915#11151] / [i915#7828]) -> [SKIP][340] ([i915#11151] / [i915#4423] / [i915#7828]) [339]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16046/shard-dg1-17/igt@kms_chamelium_audio@dp-audio.html [340]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-18/igt@kms_chamelium_audio@dp-audio.html * igt@kms_content_protection@mei-interface: - shard-dg1: [SKIP][341] ([i915#9424]) -> [SKIP][342] ([i915#9433]) [341]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16046/shard-dg1-14/igt@kms_content_protection@mei-interface.html [342]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-13/igt@kms_content_protection@mei-interface.html * igt@kms_fbcon_fbt@fbc-suspend: - shard-rkl: [DMESG-FAIL][343] ([i915#12964]) -> [INCOMPLETE][344] ([i915#9878]) [343]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16046/shard-rkl-4/igt@kms_fbcon_fbt@fbc-suspend.html [344]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-5/igt@kms_fbcon_fbt@fbc-suspend.html * igt@kms_frontbuffer_tracking@fbcpsr-1p-offscren-pri-indfb-draw-pwrite: - shard-dg2: [SKIP][345] ([i915#10433] / [i915#3458]) -> [SKIP][346] ([i915#3458]) +2 other tests skip [345]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16046/shard-dg2-4/igt@kms_frontbuffer_tracking@fbcpsr-1p-offscren-pri-indfb-draw-pwrite.html [346]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-10/igt@kms_frontbuffer_tracking@fbcpsr-1p-offscren-pri-indfb-draw-pwrite.html * igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-move: - shard-dg2: [SKIP][347] ([i915#3458]) -> [SKIP][348] ([i915#10433] / [i915#3458]) +1 other test skip [347]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16046/shard-dg2-10/igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-move.html [348]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg2-4/igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-move.html * igt@kms_hdr@brightness-with-hdr: - shard-mtlp: [SKIP][349] ([i915#12713]) -> [SKIP][350] ([i915#1187] / [i915#12713]) [349]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16046/shard-mtlp-2/igt@kms_hdr@brightness-with-hdr.html [350]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-mtlp-1/igt@kms_hdr@brightness-with-hdr.html - shard-dg1: [SKIP][351] ([i915#12713]) -> [SKIP][352] ([i915#1187] / [i915#12713]) [351]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16046/shard-dg1-17/igt@kms_hdr@brightness-with-hdr.html [352]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-dg1-13/igt@kms_hdr@brightness-with-hdr.html * igt@kms_multipipe_modeset@basic-max-pipe-crc-check: - shard-rkl: [SKIP][353] ([i915#4816]) -> [SKIP][354] ([i915#4070] / [i915#4816]) [353]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16046/shard-rkl-3/igt@kms_multipipe_modeset@basic-max-pipe-crc-check.html [354]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/shard-rkl-1/igt@kms_multipipe_modeset@basic-max-pipe-crc-check.html {name}: This element is suppressed. This means it is ignored when computing the status of the difference (SUCCESS, WARNING, or FAILURE). [i915#10055]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10055 [i915#10307]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10307 [i915#10433]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10433 [i915#10434]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10434 [i915#10656]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10656 [i915#1072]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1072 [i915#1099]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1099 [i915#10991]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10991 [i915#11151]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11151 [i915#11441]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11441 [i915#11520]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11520 [i915#11527]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11527 [i915#11616]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11616 [i915#11681]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11681 [i915#11808]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11808 [i915#1187]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1187 [i915#11920]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11920 [i915#11989]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11989 [i915#12247]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12247 [i915#12313]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12313 [i915#12316]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12316 [i915#12339]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12339 [i915#12388]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12388 [i915#12392]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12392 [i915#12394]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12394 [i915#12455]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12455 [i915#12713]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12713 [i915#12755]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12755 [i915#12805]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12805 [i915#12817]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12817 [i915#12917]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12917 [i915#12941]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12941 [i915#12964]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12964 [i915#13046]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13046 [i915#13049]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13049 [i915#13179]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13179 [i915#13193]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13193 [i915#13304]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13304 [i915#13320]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13320 [i915#13427]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13427 [i915#13566]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13566 [i915#1769]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1769 [i915#1825]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1825 [i915#1839]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1839 [i915#2434]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2434 [i915#2437]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2437 [i915#2527]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2527 [i915#2587]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2587 [i915#2672]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2672 [i915#280]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/280 [i915#2856]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2856 [i915#3023]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3023 [i915#3116]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3116 [i915#3281]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3281 [i915#3282]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3282 [i915#3297]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3297 [i915#3299]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3299 [i915#3323]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3323 [i915#3458]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3458 [i915#3469]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3469 [i915#3539]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3539 [i915#3555]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3555 [i915#3637]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3637 [i915#3638]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3638 [i915#3708]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3708 [i915#3804]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3804 [i915#3828]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3828 [i915#3840]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3840 [i915#3936]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3936 [i915#4070]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4070 [i915#4077]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4077 [i915#4079]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4079 [i915#4083]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4083 [i915#4103]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4103 [i915#4212]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4212 [i915#4213]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4213 [i915#4270]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4270 [i915#4281]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4281 [i915#4348]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4348 [i915#4387]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4387 [i915#4391]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4391 [i915#4423]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4423 [i915#4525]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4525 [i915#4537]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4537 [i915#4538]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4538 [i915#4613]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4613 [i915#4771]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4771 [i915#4812]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4812 [i915#4816]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4816 [i915#4852]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4852 [i915#4860]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4860 [i915#4879]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4879 [i915#4880]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4880 [i915#4885]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4885 [i915#5030]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5030 [i915#5190]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5190 [i915#5286]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5286 [i915#5289]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5289 [i915#5354]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5354 [i915#5439]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5439 [i915#5465]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5465 [i915#5493]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5493 [i915#5956]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5956 [i915#6095]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6095 [i915#6187]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6187 [i915#6188]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6188 [i915#6230]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6230 [i915#6301]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6301 [i915#6403]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6403 [i915#6524]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6524 [i915#6621]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6621 [i915#6805]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6805 [i915#6880]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6880 [i915#6944]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6944 [i915#6953]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6953 [i915#7116]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7116 [i915#7118]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7118 [i915#7173]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7173 [i915#7213]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7213 [i915#7297]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7297 [i915#7697]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7697 [i915#7828]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7828 [i915#7975]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7975 [i915#7984]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7984 [i915#8213]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8213 [i915#8228]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8228 [i915#8381]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8381 [i915#8411]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8411 [i915#8414]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8414 [i915#8428]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8428 [i915#8430]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8430 [i915#8516]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8516 [i915#8555]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8555 [i915#8623]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8623 [i915#8708]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8708 [i915#8709]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8709 [i915#8810]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8810 [i915#8812]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8812 [i915#8813]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8813 [i915#8814]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8814 [i915#8826]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8826 [i915#8850]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8850 [i915#9041]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9041 [i915#9053]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9053 [i915#9311]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9311 [i915#9318]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9318 [i915#9323]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9323 [i915#9351]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9351 [i915#9412]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9412 [i915#9423]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9423 [i915#9424]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9424 [i915#9433]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9433 [i915#9457]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9457 [i915#9519]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9519 [i915#9683]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9683 [i915#9685]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9685 [i915#9688]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9688 [i915#9723]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9723 [i915#9732]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9732 [i915#9766]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9766 [i915#9808]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9808 [i915#9809]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9809 [i915#9820]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9820 [i915#9833]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9833 [i915#9878]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9878 [i915#9906]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9906 [i915#9917]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9917 [i915#9934]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9934 [i915#9979]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9979 Build changes ------------- * Linux: CI_DRM_16046 -> Patchwork_141527v7 CI-20190529: 20190529 CI_DRM_16046: 54974a9354d844eca54feeec70870790fac17160 @ git://anongit.freedesktop.org/gfx-ci/linux IGT_8218: == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v7/index.html [-- Attachment #2: Type: text/html, Size: 125866 bytes --] ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH v6 0/7] drm/i915/xe3: FBC Dirty rect feature support 2025-01-30 21:00 [PATCH v6 0/7] drm/i915/xe3: FBC Dirty rect feature support Vinod Govindapillai ` (10 preceding siblings ...) 2025-01-31 1:13 ` ✗ i915.CI.Full: failure " Patchwork @ 2025-02-04 9:09 ` Jani Nikula 11 siblings, 0 replies; 28+ messages in thread From: Jani Nikula @ 2025-02-04 9:09 UTC (permalink / raw) To: Vinod Govindapillai, intel-gfx, intel-xe Cc: vinod.govindapillai, ville.syrjala, santhosh.reddy.guddati, jani.saarinen On Thu, 30 Jan 2025, Vinod Govindapillai <vinod.govindapillai@intel.com> wrote: > Dirty rect support for FBC in xe3 onwards based on the comments after the > initial RFC series. I think "drm/i915/fbc" subject prefix is more appropriate than "drm/i915/xe3". (Please don't resend just for that.) > > v2: Dirty rect related compute and storage moved to fbc state (Ville) > > V3: Dont call fbc activate if FBC is already active > > v4: Dirty rect compute and programming moved within DSB scope > New changes are added as separate patches to make it easy for review > But could be squashed if the reviews as ok. > > v5: add HAS_FBC_DIRTY_RECT() > FBC Damage area updates in 3 steps. > 1. As part of plane_atomic_check() get, adjust coordinates and store > the merged damage area in plane_state > 2. Atomic_commit, update merged damage are to fbc_state and prepare the > damage area satifying all conditions > 3 update the FBC dirty rect registers as part of DSB commit. > > v6: Use dmage_merged helper earlier to handle bigjoiner cases (Ville) > Place the damage_merged handling code under HAS_FBC_DIRTY_RECT() > Added a variable to check if the damage_merged received from > the helper is valid. And if it is not valid, the FBC dirty rect > is updated with full plane reqion. > > Vinod Govindapillai (7): > drm/i915/xe3: add register definitions for fbc dirty rect support > drm/i915/xe3: introduce HAS_FBC_DIRTY_RECT() for FBC dirty rect > support > drm/damage-helper: add const qualifier in > drm_atomic_helper_damage_merged() > drm/i915/xe3: update and store the plane damage clips > drm/i915/xe3: dirty rect support for FBC > drm/i915/xe3: avoid calling fbc activate if fbc is active > drm/i915/xe3: disable FBC if PSR2 selective fetch is enabled > > drivers/gpu/drm/drm_damage_helper.c | 2 +- > .../gpu/drm/i915/display/intel_atomic_plane.c | 28 ++++ > drivers/gpu/drm/i915/display/intel_display.c | 7 + > .../drm/i915/display/intel_display_device.h | 1 + > .../drm/i915/display/intel_display_types.h | 2 + > drivers/gpu/drm/i915/display/intel_fbc.c | 152 +++++++++++++++++- > drivers/gpu/drm/i915/display/intel_fbc.h | 6 + > drivers/gpu/drm/i915/display/intel_fbc_regs.h | 9 ++ > .../drm/i915/display/skl_universal_plane.c | 45 +++++- > include/drm/drm_damage_helper.h | 2 +- > 10 files changed, 246 insertions(+), 8 deletions(-) -- Jani Nikula, Intel ^ permalink raw reply [flat|nested] 28+ messages in thread
end of thread, other threads:[~2025-02-10 21:50 UTC | newest] Thread overview: 28+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-01-30 21:00 [PATCH v6 0/7] drm/i915/xe3: FBC Dirty rect feature support Vinod Govindapillai 2025-01-30 21:00 ` [PATCH v6 1/7] drm/i915/xe3: add register definitions for fbc dirty rect support Vinod Govindapillai 2025-02-05 9:42 ` Kandpal, Suraj 2025-01-30 21:00 ` [PATCH v6 2/7] drm/i915/xe3: introduce HAS_FBC_DIRTY_RECT() for FBC " Vinod Govindapillai 2025-02-05 9:43 ` Kandpal, Suraj 2025-01-30 21:00 ` [PATCH v6 3/7] drm/damage-helper: add const qualifier in drm_atomic_helper_damage_merged() Vinod Govindapillai 2025-02-04 9:08 ` Jani Nikula 2025-01-30 21:00 ` [PATCH v6 4/7] drm/i915/xe3: update and store the plane damage clips Vinod Govindapillai 2025-02-05 9:39 ` Kandpal, Suraj 2025-02-05 10:08 ` Jani Nikula 2025-02-05 11:21 ` Govindapillai, Vinod 2025-02-05 12:43 ` Ville Syrjälä 2025-02-05 13:29 ` Govindapillai, Vinod 2025-02-05 14:05 ` Ville Syrjälä 2025-01-30 21:00 ` [PATCH v6 5/7] drm/i915/xe3: dirty rect support for FBC Vinod Govindapillai 2025-02-05 13:31 ` Ville Syrjälä 2025-02-05 14:49 ` Govindapillai, Vinod 2025-02-05 15:45 ` Ville Syrjälä 2025-02-10 12:15 ` Govindapillai, Vinod 2025-02-10 21:49 ` Govindapillai, Vinod 2025-01-30 21:00 ` [PATCH v6 6/7] drm/i915/xe3: avoid calling fbc activate if fbc is active Vinod Govindapillai 2025-01-30 21:00 ` [PATCH v6 7/7] drm/i915/xe3: disable FBC if PSR2 selective fetch is enabled Vinod Govindapillai 2025-02-05 9:58 ` Kandpal, Suraj 2025-01-30 22:00 ` ✗ Fi.CI.CHECKPATCH: warning for drm/i915/xe3: FBC Dirty rect feature support (rev7) Patchwork 2025-01-30 22:00 ` ✗ Fi.CI.SPARSE: " Patchwork 2025-01-30 22:14 ` ✓ i915.CI.BAT: success " Patchwork 2025-01-31 1:13 ` ✗ i915.CI.Full: failure " Patchwork 2025-02-04 9:09 ` [PATCH v6 0/7] drm/i915/xe3: FBC Dirty rect feature support Jani Nikula
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox