• Daniel Vetter's avatar
    drm/i915: improve SERR_INT clearing for fifo underrun reporting · 1dd246fb
    Daniel Vetter authored
    The current code won't report any fifo underruns on cpt if just one
    pipe has fifo underrun reporting disabled. We can't enable the
    interrupts, but we can still check the per-transcoder bits and so
    report the underrun delayed if:
    - We always clear the transcoder's bit (and none of the other bits)
      when enabling.
    - We check the transcoder's bit after disabling (to avoid racing with
      the interrupt handler).
    
    v2: I've forgotten to actually remove the old SERR_INT clearing.
    
    v3: Use transcoder_name as suggested by Paulo Zanoni. Paulo also
    noticed a logic bug: When an underrun interrupt fires we report it
    both in the interrupt handler and when checking for underruns when
    disabling it in cpt_set_fifo_underrun_reporting. But that second check
    is only required if the interrupt is disabled and we're switching of
    underrun reporting (e.g. because we're disabling the crtc). Hence
    check for that condition.
    
    At first I wanted to rework the code to pass that bit of information
    from the uppper functions down to cpt_set_fifo_underrun_reporting. But
    that turned out too messy. Hence the quick&dirty check whether the
    south error interrupt source is masked off or not.
    
    v4: Streamline the control flow a bit.
    
    v5: s/pipe/pch transcoder/ in the dmesg output, suggested by Paulo.
    
    v6: Review from Paulo:
    - Reorder the was_enabled assignment to only read the register when we
      need it. Also add a comment that we need to do that before updating
      the register.
    - s/%i/%c/ fix for the debug output.
    - Fix the checkpath complaint in the SERR_INT_TRANS_FIFO_UNDERRUN
      #define.
    
    v7: Hopefully put that elusive SERR hunk back into this patch, spotted
    by Paulo.
    
    Cc: Paulo Zanoni <przanoni@gmail.com>
    Reviewed-by: default avatarPaulo Zanoni <paulo.r.zanoni@intel.com>
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    1dd246fb
i915_irq.c 105 KB