• Ville Syrjälä's avatar
    drm/i915: Fix the async flip wm0/ddb optimization · 2e084371
    Ville Syrjälä authored
    The current implementation of the async flip wm0/ddb optimization
    does not work at all. The biggest problem is that we skip the
    whole intel_pipe_update_{start,end}() dance and thus never actually
    complete the commit that is trying to do the wm/ddb change.
    
    To fix this we need to move the do_async_flip flag to the crtc
    state since we handle commits per-pipe, not per-plane.
    
    Also since all planes can now be included in the first/last
    "async flip" (which gets converted to a sync flip to do the
    wm/ddb mangling) we need to be more careful when checking if
    the plane state is async flip comptatible. Only planes doing
    the async flip should be checked and other planes are perfectly
    fine not adhereing to any async flip related limitations.
    
    However for subsequent commits which are actually going do the
    async flip in hardware we want to make sure no other planes
    are in the state. That should never happen assuming we did our
    job correctly, so we'll toss in a WARN to make sure we catch
    any bugs here.
    
    Cc: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
    Fixes: c3639f3b ("drm/i915: Use wm0 only during async flips for DG2")
    Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20220214105532.13049-4-ville.syrjala@linux.intel.comReviewed-by: default avatarStanislav Lisovskiy <stanislav.lisovskiy@intel.com>
    2e084371
intel_display.c 309 KB