• Wayne Lin's avatar
    drm/dp_mst: clear time slots for ports invalid · 7617e962
    Wayne Lin authored
    [Why]
    When change the connection status in a MST topology, mst device
    which detect the event will send out CONNECTION_STATUS_NOTIFY messgae.
    
    e.g. src-mst-mst-sst => src-mst (unplug) mst-sst
    
    Currently, under the above case of unplugging device, ports which have
    been allocated payloads and are no longer in the topology still occupy
    time slots and recorded in proposed_vcpi[] of topology manager.
    
    If we don't clean up the proposed_vcpi[], when code flow goes to try to
    update payload table by calling drm_dp_update_payload_part1(), we will
    fail at checking port validation due to there are ports with proposed
    time slots but no longer in the mst topology. As the result of that, we
    will also stop updating the DPCD payload table of down stream port.
    
    [How]
    While handling the CONNECTION_STATUS_NOTIFY message, add a detection to
    see if the event indicates that a device is unplugged to an output port.
    If the detection is true, then iterrate over all proposed_vcpi[] to
    see whether a port of the proposed_vcpi[] is still in the topology or
    not. If the port is invalid, set its num_slots to 0.
    
    Thereafter, when try to update payload table by calling
    drm_dp_update_payload_part1(), we can successfully update the DPCD
    payload table of down stream port and clear the proposed_vcpi[] to NULL.
    
    Changes since v1:(https://patchwork.kernel.org/patch/11275801/)
    * Invert the conditional to reduce the indenting
    Reviewed-by: default avatarLyude Paul <lyude@redhat.com>
    Signed-off-by: default avatarWayne Lin <Wayne.Lin@amd.com>
    Signed-off-by: default avatarLyude Paul <lyude@redhat.com>
    [removed cc for stable - there's too many patches this depends on for
    this to backport cleanly]
    Link: https://patchwork.freedesktop.org/patch/msgid/20200106102158.28261-1-Wayne.Lin@amd.com
    7617e962
drm_dp_mst_topology.c 136 KB