• Ville Syrjälä's avatar
    drm/i915: Clear VLV_IER around irq processing · a5e485a9
    Ville Syrjälä authored
    On VLV/CHV the master interrupt enable bit only affects GT/PM
    interrupts. Display interrupts are not affected by the master
    irq control.
    
    Also it seems that the CPU interrupt will only be generated when
    the combined result of all GT/PM/display interrupts has a 0->1
    edge. We already use the master interrupt enable bit to make sure
    GT/PM interrupt can generate such an edge if we don't end up clearing
    all IIR bits. We must do the same for display interrupts, and for
    that we can simply clear out VLV_IER, and restore after we've acked
    all the interrupts we are about to process.
    
    So with both master interrupt enable and VLV_IER cleared out, we will
    guarantee that there will be a 0->1 edge if any IIR bits are still set
    at the end, and thus another CPU interrupt will be generated.
    
    Cc: Chris Wilson <chris@chris-wilson.co.uk>
    Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
    Fixes: 579de73b ("drm/i915: Exit cherryview_irq_handler() after one pass")
    Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
    Link: http://patchwork.freedesktop.org/patch/msgid/1460571598-24452-6-git-send-email-ville.syrjala@linux.intel.comReviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    a5e485a9
i915_irq.c 131 KB