On Mon, 2026-09-07 at 20:44 +0300, Imre Deak wrote:
> During an atomic commit after all the MST stream CRTC state is computed
> the driver ensures that the FEC is configured the same way (enabled or
> disabled) for all the streams on a given MST topology's link.
> drm_dp_mst_port_downstream_of_parent() used to determine if a stream is
> downstream of an MST port will return false if the whole topology is
> disconnected, since in that case it can't verify that the port/
> parent_port passed to it is in the given MST topology. This is a problem
> during the above FEC configuration check, since
> intel_dp_mst_check_dsc_change()->get_pipes_downstream_of_mst_ports()
> will not return all the stream CRTCs/pipes for the topology as expected.
> Since passing parent_port==NULL to get_pipes_downstream_of_mst_port()
> is meant to return all the streams for the given topology (i.e. mst_mgr)
> skip checking if an MST port is downstream of a parent port in this
> case.
> 
> This fixes a problem where the FEC configuration check explained above
> failed to ensure that all streams' FEC is configured the same way if the
> topology was disconnected, leading to a FEC state mismatch error.
> 
> Cc: [email protected] # v6.10+
> Closes: https://gitlab.freedesktop.org/drm/i915/kernel/-/work_items/16073
> Closes: https://gitlab.freedesktop.org/drm/i915/kernel/-/work_items/16384
> Signed-off-by: Imre Deak <[email protected]>
> ---
>  drivers/gpu/drm/i915/display/intel_dp_mst.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c 
> b/drivers/gpu/drm/i915/display/intel_dp_mst.c
> index 6a869d0f6ffc0..20766b6c0bcfa 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp_mst.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c
> @@ -856,7 +856,8 @@ static u8 get_pipes_downstream_of_mst_port(struct 
> intel_atomic_state *state,
>               if (&connector->mst.dp->mst.mgr != mst_mgr)
>                       continue;
>  
> -             if (connector->mst.port != parent_port &&
> +             if (parent_port &&
> +                 connector->mst.port != parent_port &&
>                   !drm_dp_mst_port_downstream_of_parent(mst_mgr,
>                                                         connector->mst.port,
>                                                         parent_port))

Reviewed-by: Luca Coelho <[email protected]>

--
Cheers,
Luca.

Reply via email to