> I'd like to see logs of what the differences are.

Here's the logs from the pipe_config_compare without my patch:
<6>[   43.743023] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.enable (expected yes, found no)
<6>[   43.763730] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.active (expected yes, found no)
<6>[   43.789093] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in cpu_transcoder (expected 0, found -1)
<6>[   43.814759] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met ihw.enablen lane_count (expected 2, found 0)
<6>[   43.835751] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in dp_m_n (expected tu 64 data 8007832/8388608 link
333659/524288, found tu 0, data 0/0 link 0/0)
<6>[   43.835753] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in output_types (expected 0x00000100, found 0x00000000)
<6>[   43.835754] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in framestart_delay (expected 1, found 0)
<6>[   43.856743] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.pipe_mode.crtc_hdisplay (expected 1920, found 0)
<6>[   43.888602] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.pipe_mode.crtc_htotal (expected 2080, found 0)
<6>[   43.888603] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.pipe_mode.crtc_hblank_start (expected 1920, found
0)
<6>[   43.888604] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.pipe_mode.crtc_hblank_end (expected 2080, found 0)
<6>[   43.888604] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.pipe_mode.crtc_hsync_start (expected 1966, found
0)
<6>[   43.888605] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.pipe_mode.crtc_hsync_end (expected 1996, found 0)
<6>[   43.888605] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.pipe_mode.crtc_vdisplay (expected 1200, found 0)
<6>[   43.888606] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.pipe_mode.crtc_vsync_start (expected 1210, found
0)
<6>[   43.888607] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.pipe_mode.crtc_vsync_end (expected 1216, found 0)
<6>[   43.911732] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.pipe_mode.crtc_vtotal (expected 1236, found 0)
<6>[   43.911733] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.pipe_mode.crtc_vblank_end (expected 1236, found 0)
<6>[   43.932520] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.adjusted_mode.crtc_hdisplay (expected 1920, found
0)
<6>[   43.960305] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.adjusted_mode.crtc_htotal (expected 2080, found 0)
<6>[   43.960306] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.adjusted_mode.crtc_hblank_start (expected 1920,
found 0)
<6>[   43.960306] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.adjusted_mode.crtc_hblank_end (expected 2080,
found 0)
<6>[   43.960307] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.adjusted_mode.crtc_hsync_start (expected 1966,
found 0)
<6>[   43.960307] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.adjusted_mode.crtc_hsync_end (expected 1996,
found 0)
<6>[   43.960308] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.adjusted_mode.crtc_vdisplay (expected 1200, found
0)
<6>[   43.960308] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.adjusted_mode.crtc_vsync_start (expected 1210,
found 0)
<6>[   43.960309] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.adjusted_mode.crtc_vsync_end (expected 1216,
found 0)
<6>[   43.960310] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.adjusted_mode.crtc_vtotal (expected 1236, found 0)
<6>[   43.960310] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.adjusted_mode.crtc_vblank_end (expected 1236,
found 0)
<6>[   43.988392] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in pixel_multiplier (expected 1, found 0)
<6>[   43.988393] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.adjusted_mode.flags (2) (expected 2, found 0)
<6>[   44.016086] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.adjusted_mode.flags (8) (expected 8, found 0)
<6>[   44.016087] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in enhanced_framing (expected yes, found no)
<6>[   44.016088] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in pipe_bpp (expected 24, found 0)
<6>[   44.044074] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.pipe_mode.crtc_clock (expected 154647, found 0)
<6>[   44.044075] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.adjusted_mode.crtc_clock (expected 154647, found
0)
<6>[   44.044075] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in port_clock (expected 243000, found 0)
<6>[   44.044077] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in vrr.guardband (expected 35, found 0)
<6>[   44.065890] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met, forcing full modeset

On Thu, Jan 22, 2026 at 7:29 AM Jani Nikula <[email protected]>
wrote:

> On Wed, 21 Jan 2026, Juasheem Sultan <[email protected]> wrote:
> > When attempting the initial commit, there is a mismatch between
> > the new crtc_state and the old crtc_state. This causes us to fail the
> > pipe_config comparison and force a modeset. In the case where we are
> > inheriting an initialized state, we can sync the new and the old state
> > to pass the comparison and allow us to do a fastset and achieve an
> > uninterrupted handoff to userspace.
> >
> > Signed-off-by: Juasheem Sultan <[email protected]>
> > ---
> >  drivers/gpu/drm/i915/display/intel_display.c | 19 +++++++++++++++++++
> >  1 file changed, 19 insertions(+)
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_display.c
> b/drivers/gpu/drm/i915/display/intel_display.c
> > index 0d527cf22866..6eef4bd2e251 100644
> > --- a/drivers/gpu/drm/i915/display/intel_display.c
> > +++ b/drivers/gpu/drm/i915/display/intel_display.c
> > @@ -5736,6 +5736,25 @@ static void intel_crtc_check_fastset(const struct
> intel_crtc_state *old_crtc_sta
> >       if (old_crtc_state->vrr.in_range != new_crtc_state->vrr.in_range)
> >               new_crtc_state->update_lrr = false;
> >
> > +     /* Copying crtc state if inheriting an old state for commit */
> > +     if (old_crtc_state->inherited) {
> > +             new_crtc_state->hw = old_crtc_state->hw;
> > +
> > +             new_crtc_state->port_clock = old_crtc_state->port_clock;
> > +             new_crtc_state->pipe_bpp = old_crtc_state->pipe_bpp;
> > +             new_crtc_state->cpu_transcoder =
> old_crtc_state->cpu_transcoder;
> > +             new_crtc_state->lane_count = old_crtc_state->lane_count;
> > +             new_crtc_state->output_types =
> old_crtc_state->output_types;
> > +             new_crtc_state->dp_m_n = old_crtc_state->dp_m_n;
> > +             new_crtc_state->framestart_delay =
> old_crtc_state->framestart_delay;
> > +             new_crtc_state->pixel_multiplier =
> old_crtc_state->pixel_multiplier;
> > +             new_crtc_state->pixel_rate = old_crtc_state->pixel_rate;
> > +             new_crtc_state->enhanced_framing =
> old_crtc_state->enhanced_framing;
> > +             new_crtc_state->dpll_hw_state =
> old_crtc_state->dpll_hw_state;
> > +             new_crtc_state->intel_dpll = old_crtc_state->intel_dpll;
> > +             new_crtc_state->vrr.guardband =
> old_crtc_state->vrr.guardband;
>
> I'd like to see logs of what the differences are.
>
> BR,
> Jani.
>
> > +     }
> > +
> >       if (!intel_pipe_config_compare(old_crtc_state, new_crtc_state,
> true)) {
> >               drm_dbg_kms(display->drm, "[CRTC:%d:%s] fastset
> requirement not met, forcing full modeset\n",
> >                           crtc->base.base.id, crtc->base.name);
>
> --
> Jani Nikula, Intel
>

Reply via email to