Hi Jani, I'm the user who reported the underlying bug -- happy to provide some concrete grounding for why the problem is real and the fix is at the right level.
The symptom: replug of a ThinkPad USB-C Dock Gen2 (DP-MST, two monitors, DSC+FEC on both) triggers a cascade of ~40 fec_enable fastset mismatches in a ~3 second window, forcing repeated full modesets that cause a ~2 minute display cycling loop before the topology settles. The cascade is visible in dmesg even on a clean drm-tip build with no patches applied. Arun's analysis is correct. The root cause is exactly the per-port / per-stream mismatch he described: when only one MST stream is in the atomic commit, intel_pipe_config_compare() computes fec_enable=false for that stream, but the sibling stream has already enabled FEC at the HW level (DP_TP_CTL_FEC_ENABLE is link-wide), so the fastset check fails and falls back to a full modeset. That modeset commits one stream at a time, perpetuating the mismatch for the other stream on the next check, and so on. With both patches applied (tested on 7.0.10 + series/168418), the replug is completely clean: zero fec_enable mismatches, no full modeset, displays come back in normal hotplug time. The complexity in the patch comes from the problem itself: FEC genuinely is link-wide at HW but per-stream in the driver's state. Any fix has to either unify the per-stream state before the fastset comparison or avoid comparing the per-stream state for a per-link HW bit. The unify approach Arun has here is the most direct way to make the driver's state consistent with the hardware's invariant. Stephen Fuhry On Tue, Jun 16, 2026 at 4:01 AM Jani Nikula <[email protected]> wrote: > On Tue, 16 Jun 2026, Arun R Murthy <[email protected]> wrote: > > First version of the patch included only one patch i.e the ref count > > https://patchwork.freedesktop.org/series/167664/ > > > > Signed-off-by: Arun R Murthy <[email protected]> > > --- > > Arun R Murthy (2): > > drm/i915/mst: Unify fec_enable across mst streams > > drm/i915/display: Refcount for fec enable/disable > > > > drivers/gpu/drm/i915/display/intel_ddi.c | 58 > ++++++++++++++++++ > > drivers/gpu/drm/i915/display/intel_ddi.h | 1 + > > drivers/gpu/drm/i915/display/intel_display_types.h | 3 + > > drivers/gpu/drm/i915/display/intel_dp_mst.c | 70 > ++++++++++++++++++++++ > > drivers/gpu/drm/i915/display/intel_modeset_setup.c | 6 ++ > > 5 files changed, 138 insertions(+) > > Okay, this may seem a bit unfair, since I haven't dug deep into the > problem, but I really have a hard time believing this level of > complexity is required for FEC. > > > BR, > Jani. > > > > --- > > base-commit: c585a0a7e48a48aca80f7c0acb7294c7bf301bb7 > > change-id: 20260616-fec-82a3d27e0f11 > > > > Best regards, > > -- > Jani Nikula, Intel >
