• Wayne Lin's avatar
    drm/dp_mst: Remove VCPI while disabling topology mgr · 64e62bdf
    Wayne Lin authored
    [Why]
    
    This patch is trying to address the issue observed when hotplug DP
    daisy chain monitors.
    
    e.g.
    src-mstb-mstb-sst -> src (unplug) mstb-mstb-sst -> src-mstb-mstb-sst
    (plug in again)
    
    Once unplug a DP MST capable device, driver will call
    drm_dp_mst_topology_mgr_set_mst() to disable MST. In this function,
    it cleans data of topology manager while disabling mst_state. However,
    it doesn't clean up the proposed_vcpis of topology manager.
    If proposed_vcpi is not reset, once plug in MST daisy chain monitors
    later, code will fail at checking port validation while trying to
    allocate payloads.
    
    When MST capable device is plugged in again and try to allocate
    payloads by calling drm_dp_update_payload_part1(), this
    function will iterate over all proposed virtual channels to see if
    any proposed VCPI's num_slots is greater than 0. If any proposed
    VCPI's num_slots is greater than 0 and the port which the
    specific virtual channel directed to is not in the topology, code then
    fails at the port validation. Since there are stale VCPI allocations
    from the previous topology enablement in proposed_vcpi[], code will fail
    at port validation and reurn EINVAL.
    
    [How]
    
    Clean up the data of stale proposed_vcpi[] and reset mgr->proposed_vcpis
    to NULL while disabling mst in drm_dp_mst_topology_mgr_set_mst().
    
    Changes since v1:
    *Add on more details in commit message to describe the issue which the
    patch is trying to fix
    Signed-off-by: default avatarWayne Lin <Wayne.Lin@amd.com>
    [added cc to stable]
    Signed-off-by: default avatarLyude Paul <lyude@redhat.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20191205090043.7580-1-Wayne.Lin@amd.com
    Cc: <stable@vger.kernel.org> # v3.17+
    64e62bdf
drm_dp_mst_topology.c 123 KB