• Lyude Paul's avatar
    drm/nouveau/kms/nv50-: Disable AUX bus for disconnected DP ports · ee7e980d
    Lyude Paul authored
    GSP has its own state for keeping track of whether or not a given display
    connector is plugged in or not, and enforces this state on the driver. In
    particular, AUX transactions on a DisplayPort connector which GSP says is
    disconnected can never succeed - and can in some cases even cause
    unexpected timeouts, which can trickle up to cause other problems. A good
    example of this is runtime power management: where we can actually get
    stuck trying to resume the GPU if a userspace application like fwupd tries
    accessing a drm_aux_dev for a disconnected port. This was an issue I hit a
    few times with my Slimbook Executive 16 - where trying to offload something
    to the discrete GPU would wake it up, and then potentially cause it to
    timeout as fwupd tried to immediately access the dp_aux_dev nodes for
    nouveau.
    
    Likewise: we don't really have any cases I know of where we'd want to
    ignore this state and try an aux transaction anyway - and failing pointless
    aux transactions immediately can even speed things up. So - let's start
    enabling/disabling the aux bus in nouveau_dp_detect() to fix this. We
    enable the aux bus during connector probing, and leave it enabled if we
    discover something is actually on the connector. Otherwise, we just shut it
    off.
    
    This should fix some people's runtime PM issues (like myself), and also get
    rid of quite of a lot of GSP error spam in dmesg.
    Signed-off-by: default avatarLyude Paul <lyude@redhat.com>
    Reviewed-by: default avatarDave Airlie <airlied@redhat.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240404233736.7946-2-lyude@redhat.com
    (cherry picked from commit 9c8a10bf)
    ee7e980d
nouveau_dp.c 14.5 KB