• Matt Roper's avatar
    drm/i915: Refactor work that can sleep out of commit (v7) · 32b7eeec
    Matt Roper authored
    Once we integrate our work into the atomic pipeline, plane commit
    operations will need to happen with interrupts disabled, due to vblank
    evasion.  Our commit functions today include sleepable work, so those
    operations need to be split out and run either before or after the
    atomic register programming.
    
    The solution here calculates which of those operations will need to be
    performed during the 'check' phase and sets flags in an intel_crtc
    sub-struct.  New intel_begin_crtc_commit() and
    intel_finish_crtc_commit() functions are added before and after the
    actual register programming; these will eventually be called from the
    atomic plane helper's .atomic_begin() and .atomic_end() entrypoints.
    
    v2: Fix broken sprite code split
    
    v3: Make the pre/post commit work crtc-based to match how we eventually
        want this to be called from the atomic plane helpers.
    
    v4: Some platforms that haven't had their watermark code reworked were
        waiting for vblank, then calling update_sprite_watermarks in their
        platform-specific disable code.  These also need to be flagged out
        of the critical section.
    
    v5: Sprite plane test for primary show/hide should just set the flag to
        wait for pending flips, not actually perform the wait.  (Ander)
    
    v6:
     - Rebase onto latest di-nightly; picks up an important runtime PM fix.
     - Handle 'wait_for_flips' flag in intel_begin_crtc_commit(). (Ander)
     - Use wait_for_flips flag for primary plane update rather than
       performing the wait in the check routine.
     - Added kerneldoc to pre_disable/post_enable functions that are no
       longer static.  (Ander)
     - Replace assert_pipe_enabled() in intel_disable_primary_hw_plane()
       with an intel_crtc->active test; it turns out assert_pipe_enabled()
       grabs some mutexes and can sleep, which we can't do with interrupts
       disabled.
    
    v7:
     - Check for fb != NULL when deciding whether the sprite plane hides the
       primary plane during a sprite update.  (PRTS)
    Signed-off-by: default avatarMatt Roper <matthew.d.roper@intel.com>
    Reviewed-by: default avatarAnder Conselvan de Oliveira <conselvan2@gmail.com>
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    32b7eeec
intel_sprite.c 45.5 KB