• Gustavo Padovan's avatar
    drm/atomic: initial support for asynchronous plane update · fef9df8b
    Gustavo Padovan authored
    In some cases, like cursor updates, it is interesting to update the
    plane in an asynchronous fashion to avoid big delays. The current queued
    update could be still waiting for a fence to signal and thus block any
    subsequent update until its scan out. In cases like this if we update the
    cursor synchronously through the atomic API it will cause significant
    delays that would even be noticed by the final user.
    
    This patch creates a fast path to jump ahead the current queued state and
    do single planes updates without going through all atomic steps in
    drm_atomic_helper_commit(). We take this path for legacy cursor updates.
    
    For now only single plane updates are supported, but we plan to support
    multiple planes updates and async PageFlips through this interface as well
    in the near future.
    
    v6:	- move check code to drm_atomic_helper.c (Daniel Vetter)
    
    v5:
    	- improve comments (Eric Anholt)
    
    v4:
    	- fix state->crtc NULL check (Archit Taneja)
    
    v3:
    	- fix iteration on the wrong crtc state
    	- put back code to forbid updates if there is a queued update for
    	the same plane (Ville Syrjälä)
    	- move size checks back to drivers (Ville Syrjälä)
    	- move ASYNC_UPDATE flag addition to its own patch (Ville Syrjälä)
    
    v2:
    	- allow updates even if there is a queued update for the same
    	plane.
            - fixes on the documentation (Emil Velikov)
            - unconditionally call ->atomic_async_update (Emil Velikov)
            - check for ->atomic_async_update earlier (Daniel Vetter)
            - make ->atomic_async_check() the last step (Daniel Vetter)
            - add ASYNC_UPDATE flag (Eric Anholt)
            - update state in core after ->atomic_async_update (Eric Anholt)
    	- update docs (Eric Anholt)
    
    Cc: Daniel Vetter <daniel.vetter@intel.com>
    Cc: Rob Clark <robdclark@gmail.com>
    Cc: Eric Anholt <eric@anholt.net>
    Signed-off-by: default avatarGustavo Padovan <gustavo.padovan@collabora.com>
    Reviewed-by: Archit Taneja <architt@codeaurora.org> (v5)
    Acked-by: Eric Anholt <eric@anholt.net> (v5)
    Reviewed-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    Link: http://patchwork.freedesktop.org/patch/msgid/20170630180322.29007-2-gustavo@padovan.org
    fef9df8b
drm_atomic_helper.c 112 KB