• Lyude Paul's avatar
    drm/nouveau: Only write DP_MSTM_CTRL when needed · b26b4590
    Lyude Paul authored
    Currently, nouveau will re-write the DP_MSTM_CTRL register for an MST
    hub every time it receives a long HPD pulse on DP. This isn't actually
    necessary and additionally, has some unintended side effects.
    
    With the P50 I've got here, rewriting DP_MSTM_CTRL constantly seems to
    make it rather likely (1 out of 5 times usually) that bringing up MST
    with it's ThinkPad dock will fail and result in sideband messages timing
    out in the middle. Afterwards, successive probes don't manage to get the
    dock to communicate properly over MST sideband properly.
    
    Many times sideband message timeouts from MST hubs are indicative of
    either the source or the sink dropping an ESI event, which can cause
    DRM's perspective of the topology's current state to go out of sync with
    reality. While it's tough to really know for sure what's happening to
    the dock, using userspace tools to write to DP_MSTM_CTRL in the middle
    of the MST link probing process does appear to make things flaky. It's
    possible that when we write to DP_MSTM_CTRL, the function that gets
    triggered to respond in the dock's firmware temporarily puts it in a
    state where it might end up not reporting an ESI to the source, or ends
    up dropping a sideband message we sent it.
    
    So, to fix this we make it so that when probing an MST topology, we
    respect it's current state. If the dock's already enabled, we simply
    read DP_MSTM_CTRL and disable the topology if it's value is not what we
    expected. Otherwise, we perform the normal MST probing dance. We avoid
    taking any action except if the state of the MST topology actually
    changes.
    
    This fixes MST sideband message timeouts and detection failures on my
    P50 with its ThinkPad dock.
    Signed-off-by: default avatarLyude Paul <lyude@redhat.com>
    Cc: stable@vger.kernel.org
    Cc: Karol Herbst <karolherbst@gmail.com>
    Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
    b26b4590
disp.c 59.9 KB