• Imre Deak's avatar
    drm/i915: mask RPS IRQs properly when disabling RPS · 9939fba2
    Imre Deak authored
    Atm, igt/gem_reset_stats can trigger the recently added WARN on
    left-over PM_IIR bits in gen6_enable_rps_interrupts(). There are two
    reasons for this:
    1. we call intel_enable_gt_powersave() without a preceeding
       intel_disable_gt_powersave()
    2. gen6_disable_rps_interrupts() doesn't mask interrupts in PM_IMR
    
    1. means RPS interrupts will remain enabled and can be serviced during
    the HW initialization after a GPU reset. 2. means even if we called
    gen6_disable_rps_interrupts() any new RPS interrupt during RPS
    initialization would still propagate to PM_IIR too early (though
    wouldn't be serviced).
    
    This patch solves the 2. issue by also masking interrupts in PM_IMR, the
    following patch fixes 1. getting rid of the WARN. This also makes
    intel_enable_gt_powersave() and intel_disable_gt_powersave() more
    symmetric.
    
    Since gen6_disable_rps_interrupts() is called during driver loading with
    i915 interrupts disabled add a new version of gen6_disable_pm_irq() that
    doesn't WARN for this.
    
    Also while at it, get the irq_lock around the whole PM_IMR/IER/IIR
    programming sequence and make sure that any queued PM_IIR bit is also
    cleared.
    
    The WARN was caught by PRTS after I sent my previous RPS sanitizing
    patchset and I could easily reproduce it on HSW. To actually fix it we
    also need the next patch.
    Reported-by: default avatarHe, Shuang <shuang.he@intel.com>
    Signed-off-by: default avatarImre Deak <imre.deak@intel.com>
    Reviewed-by: default avatarPaulo Zanoni <paulo.r.zanoni@intel.com>
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    9939fba2
i915_irq.c 127 KB