* [PATCH v3 0/4] drm/i915/xe3: FBC Dirty rect feature support
@ 2025-01-14 12:07 Vinod Govindapillai
2025-01-14 12:07 ` [PATCH v3 1/4] drm/i915/display: avoid calling fbc activate if fbc is active Vinod Govindapillai
` (7 more replies)
0 siblings, 8 replies; 12+ messages in thread
From: Vinod Govindapillai @ 2025-01-14 12:07 UTC (permalink / raw)
To: intel-gfx, intel-xe
Cc: vinod.govindapillai, ville.syrjala, santhosh.reddy.guddati,
jani.saarinen, jouni.hogander
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
Vinod Govindapillai (4):
drm/i915/display: avoid calling fbc activate if fbc is active
drm/i915/xe: add register definitions for fbc dirty rect support
drm/i915/xe3: add dirty rect support for FBC
drm/i915/xe3: disable FBC if PSR2 selective fetch is enabled
drivers/gpu/drm/i915/display/intel_display.c | 4 +
drivers/gpu/drm/i915/display/intel_fbc.c | 108 +++++++++++++++++-
drivers/gpu/drm/i915/display/intel_fbc.h | 4 +
drivers/gpu/drm/i915/display/intel_fbc_regs.h | 9 ++
4 files changed, 121 insertions(+), 4 deletions(-)
--
2.43.0
^ permalink raw reply [flat|nested] 12+ messages in thread* [PATCH v3 1/4] drm/i915/display: avoid calling fbc activate if fbc is active 2025-01-14 12:07 [PATCH v3 0/4] drm/i915/xe3: FBC Dirty rect feature support Vinod Govindapillai @ 2025-01-14 12:07 ` Vinod Govindapillai 2025-01-17 12:49 ` Ville Syrjälä 2025-01-14 12:07 ` [PATCH v3 2/4] drm/i915/xe: add register definitions for fbc dirty rect support Vinod Govindapillai ` (6 subsequent siblings) 7 siblings, 1 reply; 12+ messages in thread From: Vinod Govindapillai @ 2025-01-14 12:07 UTC (permalink / raw) To: intel-gfx, intel-xe Cc: vinod.govindapillai, ville.syrjala, santhosh.reddy.guddati, jani.saarinen, jouni.hogander If FBC is already active, we don't need to call FBC activate routine again during the post plane update. As this will explicitly call the nuke and also rewrite the FBC ctl registers. "intel_atomic_commit_tail-> intel_post_plane_update-> intel_fbc_post_update-> _intel_fbc_post_update" path will be executed during the normal flip cases. FBC HW will nuke on sync flip event and driver do not need to call the nuke explicitly. This is much more relevant in case of dirty rectangle support in FBC with the followup patches. Nuke on flip in that case will remove all the benefits of fetching only the modified region. 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. Signed-off-by: Vinod Govindapillai <vinod.govindapillai@intel.com> --- drivers/gpu/drm/i915/display/intel_fbc.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/i915/display/intel_fbc.c b/drivers/gpu/drm/i915/display/intel_fbc.c index df05904bac8a..fd540ff5e57e 100644 --- a/drivers/gpu/drm/i915/display/intel_fbc.c +++ b/drivers/gpu/drm/i915/display/intel_fbc.c @@ -1561,7 +1561,8 @@ static void __intel_fbc_post_update(struct intel_fbc *fbc) fbc->flip_pending = false; fbc->busy_bits = 0; - intel_fbc_activate(fbc); + if (!fbc->active) + intel_fbc_activate(fbc); } void intel_fbc_post_update(struct intel_atomic_state *state, -- 2.43.0 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH v3 1/4] drm/i915/display: avoid calling fbc activate if fbc is active 2025-01-14 12:07 ` [PATCH v3 1/4] drm/i915/display: avoid calling fbc activate if fbc is active Vinod Govindapillai @ 2025-01-17 12:49 ` Ville Syrjälä 2025-01-21 8:55 ` Govindapillai, Vinod 0 siblings, 1 reply; 12+ messages in thread From: Ville Syrjälä @ 2025-01-17 12:49 UTC (permalink / raw) To: Vinod Govindapillai Cc: intel-gfx, intel-xe, ville.syrjala, santhosh.reddy.guddati, jani.saarinen, jouni.hogander On Tue, Jan 14, 2025 at 02:07:16PM +0200, Vinod Govindapillai wrote: > If FBC is already active, we don't need to call FBC activate > routine again during the post plane update. As this will > explicitly call the nuke and also rewrite the FBC ctl registers. > "intel_atomic_commit_tail-> intel_post_plane_update-> > intel_fbc_post_update-> _intel_fbc_post_update" path will be > executed during the normal flip cases. FBC HW will nuke on sync > flip event and driver do not need to call the nuke explicitly. > This is much more relevant in case of dirty rectangle support > in FBC with the followup patches. Nuke on flip in that case will > remove all the benefits of fetching only the modified region. > > 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. > > Signed-off-by: Vinod Govindapillai <vinod.govindapillai@intel.com> > --- > drivers/gpu/drm/i915/display/intel_fbc.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_fbc.c b/drivers/gpu/drm/i915/display/intel_fbc.c > index df05904bac8a..fd540ff5e57e 100644 > --- a/drivers/gpu/drm/i915/display/intel_fbc.c > +++ b/drivers/gpu/drm/i915/display/intel_fbc.c > @@ -1561,7 +1561,8 @@ static void __intel_fbc_post_update(struct intel_fbc *fbc) > fbc->flip_pending = false; > fbc->busy_bits = 0; > > - intel_fbc_activate(fbc); > + if (!fbc->active) > + intel_fbc_activate(fbc); We'll need to keep the actual activate part (eg. to update the fence). But we should be able to elide the explicit nuke if FBC was already active (that implies a flip nuke has occurred anyway, vs. if FBC was previously disabled then it might have been disabled by a frontbuffer invalidate and if it hasn't been disabled for a full frame then the hardware won't automagically cause a nuke when we reactivate it). > } > > void intel_fbc_post_update(struct intel_atomic_state *state, > -- > 2.43.0 -- Ville Syrjälä Intel ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v3 1/4] drm/i915/display: avoid calling fbc activate if fbc is active 2025-01-17 12:49 ` Ville Syrjälä @ 2025-01-21 8:55 ` Govindapillai, Vinod 0 siblings, 0 replies; 12+ messages in thread From: Govindapillai, Vinod @ 2025-01-21 8:55 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, Hogander, Jouni On Fri, 2025-01-17 at 14:49 +0200, Ville Syrjälä wrote: > On Tue, Jan 14, 2025 at 02:07:16PM +0200, Vinod Govindapillai wrote: > > If FBC is already active, we don't need to call FBC activate > > routine again during the post plane update. As this will > > explicitly call the nuke and also rewrite the FBC ctl registers. > > "intel_atomic_commit_tail-> intel_post_plane_update-> > > intel_fbc_post_update-> _intel_fbc_post_update" path will be > > executed during the normal flip cases. FBC HW will nuke on sync > > flip event and driver do not need to call the nuke explicitly. > > This is much more relevant in case of dirty rectangle support > > in FBC with the followup patches. Nuke on flip in that case will > > remove all the benefits of fetching only the modified region. > > > > 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. > > > > Signed-off-by: Vinod Govindapillai <vinod.govindapillai@intel.com> > > --- > > drivers/gpu/drm/i915/display/intel_fbc.c | 3 ++- > > 1 file changed, 2 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/gpu/drm/i915/display/intel_fbc.c b/drivers/gpu/drm/i915/display/intel_fbc.c > > index df05904bac8a..fd540ff5e57e 100644 > > --- a/drivers/gpu/drm/i915/display/intel_fbc.c > > +++ b/drivers/gpu/drm/i915/display/intel_fbc.c > > @@ -1561,7 +1561,8 @@ static void __intel_fbc_post_update(struct intel_fbc *fbc) > > fbc->flip_pending = false; > > fbc->busy_bits = 0; > > > > - intel_fbc_activate(fbc); > > + if (!fbc->active) > > + intel_fbc_activate(fbc); > > We'll need to keep the actual activate part (eg. to update the fence). > But we should be able to elide the explicit nuke if FBC was already > active (that implies a flip nuke has occurred anyway, vs. if FBC was > previously disabled then it might have been disabled by a frontbuffer > invalidate and if it hasn't been disabled for a full frame then the > hardware won't automagically cause a nuke when we reactivate it). Thanks Ville! Okay! I have something like this now! But facing some weird issues! index df05904bac8a..f05c61040d19 100644 --- a/drivers/gpu/drm/i915/display/intel_fbc.c +++ b/drivers/gpu/drm/i915/display/intel_fbc.c @@ -739,10 +739,22 @@ static void intel_fbc_nuke(struct intel_fbc *fbc) static void intel_fbc_activate(struct intel_fbc *fbc) { + bool fbc_already_active; + lockdep_assert_held(&fbc->lock); + fbc_already_active = fbc->active; + intel_fbc_hw_activate(fbc); - intel_fbc_nuke(fbc); + + /* + * If FBC is already active, don't nuke. + * In normal flips after FBC is enabled, FBC hw will nuke on flip + * In case of frontbuffer rendering cases, invalidate, flush sequence + * will handle the nuke + */ + if (!fbc_already_active) + intel_fbc_nuke(fbc); So the nuke won't be called from normal flips if fbc is already active. So the intel_fbc_hw_activate will be called always - which programs override stride, no fences in case of xe, and reprograms FBC_CTL and FBC_DIRTYRECT_CTL registers with the same values! But the weird thing is, with this damaged area update don't have any effect. The whole region is getting updated! But if I avoid calling the intel_fbc_hw_activate() completely, i can see only those damaged rect area being updated! Initially I thought as we rewrite FBC_DIRTYRECT_CTL enable again, that could cause the first frame being taking the whole plane size as the update region. But after experimenting with those, narrowed it to glk_fbc_program_cfb_stride() call! Somehow programming glk_fbc_program_cfb_stride() is causing entire region being updated! Do you have any pointers on this? Thanks Vinod > > > } > > > > void intel_fbc_post_update(struct intel_atomic_state *state, > > -- > > 2.43.0 > ^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v3 2/4] drm/i915/xe: add register definitions for fbc dirty rect support 2025-01-14 12:07 [PATCH v3 0/4] drm/i915/xe3: FBC Dirty rect feature support Vinod Govindapillai 2025-01-14 12:07 ` [PATCH v3 1/4] drm/i915/display: avoid calling fbc activate if fbc is active Vinod Govindapillai @ 2025-01-14 12:07 ` Vinod Govindapillai 2025-01-14 12:07 ` [PATCH v3 3/4] drm/i915/xe3: add dirty rect support for FBC Vinod Govindapillai ` (5 subsequent siblings) 7 siblings, 0 replies; 12+ messages in thread From: Vinod Govindapillai @ 2025-01-14 12:07 UTC (permalink / raw) To: intel-gfx, intel-xe Cc: vinod.govindapillai, ville.syrjala, santhosh.reddy.guddati, jani.saarinen, jouni.hogander 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] 12+ messages in thread
* [PATCH v3 3/4] drm/i915/xe3: add dirty rect support for FBC 2025-01-14 12:07 [PATCH v3 0/4] drm/i915/xe3: FBC Dirty rect feature support Vinod Govindapillai 2025-01-14 12:07 ` [PATCH v3 1/4] drm/i915/display: avoid calling fbc activate if fbc is active Vinod Govindapillai 2025-01-14 12:07 ` [PATCH v3 2/4] drm/i915/xe: add register definitions for fbc dirty rect support Vinod Govindapillai @ 2025-01-14 12:07 ` Vinod Govindapillai 2025-01-17 13:00 ` Ville Syrjälä 2025-01-14 12:07 ` [PATCH v3 4/4] drm/i915/xe3: disable FBC if PSR2 selective fetch is enabled Vinod Govindapillai ` (4 subsequent siblings) 7 siblings, 1 reply; 12+ messages in thread From: Vinod Govindapillai @ 2025-01-14 12:07 UTC (permalink / raw) To: intel-gfx, intel-xe Cc: vinod.govindapillai, ville.syrjala, santhosh.reddy.guddati, jani.saarinen, jouni.hogander 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. v2: Move dirty rect handling to fbc state (Ville) Bspec: 71675, 73424 Signed-off-by: Vinod Govindapillai <vinod.govindapillai@intel.com> --- drivers/gpu/drm/i915/display/intel_display.c | 4 + drivers/gpu/drm/i915/display/intel_fbc.c | 96 +++++++++++++++++++- drivers/gpu/drm/i915/display/intel_fbc.h | 4 + 3 files changed, 103 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c index 4271da219b41..d381dce04755 100644 --- a/drivers/gpu/drm/i915/display/intel_display.c +++ b/drivers/gpu/drm/i915/display/intel_display.c @@ -7209,6 +7209,8 @@ static void intel_update_crtc(struct intel_atomic_state *state, commit_pipe_pre_planes(state, crtc); + intel_fbc_program_dirty_rect(NULL, state, crtc); + intel_crtc_planes_update_arm(NULL, state, crtc); commit_pipe_post_planes(state, crtc); @@ -7678,6 +7680,8 @@ static void intel_atomic_dsb_finish(struct intel_atomic_state *state, new_crtc_state); bdw_set_pipe_misc(new_crtc_state->dsb_commit, new_crtc_state); + intel_fbc_program_dirty_rect(new_crtc_state->dsb_commit, + state, crtc); intel_crtc_planes_update_arm(new_crtc_state->dsb_commit, state, crtc); diff --git a/drivers/gpu/drm/i915/display/intel_fbc.c b/drivers/gpu/drm/i915/display/intel_fbc.c index fd540ff5e57e..f15cddba9bb0 100644 --- a/drivers/gpu/drm/i915/display/intel_fbc.c +++ b/drivers/gpu/drm/i915/display/intel_fbc.c @@ -42,6 +42,7 @@ #include <linux/string_helpers.h> #include <drm/drm_blend.h> +#include <drm/drm_damage_helper.h> #include <drm/drm_fourcc.h> #include "gem/i915_gem_stolen.h" @@ -58,6 +59,7 @@ #include "intel_display_trace.h" #include "intel_display_types.h" #include "intel_display_wa.h" +#include "intel_dsb.h" #include "intel_fbc.h" #include "intel_fbc_regs.h" #include "intel_frontbuffer.h" @@ -88,6 +90,7 @@ struct intel_fbc_state { u16 override_cfb_stride; u16 interval; s8 fence_id; + struct drm_rect dirty_rect; }; struct intel_fbc { @@ -527,6 +530,9 @@ static void ilk_fbc_deactivate(struct intel_fbc *fbc) struct intel_display *display = fbc->display; u32 dpfc_ctl; + if (DISPLAY_VER(display) >= 30) + 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 +676,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 (DISPLAY_VER(display) >= 30) + 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 +1213,85 @@ static bool tiling_is_valid(const struct intel_plane_state *plane_state) return i8xx_fbc_tiling_valid(plane_state); } +static void +__intel_fbc_program_dirty_rect(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; + + if (fbc_state->plane != plane) + return; + + intel_de_write_dsb(display, dsb, XE3_FBC_DIRTY_RECT(fbc->id), + FBC_DIRTY_RECT_START_LINE(fbc_state->dirty_rect.y1) | + FBC_DIRTY_RECT_END_LINE(fbc_state->dirty_rect.y2)); +} + +void +intel_fbc_program_dirty_rect(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 __maybe_unused *plane_state; + struct intel_plane *plane; + int i; + + if (DISPLAY_VER(display) < 30) + 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; + + __intel_fbc_program_dirty_rect(dsb, plane); + } +} + + +static void +update_dirty_rect_to_full_region(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; + + dirty_rect->y1 = y_offset; + dirty_rect->y2 = y_offset + plane_height - 1; +} + +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; + + 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_compute_dirty_rect(struct intel_plane *plane, + struct intel_plane_state *old_plane_state, + struct intel_plane_state *new_plane_state) +{ + struct intel_fbc *fbc = plane->fbc; + struct intel_fbc_state *fbc_state = &fbc->state; + struct drm_rect *fbc_dirty_rect = &fbc_state->dirty_rect; + + if (drm_atomic_helper_damage_merged(&old_plane_state->uapi, + &new_plane_state->uapi, + fbc_dirty_rect)) + validate_and_clip_dirty_rect(new_plane_state, fbc_dirty_rect); + else + update_dirty_rect_to_full_region(new_plane_state, fbc_dirty_rect); +} + static void intel_fbc_update_state(struct intel_atomic_state *state, struct intel_crtc *crtc, struct intel_plane *plane) @@ -1210,8 +1299,10 @@ static void intel_fbc_update_state(struct intel_atomic_state *state, struct intel_display *display = to_intel_display(state->base.dev); const struct intel_crtc_state *crtc_state = intel_atomic_get_new_crtc_state(state, crtc); - const struct intel_plane_state *plane_state = + struct intel_plane_state *plane_state = intel_atomic_get_new_plane_state(state, plane); + struct intel_plane_state *old_plane_state = + intel_atomic_get_old_plane_state(state, plane); struct intel_fbc *fbc = plane->fbc; struct intel_fbc_state *fbc_state = &fbc->state; @@ -1236,6 +1327,9 @@ static void intel_fbc_update_state(struct intel_atomic_state *state, fbc_state->cfb_stride = intel_fbc_cfb_stride(plane_state); fbc_state->cfb_size = intel_fbc_cfb_size(plane_state); fbc_state->override_cfb_stride = intel_fbc_override_cfb_stride(plane_state); + + if (DISPLAY_VER(display) >= 30) + intel_fbc_compute_dirty_rect(plane, old_plane_state, plane_state); } static bool intel_fbc_is_fence_ok(const struct intel_plane_state *plane_state) diff --git a/drivers/gpu/drm/i915/display/intel_fbc.h b/drivers/gpu/drm/i915/display/intel_fbc.h index ceae55458e14..acaebe15f312 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,8 @@ 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_program_dirty_rect(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] 12+ messages in thread
* Re: [PATCH v3 3/4] drm/i915/xe3: add dirty rect support for FBC 2025-01-14 12:07 ` [PATCH v3 3/4] drm/i915/xe3: add dirty rect support for FBC Vinod Govindapillai @ 2025-01-17 13:00 ` Ville Syrjälä 0 siblings, 0 replies; 12+ messages in thread From: Ville Syrjälä @ 2025-01-17 13:00 UTC (permalink / raw) To: Vinod Govindapillai Cc: intel-gfx, intel-xe, ville.syrjala, santhosh.reddy.guddati, jani.saarinen, jouni.hogander On Tue, Jan 14, 2025 at 02:07:18PM +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. > > v2: Move dirty rect handling to fbc state (Ville) > > Bspec: 71675, 73424 > Signed-off-by: Vinod Govindapillai <vinod.govindapillai@intel.com> > --- > drivers/gpu/drm/i915/display/intel_display.c | 4 + > drivers/gpu/drm/i915/display/intel_fbc.c | 96 +++++++++++++++++++- > drivers/gpu/drm/i915/display/intel_fbc.h | 4 + > 3 files changed, 103 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c > index 4271da219b41..d381dce04755 100644 > --- a/drivers/gpu/drm/i915/display/intel_display.c > +++ b/drivers/gpu/drm/i915/display/intel_display.c > @@ -7209,6 +7209,8 @@ static void intel_update_crtc(struct intel_atomic_state *state, > > commit_pipe_pre_planes(state, crtc); > > + intel_fbc_program_dirty_rect(NULL, state, crtc); > + The problem for the DSB case is that we haven't done the fbc_update() thing yet, so we don't actually know what the FBC state should be here. So we probably need to make some kind of early dirty rect only state update before we build the DSB commands. I think it should be sufficient to check intel_fbc_can_flip_nuke(), and if that passes then we update the dirty rect ahead of time. We may also want a flag to indicate whether the dirty rect is valid or not so that we don't end up programming a bunch of garbage into the hardware when we're not doing a flip nuke (dunno if dirty rect == empty can be used instead for that?). > intel_crtc_planes_update_arm(NULL, state, crtc); > > commit_pipe_post_planes(state, crtc); > @@ -7678,6 +7680,8 @@ static void intel_atomic_dsb_finish(struct intel_atomic_state *state, > new_crtc_state); > bdw_set_pipe_misc(new_crtc_state->dsb_commit, > new_crtc_state); > + intel_fbc_program_dirty_rect(new_crtc_state->dsb_commit, > + state, crtc); > intel_crtc_planes_update_arm(new_crtc_state->dsb_commit, > state, crtc); > > diff --git a/drivers/gpu/drm/i915/display/intel_fbc.c b/drivers/gpu/drm/i915/display/intel_fbc.c > index fd540ff5e57e..f15cddba9bb0 100644 > --- a/drivers/gpu/drm/i915/display/intel_fbc.c > +++ b/drivers/gpu/drm/i915/display/intel_fbc.c > @@ -42,6 +42,7 @@ > #include <linux/string_helpers.h> > > #include <drm/drm_blend.h> > +#include <drm/drm_damage_helper.h> > #include <drm/drm_fourcc.h> > > #include "gem/i915_gem_stolen.h" > @@ -58,6 +59,7 @@ > #include "intel_display_trace.h" > #include "intel_display_types.h" > #include "intel_display_wa.h" > +#include "intel_dsb.h" > #include "intel_fbc.h" > #include "intel_fbc_regs.h" > #include "intel_frontbuffer.h" > @@ -88,6 +90,7 @@ struct intel_fbc_state { > u16 override_cfb_stride; > u16 interval; > s8 fence_id; > + struct drm_rect dirty_rect; > }; > > struct intel_fbc { > @@ -527,6 +530,9 @@ static void ilk_fbc_deactivate(struct intel_fbc *fbc) > struct intel_display *display = fbc->display; > u32 dpfc_ctl; > > + if (DISPLAY_VER(display) >= 30) > + 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 +676,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 (DISPLAY_VER(display) >= 30) > + 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 +1213,85 @@ static bool tiling_is_valid(const struct intel_plane_state *plane_state) > return i8xx_fbc_tiling_valid(plane_state); > } > > +static void > +__intel_fbc_program_dirty_rect(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; > + > + if (fbc_state->plane != plane) > + return; > + > + intel_de_write_dsb(display, dsb, XE3_FBC_DIRTY_RECT(fbc->id), > + FBC_DIRTY_RECT_START_LINE(fbc_state->dirty_rect.y1) | > + FBC_DIRTY_RECT_END_LINE(fbc_state->dirty_rect.y2)); > +} > + > +void > +intel_fbc_program_dirty_rect(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 __maybe_unused *plane_state; > + struct intel_plane *plane; > + int i; > + > + if (DISPLAY_VER(display) < 30) > + 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; > + > + __intel_fbc_program_dirty_rect(dsb, plane); > + } > +} > + > + > +static void > +update_dirty_rect_to_full_region(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; > + > + dirty_rect->y1 = y_offset; > + dirty_rect->y2 = y_offset + plane_height - 1; > +} > + > +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; > + > + 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_compute_dirty_rect(struct intel_plane *plane, > + struct intel_plane_state *old_plane_state, > + struct intel_plane_state *new_plane_state) > +{ > + struct intel_fbc *fbc = plane->fbc; > + struct intel_fbc_state *fbc_state = &fbc->state; > + struct drm_rect *fbc_dirty_rect = &fbc_state->dirty_rect; > + > + if (drm_atomic_helper_damage_merged(&old_plane_state->uapi, > + &new_plane_state->uapi, > + fbc_dirty_rect)) > + validate_and_clip_dirty_rect(new_plane_state, fbc_dirty_rect); > + else > + update_dirty_rect_to_full_region(new_plane_state, fbc_dirty_rect); > +} > + > static void intel_fbc_update_state(struct intel_atomic_state *state, > struct intel_crtc *crtc, > struct intel_plane *plane) > @@ -1210,8 +1299,10 @@ static void intel_fbc_update_state(struct intel_atomic_state *state, > struct intel_display *display = to_intel_display(state->base.dev); > const struct intel_crtc_state *crtc_state = > intel_atomic_get_new_crtc_state(state, crtc); > - const struct intel_plane_state *plane_state = > + struct intel_plane_state *plane_state = > intel_atomic_get_new_plane_state(state, plane); > + struct intel_plane_state *old_plane_state = > + intel_atomic_get_old_plane_state(state, plane); > struct intel_fbc *fbc = plane->fbc; > struct intel_fbc_state *fbc_state = &fbc->state; > > @@ -1236,6 +1327,9 @@ static void intel_fbc_update_state(struct intel_atomic_state *state, > fbc_state->cfb_stride = intel_fbc_cfb_stride(plane_state); > fbc_state->cfb_size = intel_fbc_cfb_size(plane_state); > fbc_state->override_cfb_stride = intel_fbc_override_cfb_stride(plane_state); > + > + if (DISPLAY_VER(display) >= 30) > + intel_fbc_compute_dirty_rect(plane, old_plane_state, plane_state); > } > > static bool intel_fbc_is_fence_ok(const struct intel_plane_state *plane_state) > diff --git a/drivers/gpu/drm/i915/display/intel_fbc.h b/drivers/gpu/drm/i915/display/intel_fbc.h > index ceae55458e14..acaebe15f312 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,8 @@ 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_program_dirty_rect(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] 12+ messages in thread
* [PATCH v3 4/4] drm/i915/xe3: disable FBC if PSR2 selective fetch is enabled 2025-01-14 12:07 [PATCH v3 0/4] drm/i915/xe3: FBC Dirty rect feature support Vinod Govindapillai ` (2 preceding siblings ...) 2025-01-14 12:07 ` [PATCH v3 3/4] drm/i915/xe3: add dirty rect support for FBC Vinod Govindapillai @ 2025-01-14 12:07 ` Vinod Govindapillai 2025-01-14 14:46 ` ✗ Fi.CI.CHECKPATCH: warning for drm/i915/xe3: FBC Dirty rect feature support (rev3) Patchwork ` (3 subsequent siblings) 7 siblings, 0 replies; 12+ messages in thread From: Vinod Govindapillai @ 2025-01-14 12:07 UTC (permalink / raw) To: intel-gfx, intel-xe Cc: vinod.govindapillai, ville.syrjala, santhosh.reddy.guddati, jani.saarinen, jouni.hogander It is not recommended to have both FBC and PSR2 selective fetch be enabled at the same time in a plane. If PSR2 selective fetch or panel replay is on, mark FBC as not possible in that plane. v2: fix the condition to disable FBC if PSR2 enabled (Jani) 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 f15cddba9bb0..5f4809f1359d 100644 --- a/drivers/gpu/drm/i915/display/intel_fbc.c +++ b/drivers/gpu/drm/i915/display/intel_fbc.c @@ -1432,9 +1432,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) || DISPLAY_VER(display) >= 30) && + 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] 12+ messages in thread
* ✗ Fi.CI.CHECKPATCH: warning for drm/i915/xe3: FBC Dirty rect feature support (rev3) 2025-01-14 12:07 [PATCH v3 0/4] drm/i915/xe3: FBC Dirty rect feature support Vinod Govindapillai ` (3 preceding siblings ...) 2025-01-14 12:07 ` [PATCH v3 4/4] drm/i915/xe3: disable FBC if PSR2 selective fetch is enabled Vinod Govindapillai @ 2025-01-14 14:46 ` Patchwork 2025-01-14 14:47 ` ✗ Fi.CI.SPARSE: " Patchwork ` (2 subsequent siblings) 7 siblings, 0 replies; 12+ messages in thread From: Patchwork @ 2025-01-14 14:46 UTC (permalink / raw) To: Vinod Govindapillai; +Cc: intel-gfx == Series Details == Series: drm/i915/xe3: FBC Dirty rect feature support (rev3) URL : https://patchwork.freedesktop.org/series/141527/ State : warning == Summary == Error: dim checkpatch failed 8e21777a49d3 drm/i915/display: avoid calling fbc activate if fbc is active 78cc53ab5ece drm/i915/xe: 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 4bb7b9f31357 drm/i915/xe3: add dirty rect support for FBC -:129: CHECK:LINE_SPACING: Please don't use multiple blank lines #129: FILE: drivers/gpu/drm/i915/display/intel_fbc.c:1254: + + total: 0 errors, 0 warnings, 1 checks, 176 lines checked c2ff3abafcf0 drm/i915/xe3: disable FBC if PSR2 selective fetch is enabled ^ permalink raw reply [flat|nested] 12+ messages in thread
* ✗ Fi.CI.SPARSE: warning for drm/i915/xe3: FBC Dirty rect feature support (rev3) 2025-01-14 12:07 [PATCH v3 0/4] drm/i915/xe3: FBC Dirty rect feature support Vinod Govindapillai ` (4 preceding siblings ...) 2025-01-14 14:46 ` ✗ Fi.CI.CHECKPATCH: warning for drm/i915/xe3: FBC Dirty rect feature support (rev3) Patchwork @ 2025-01-14 14:47 ` Patchwork 2025-01-14 15:06 ` ✗ i915.CI.BAT: failure " Patchwork 2025-01-21 11:45 ` ✗ Fi.CI.BUILD: failure for drm/i915/xe3: FBC Dirty rect feature support (rev4) Patchwork 7 siblings, 0 replies; 12+ messages in thread From: Patchwork @ 2025-01-14 14:47 UTC (permalink / raw) To: Vinod Govindapillai; +Cc: intel-gfx == Series Details == Series: drm/i915/xe3: FBC Dirty rect feature support (rev3) 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] 12+ messages in thread
* ✗ i915.CI.BAT: failure for drm/i915/xe3: FBC Dirty rect feature support (rev3) 2025-01-14 12:07 [PATCH v3 0/4] drm/i915/xe3: FBC Dirty rect feature support Vinod Govindapillai ` (5 preceding siblings ...) 2025-01-14 14:47 ` ✗ Fi.CI.SPARSE: " Patchwork @ 2025-01-14 15:06 ` Patchwork 2025-01-21 11:45 ` ✗ Fi.CI.BUILD: failure for drm/i915/xe3: FBC Dirty rect feature support (rev4) Patchwork 7 siblings, 0 replies; 12+ messages in thread From: Patchwork @ 2025-01-14 15:06 UTC (permalink / raw) To: Vinod Govindapillai; +Cc: intel-gfx [-- Attachment #1: Type: text/plain, Size: 5209 bytes --] == Series Details == Series: drm/i915/xe3: FBC Dirty rect feature support (rev3) URL : https://patchwork.freedesktop.org/series/141527/ State : failure == Summary == CI Bug Log - changes from CI_DRM_15950 -> Patchwork_141527v3 ==================================================== Summary ------- **FAILURE** Serious unknown changes coming with Patchwork_141527v3 absolutely need to be verified manually. If you think the reported changes have nothing to do with the changes introduced in Patchwork_141527v3, 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_141527v3/index.html Participating hosts (44 -> 41) ------------------------------ Missing (3): fi-skl-6600u fi-snb-2520m fi-pnv-d510 Possible new issues ------------------- Here are the unknown changes that may have been introduced in Patchwork_141527v3: ### IGT changes ### #### Possible regressions #### * igt@kms_flip@basic-flip-vs-dpms@a-dp1: - bat-apl-1: [PASS][1] -> [DMESG-WARN][2] +1 other test dmesg-warn [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15950/bat-apl-1/igt@kms_flip@basic-flip-vs-dpms@a-dp1.html [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v3/bat-apl-1/igt@kms_flip@basic-flip-vs-dpms@a-dp1.html #### Suppressed #### The following results come from untrusted machines, tests, or statuses. They do not affect the overall result. * igt@i915_module_load@load: - {bat-mtlp-9}: [DMESG-WARN][3] ([i915#13494]) -> [ABORT][4] [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15950/bat-mtlp-9/igt@i915_module_load@load.html [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v3/bat-mtlp-9/igt@i915_module_load@load.html Known issues ------------ Here are the changes found in Patchwork_141527v3 that come from known issues: ### IGT changes ### #### Issues hit #### * igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence: - bat-dg2-11: [PASS][5] -> [SKIP][6] ([i915#9197]) +3 other tests skip [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15950/bat-dg2-11/igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence.html [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v3/bat-dg2-11/igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence.html #### Possible fixes #### * igt@core_hotunplug@unbind-rebind: - bat-rpls-4: [DMESG-WARN][7] ([i915#13400]) -> [PASS][8] [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15950/bat-rpls-4/igt@core_hotunplug@unbind-rebind.html [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v3/bat-rpls-4/igt@core_hotunplug@unbind-rebind.html * igt@i915_selftest@live: - bat-mtlp-8: [DMESG-FAIL][9] ([i915#13393]) -> [PASS][10] +1 other test pass [9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15950/bat-mtlp-8/igt@i915_selftest@live.html [10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v3/bat-mtlp-8/igt@i915_selftest@live.html - bat-adlp-6: [ABORT][11] ([i915#13399]) -> [PASS][12] +1 other test pass [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15950/bat-adlp-6/igt@i915_selftest@live.html [12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v3/bat-adlp-6/igt@i915_selftest@live.html * igt@i915_selftest@live@workarounds: - bat-arlh-3: [DMESG-FAIL][13] ([i915#13393]) -> [PASS][14] +1 other test pass [13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15950/bat-arlh-3/igt@i915_selftest@live@workarounds.html [14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v3/bat-arlh-3/igt@i915_selftest@live@workarounds.html - bat-arls-5: [DMESG-FAIL][15] ([i915#13393]) -> [PASS][16] +1 other test pass [15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15950/bat-arls-5/igt@i915_selftest@live@workarounds.html [16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v3/bat-arls-5/igt@i915_selftest@live@workarounds.html {name}: This element is suppressed. This means it is ignored when computing the status of the difference (SUCCESS, WARNING, or FAILURE). [i915#13393]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13393 [i915#13399]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13399 [i915#13400]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13400 [i915#13494]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13494 [i915#9197]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9197 Build changes ------------- * Linux: CI_DRM_15950 -> Patchwork_141527v3 CI-20190529: 20190529 CI_DRM_15950: 3deaca65541212fd09c8832090815813e6128caa @ git://anongit.freedesktop.org/gfx-ci/linux IGT_8189: e036190dc1730ecb94cb393f88378e734db4b1d6 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git Patchwork_141527v3: 3deaca65541212fd09c8832090815813e6128caa @ git://anongit.freedesktop.org/gfx-ci/linux == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141527v3/index.html [-- Attachment #2: Type: text/html, Size: 6121 bytes --] ^ permalink raw reply [flat|nested] 12+ messages in thread
* ✗ Fi.CI.BUILD: failure for drm/i915/xe3: FBC Dirty rect feature support (rev4) 2025-01-14 12:07 [PATCH v3 0/4] drm/i915/xe3: FBC Dirty rect feature support Vinod Govindapillai ` (6 preceding siblings ...) 2025-01-14 15:06 ` ✗ i915.CI.BAT: failure " Patchwork @ 2025-01-21 11:45 ` Patchwork 7 siblings, 0 replies; 12+ messages in thread From: Patchwork @ 2025-01-21 11:45 UTC (permalink / raw) To: Govindapillai, Vinod; +Cc: intel-gfx == Series Details == Series: drm/i915/xe3: FBC Dirty rect feature support (rev4) URL : https://patchwork.freedesktop.org/series/141527/ State : failure == Summary == Error: patch https://patchwork.freedesktop.org/api/1.0/series/141527/revisions/4/mbox/ not applied Applying: drm/i915/display: avoid calling fbc activate if fbc is active error: corrupt patch at line 25 error: could not build fake ancestor hint: Use 'git am --show-current-patch=diff' to see the failed patch Patch failed at 0001 drm/i915/display: avoid calling fbc activate if fbc is active When you have resolved this problem, run "git am --continue". If you prefer to skip this patch, run "git am --skip" instead. To restore the original branch and stop patching, run "git am --abort". Build failed, no error log produced ^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2025-01-21 11:45 UTC | newest] Thread overview: 12+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-01-14 12:07 [PATCH v3 0/4] drm/i915/xe3: FBC Dirty rect feature support Vinod Govindapillai 2025-01-14 12:07 ` [PATCH v3 1/4] drm/i915/display: avoid calling fbc activate if fbc is active Vinod Govindapillai 2025-01-17 12:49 ` Ville Syrjälä 2025-01-21 8:55 ` Govindapillai, Vinod 2025-01-14 12:07 ` [PATCH v3 2/4] drm/i915/xe: add register definitions for fbc dirty rect support Vinod Govindapillai 2025-01-14 12:07 ` [PATCH v3 3/4] drm/i915/xe3: add dirty rect support for FBC Vinod Govindapillai 2025-01-17 13:00 ` Ville Syrjälä 2025-01-14 12:07 ` [PATCH v3 4/4] drm/i915/xe3: disable FBC if PSR2 selective fetch is enabled Vinod Govindapillai 2025-01-14 14:46 ` ✗ Fi.CI.CHECKPATCH: warning for drm/i915/xe3: FBC Dirty rect feature support (rev3) Patchwork 2025-01-14 14:47 ` ✗ Fi.CI.SPARSE: " Patchwork 2025-01-14 15:06 ` ✗ i915.CI.BAT: failure " Patchwork 2025-01-21 11:45 ` ✗ Fi.CI.BUILD: failure for drm/i915/xe3: FBC Dirty rect feature support (rev4) Patchwork
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox