• Lyude Paul's avatar
    drm/nouveau: Only recalculate PBN/VCPI on mode/connector changes · db1231dd
    Lyude Paul authored
    I -thought- I had fixed this entirely, but it looks like that I didn't
    test this thoroughly enough as we apparently still make one big mistake
    with nv50_msto_atomic_check() - we don't handle the following scenario:
    
    * CRTC #1 has n VCPI allocated to it, is attached to connector DP-4
      which is attached to encoder #1. enabled=y active=n
    * CRTC #1 is changed from DP-4 to DP-5, causing:
      * DP-4 crtc=#1→NULL (VCPI n→0)
      * DP-5 crtc=NULL→#1
      * CRTC #1 steals encoder #1 back from DP-4 and gives it to DP-5
      * CRTC #1 maintains the same mode as before, just with a different
        connector
    * mode_changed=n connectors_changed=y
      (we _SHOULD_ do VCPI 0→n here, but don't)
    
    Once the above scenario is repeated once, we'll attempt freeing VCPI
    from the connector that we didn't allocate due to the connectors
    changing, but the mode staying the same. Sigh.
    
    Since nv50_msto_atomic_check() has broken a few times now, let's rethink
    things a bit to be more careful: limit both VCPI/PBN allocations to
    mode_changed || connectors_changed, since neither VCPI or PBN should
    ever need to change outside of routing and mode changes.
    
    Changes since v1:
    * Fix accidental reversal of clock and bpp arguments in
      drm_dp_calc_pbn_mode() - William Lewis
    Signed-off-by: default avatarLyude Paul <lyude@redhat.com>
    Reported-by: default avatarBohdan Milar <bmilar@redhat.com>
    Tested-by: default avatarBohdan Milar <bmilar@redhat.com>
    Fixes: 232c9eec ("drm/nouveau: Use atomic VCPI helpers for MST")
    References: 412e85b6 ("drm/nouveau: Only release VCPI slots on mode changes")
    Cc: Lyude Paul <lyude@redhat.com>
    Cc: Ben Skeggs <bskeggs@redhat.com>
    Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
    Cc: David Airlie <airlied@redhat.com>
    Cc: Jerry Zuo <Jerry.Zuo@amd.com>
    Cc: Harry Wentland <harry.wentland@amd.com>
    Cc: Juston Li <juston.li@intel.com>
    Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
    Cc: Karol Herbst <karolherbst@gmail.com>
    Cc: Ilia Mirkin <imirkin@alum.mit.edu>
    Cc: <stable@vger.kernel.org> # v5.1+
    Acked-by: default avatarBen Skeggs <bskeggs@redhat.com>
    Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20190809005307.18391-1-lyude@redhat.com
    db1231dd
disp.c 63.2 KB