• Douglas Anderson's avatar
    drm/dp: Don't attempt AUX transfers when eDP panels are not powered · 8df1ddb5
    Douglas Anderson authored
    If an eDP panel is not powered on then any attempts to talk to it over
    the DP AUX channel will timeout. Unfortunately these attempts may be
    quite slow. Userspace can initiate these attempts either via a
    /dev/drm_dp_auxN device or via the created i2c device.
    
    Making the DP AUX drivers timeout faster is a difficult proposition.
    In theory we could just poll the panel's HPD line in the AUX transfer
    function and immediately return an error there. However, this is
    easier said than done. For one thing, there's no hard requirement to
    hook the HPD line up for eDP panels and it's OK to just delay a fixed
    amount. For another thing, the HPD line may not be fast to probe. On
    parade-ps8640 we need to wait for the bridge chip's firmware to boot
    before we can get the HPD line and this is a slow process.
    
    The fact that the transfers are taking so long to timeout is causing
    real problems. The open source fwupd daemon sometimes scans DP busses
    looking for devices whose firmware need updating. If it happens to
    scan while a panel is turned off this scan can take a long time. The
    fwupd daemon could try to be smarter and only scan when eDP panels are
    turned on, but we can also improve the behavior in the kernel.
    
    Let's let eDP panels drivers specify that a panel is turned off and
    then modify the common AUX transfer code not to attempt a transfer in
    this case.
    Tested-by: default avatarSteev Klimaszewski <steev@kali.org>
    Reviewed-by: default avatarHsin-Yi Wang <hsinyi@chromium.org>
    Tested-by: default avatarEizan Miyamoto <eizan@chromium.org>
    Acked-by: default avatarNeil Armstrong <neil.armstrong@linaro.org>
    Signed-off-by: default avatarDouglas Anderson <dianders@chromium.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240202141109.1.I24277520ac754ea538c9b14578edc94e1df11b48@changeid
    8df1ddb5
drm_dp_helper.c 117 KB