• Wayne Lin's avatar
    drm/amd/display: Release remote dc_sink under mst scenario · 84a8b390
    Wayne Lin authored
    [Why]
    Observe that we have several problems while releasing remote dc_sink
    under mst cases.
    
    - When unplug mst branch device from the source, we now try to free all
      remote dc_sinks in dm_helpers_dp_mst_stop_top_mgr(). However, there are
      bugs while we're releasing dc_sinks here. First of all,
      link->remote_sinks[] array get shuffled within
      dc_link_remove_remote_sink(). As the result, increasing the array index
      within the releasing loop is wrong. Secondly, it tries to call
      dc_sink_release() to release the dc_sink of the same aconnector every
      time in the loop. Which can't release dc_sink of all aconnector in the
      mst topology.
    - There is no code path for us to release remote dc_sink for disconnected
      sst monitor which unplug event is notified by CSN sideband message. Which
      means we'll use stale dc_sink data to represent later on connected
      monitor. Also, has chance to break the maximum remote dc_sink number
      constraint.
    
    [How]
    Distinguish unplug event of mst scenario into 2 cases.
    
    * Unplug sst/legacy stream sink off the mst topology
    - Release related remote dc_sink in detec_ctx().
    
    * Unplug mst branch device off the mst topology
    - Release related remote dc_sink in early_unregister()
    Tested-by: default avatarDaniel Wheeler <daniel.wheeler@amd.com>
    Reviewed-by: default avatarAurabindo Jayamohanan Pillai <Aurabindo.Pillai@amd.com>
    Acked-by: default avatarRodrigo Siqueira <Rodrigo.Siqueira@amd.com>
    Acked-by: default avatarLyude Paul <lyude@redhat.com>
    Signed-off-by: default avatarWayne Lin <Wayne.Lin@amd.com>
    Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
    84a8b390
amdgpu_dm.c 347 KB