> 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 >
