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
>

Reply via email to