• Ander Conselvan de Oliveira's avatar
    drm/i915: Use vblank evade mechanism in mmio_flip · 9362c7c5
    Ander Conselvan de Oliveira authored
    Currently we program just DPSCNTR and DSPSTRIDE directly from the ring
    interrupt handler, which is fine since the hardware guarantees that
    those are update atomically. When we have atomic page flips we'll want
    to be able to update also the offset registers, and then we need to use
    the vblank evade mechanism to guarantee atomicity. Since that mechanism
    introduces a wait, we need to do the actual register write from a work
    when it is triggered by the ring interrupt.
    
    v2: Explain the need for mmio_flip.work in the commit message (Paulo)
        Initialize the mmio_flip work in intel_crtc_init() (Paulo)
        Prevent new flips the previous flip work finishes (Paulo)
        Don't acquire modeset locks for mmio flip work
    
    Note: Paulo had reservations about the work item leaking over a plane
    disable. But insofar as we do lack these checks that issue is already
    present with the existing code.
    Signed-off-by: default avatarAnder Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com>
    Reviewed-by: default avatarPaulo Zanoni <paulo.r.zanoni@intel.com>
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    9362c7c5
intel_sprite.c 48.2 KB