• Lyude Paul's avatar
    drm/nouveau/kms/nv50-: Use less encoders by making mstos per-head · 5ff0cb1c
    Lyude Paul authored
    Currently, for every single MST capable DRM connector we create a set of
    fake encoders, one for each possible head. Unfortunately this ends up
    being a huge waste of encoders. While this currently isn't causing us
    any problems, it's extremely close to doing so.
    
    The ThinkPad P71 is a good example of this. Originally when trying to
    figure out why nouveau was failing to load on this laptop, I discovered
    it was because nouveau was creating too many encoders. This ended up
    being because we were mistakenly creating MST encoders for the eDP port,
    however we are still extremely close to hitting the encoder limit on
    this machine as it exposes 1 eDP port and 5 DP ports, resulting in 31
    encoders.
    
    So while this fix didn't end up being necessary to fix the P71, we still
    need to implement this so that we avoid hitting the encoder limit for
    valid display configurations in the event that some machine with more
    connectors then this becomes available. Plus, we don't want to let good
    code go to waste :)
    
    So, use less encoders by only creating one MSTO per head. Then, attach
    each new MSTC to each MSTO which corresponds to a head that it's parent
    DP port is capable of using. This brings the number of encoders we
    register on the ThinkPad P71 from 31, down to just 15. Yay!
    Signed-off-by: default avatarLyude Paul <lyude@redhat.com>
    Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
    5ff0cb1c
head.c 15.6 KB