On Fri, 02 Oct 2026, Jani Nikula <[email protected]> wrote:
> On Thu, 01 Oct 2026, FNU VISHWANATHA <[email protected]> wrote:
>> After resume from warm boot/G3, immediately force a topology link address
>> reprobe to ensure all MST ports are properly detected. This works around a
>> race condition where some MST hubs incorrectly report port status bits before
>> their internal state is fully initialized.
>>
>> By forcing the reprobe immediately after resume, combined with the fix in
>> drm_dp_mst_handle_link_address_port() that detects input->output port
>> transitions, we ensure that all displays are reliably detected even if the
>> hub initially reports incorrect port status.
>>
>> Signed-off-by: FNU VISHWANATHA <[email protected]>
>
> Is there a bug report about this with logs?
>
>> ---
>>  drivers/gpu/drm/i915/display/intel_dp.c | 18 ++++++++++++++++++
>>  1 file changed, 18 insertions(+)
>>
>> diff --git a/drivers/gpu/drm/i915/display/intel_dp.c 
>> b/drivers/gpu/drm/i915/display/intel_dp.c
>> index 3a67990411b3..fceda523efa3 100644
>> --- a/drivers/gpu/drm/i915/display/intel_dp.c
>> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
>> @@ -7088,6 +7088,7 @@ void intel_dp_mst_resume(struct intel_display *display)
>>  
>>         for_each_intel_encoder(display->drm, encoder) {
>>                 struct intel_dp *intel_dp;
>> +               struct drm_dp_mst_branch *mstb;
>>                 int ret;
>>  
>>                 if (encoder->type != INTEL_OUTPUT_DDI)
>> @@ -7102,6 +7103,23 @@ void intel_dp_mst_resume(struct intel_display 
>> *display)
>>                 if (ret) {
>>                         intel_dp->is_mst = false;
>>                         drm_dp_mst_topology_mgr_set_mst(&intel_dp->mst.mgr, 
>> false);
>> +                       continue;
>> +               }
>> +
>> +               /* After resume, force a link address reprobe to ensure all 
>> ports
>> +                * are properly detected. This works around a race condition 
>> where
>> +                * some MST hubs incorrectly report port status bits during 
>> warm boot/G3.
>> +                * Ref: Sporadic second display not detected after warm 
>> boot/G3
>> +                */
>> +               if (intel_dp->is_mst) {
>> +                       mutex_lock(&intel_dp->mst.mgr.lock);
>> +                       mstb = intel_dp->mst.mgr.mst_primary;
>> +                       if (mstb) {
>> +                               drm_dp_mst_topology_get_mstb(mstb);
>> +                               mstb->link_address_sent = false;
>> +                               drm_dp_mst_topology_put_mstb(mstb);
>> +                       }
>> +                       mutex_unlock(&intel_dp->mst.mgr.lock);

This is topology manager internal stuff we have no business messing with
in drivers. So much so that drm_dp_mst_topology_get_mstb() and
drm_dp_mst_topology_put_mstb() are *static* functions in
drm_dp_mst_topology.c.

How did you build and run this?



>>                 }
>>         }
>>  }

-- 
Jani Nikula, Intel

Reply via email to