• Rodrigo Vivi's avatar
    drm/i915: dirty fb operation flushsing frontbuffer · 86c98588
    Rodrigo Vivi authored
    Let's do a frontbuffer flush on dirty fb.
    To be used for DIRTYFB drm ioctl.
    
    This patch solves the biggest PSR known issue, that is
    missed screen updates during boot, mainly when there is a splash
    screen involved like Plymouth.
    
    Previously PSR was being invalidated by fbdev and Plymounth
    was taking control with PSR yet invalidated and could get screen
    updates normally. However with some atomic modeset changes
    Pymouth modeset over ioctl was now causing frontbuffer flushes
    making PSR gets back to work while it cannot track the
    screen updates and exit properly.
    
    By adding this flush on dirtyfb we properly track frontbuffer
    writes and properly exit PSR.
    
    Actually all mmap_wc users should call this dirty callback
    in order to have a proper frontbuffer tracking.
    
    In the future it can be extended to return 0 if the whole
    screen has being flushed or the number of rects flushed
    as Chris suggested.
    
    v2: Remove ORIGIN_FB_DIRTY and use ORIGIN_GTT instead since dirty
        callback is just called after few screen updates and not on
        everyone as pointed by Daniel.
    
    v3: Use flush instead of invalidate since flush means
        invalidate + flush and dirty means drawn had finished and
        it can be flushed.
    
    v4: Remove PSR from subject since it is purely frontbuffer tracking
        change and that can be useful for FBC as well.
    
    Cc: Chris Wilson <chris@chris-wilson.co.uk>
    Cc: Paulo Zanoni <paulo.r.zanoni@intel.com>
    Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
    Signed-off-by: default avatarRodrigo Vivi <rodrigo.vivi@intel.com>
    Reviewed-by: default avatarPaulo Zanoni <paulo.r.zanoni@intel.com>
    [danvet: Fix alignment as spotted by Paulo.]
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    86c98588
intel_display.c 438 KB