• Boris Brezillon's avatar
    drm/vc4: Rework the async update logic · 1d4118ca
    Boris Brezillon authored
    vc4_plane_atomic_async_check() was only based on the
    state->{crtc,src}_{w,h} which was fine since scaling was not allowed on
    the cursor plane.
    
    We are about to change that to properly support underscan, and, in order
    to make the async check more reliable, we call vc4_plane_mode_set()
    from there and check that only the pos0, pos2 and ptr0 entries in the
    dlist have changed.
    
    In vc4_plane_atomic_async_update(), we no longer call
    vc4_plane_atomic_check() since vc4_plane_mode_set() has already been
    called in vc4_plane_atomic_async_check(), and we don't need to allocate
    a new LBM region (we reuse the one from the current state).
    
    Note that we now have to manually update each field of the current
    plane state since it's no longer updated in place (not sure we have
    to sync all of them, but it's harmless if we do).
    We also drop the vc4_plane_async_set_fb() call (ptr0 dlist entry has
    been properly updated in vc4_plane_mode_set())
    Signed-off-by: default avatarBoris Brezillon <boris.brezillon@bootlin.com>
    Reviewed-by: default avatarEric Anholt <eric@anholt.net>
    Link: https://patchwork.freedesktop.org/patch/msgid/20181130090254.594-4-boris.brezillon@bootlin.com
    1d4118ca
vc4_plane.c 33.6 KB