• Douglas Anderson's avatar
    drm/probe-helper: For DP, add 640x480 if all other modes are bad · e7c254d7
    Douglas Anderson authored
    As per Displayport spec section 5.2.1.2 ("Video Timing Format") says
    that all detachable sinks shall support 640x480 @60Hz as a fail safe
    mode.
    
    A DP compliance test expected us to utilize the above fact when all
    modes it presented to the DP source were not achievable. It presented
    only modes that would be achievable with more lanes and/or higher
    speeds than we had available and expected that when we couldn't do
    that then we'd fall back to 640x480 even though it didn't advertise
    this size.
    
    In order to pass the compliance test (and also support any users who
    might fall into a similar situation with their display), we need to
    add 640x480 into the list of modes. However, we don't want to add
    640x480 all the time. Despite the fact that the DP spec says all sinks
    _shall support_ 640x480, they're not guaranteed to support it
    _well_. Continuing to read the spec you can see that the display is
    not required to really treat 640x480 equal to all the other modes. It
    doesn't need to scale or anything--just display the pixels somehow for
    failsafe purposes. It should also be noted that it's not hard to find
    a display hooked up via DisplayPort that _doesn't_ support 640x480 at
    all. The HP ZR30w screen I'm sitting in front of has a native DP port
    and doesn't work at 640x480. I also plugged in a tiny 800x480 HDMI
    display via a DP to HDMI adapter and that screen definitely doesn't
    support 640x480.
    
    As a compromise solution, let's only add the 640x480 mode if:
    * We're on DP.
    * All other modes have been pruned.
    
    This acknowledges that 640x480 might not be the best mode to use but,
    since sinks are _supposed_ to support it, we will at least fall back
    to it if there's nothing else.
    
    Note that we _don't_ add higher resolution modes like 1024x768 in this
    case. We only add those modes for a failed EDID read where we have no
    idea what's going on. In the case where we've pruned all modes then
    instead we only want 640x480 which is the only defined "Fail Safe"
    resolution.
    
    This patch originated in response to Kuogee Hsieh's patch [1].
    
    [1] https://lore.kernel.org/r/1650671124-14030-1-git-send-email-quic_khsieh@quicinc.comSigned-off-by: default avatarDouglas Anderson <dianders@chromium.org>
    Tested-by: default avatarKuogee Hsieh <quic_khsieh@quicinc.com>
    Reviewed-by: default avatarAbhinav Kumar <quic_abhinavk@quicinc.com>
    Reviewed-by: default avatarDmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20220511155749.v3.2.I4ac7f55aa446699f8c200a23c10463256f6f439f@changeid
    e7c254d7
drm_probe_helper.c 31.9 KB