• Ville Syrjälä's avatar
    drm/i915: Wait for vblank after enabling the primary plane on BDW · 33c3b0d1
    Ville Syrjälä authored
    BDW signals the flip done interrupt immediately after the DSPSURF write
    when the plane is disabled. This is true even if we've already armed
    DSPCNTR to enable the plane at the next vblank. This causes major
    problems for our page flip code which relies on the flip done interrupts
    happening at vblank time.
    So what happens is that we enable the plane, and immediately allow
    userspace to submit a page flip. If the plane is still in the process
    of being enabled when the page flip is issued, the flip done gets
    signalled immediately. Our DSPSURFLIVE check catches this to prevent
    premature flip completion, but it also means that we don't get a flip
    done interrupt when the plane actually gets enabled, and so the page
    flip is never completed.
    Work around this by re-introducing blocking vblank waits on BDW
    whenever we enable the primary plane.
    I removed some of the vblank waits here:
     commit 6304cd91
     Author: Ville Syrjälä <ville.syrjala@linux.intel.com>
     Date:   Fri Apr 25 13:30:12 2014 +0300
        drm/i915: Drop the excessive vblank waits from modeset codepaths
    To avoid these blocking vblank waits we should start using the vblank
    interrupt instead of the flip done interrupt to complete page flips.
    But that's material for another patch.
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=79354Tested-by: default avatarGuo Jinxian <jinxianx.guo@intel.com>
    Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
    Reviewed-by: default avatarRodrigo Vivi <rodrigo.vivi@intel.com>
    Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
intel_sprite.c 35.2 KB