[Intel-gfx] [PATCH 3/4] drm/i915: Clear all residual RPS events on disabling interrupts

Mika Kuoppala mika.kuoppala at linux.intel.com
Fri Aug 3 13:59:58 UTC 2018


Chris Wilson <chris at chris-wilson.co.uk> writes:

> Make sure that the RPS IIR is completely clear on disabling so we should
> not get any more interrupts after idling. Since the IIR is shared with
> the guc, we have to be careful to only clobber RPS events.
>
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> Cc: Mika Kuoppala <mika.kuoppala at intel.com>
> ---
>  drivers/gpu/drm/i915/i915_irq.c | 8 +++++---
>  drivers/gpu/drm/i915/i915_reg.h | 6 ++++--
>  2 files changed, 9 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
> index e37e3ec22a79..8084e35b25c5 100644
> --- a/drivers/gpu/drm/i915/i915_irq.c
> +++ b/drivers/gpu/drm/i915/i915_irq.c
> @@ -478,7 +478,7 @@ void gen11_reset_rps_interrupts(struct drm_i915_private *dev_priv)
>  void gen6_reset_rps_interrupts(struct drm_i915_private *dev_priv)
>  {
>  	spin_lock_irq(&dev_priv->irq_lock);
> -	gen6_reset_pm_iir(dev_priv, dev_priv->pm_rps_events);
> +	gen6_reset_pm_iir(dev_priv, GEN6_PM_RPS_EVENTS);
>  	dev_priv->gt_pm.rps.pm_iir = 0;
>  	spin_unlock_irq(&dev_priv->irq_lock);
>  }
> @@ -516,7 +516,7 @@ void gen6_disable_rps_interrupts(struct drm_i915_private *dev_priv)
>  
>  	I915_WRITE(GEN6_PMINTRMSK, gen6_sanitize_rps_pm_mask(dev_priv, ~0u));
>  
> -	gen6_disable_pm_irq(dev_priv, dev_priv->pm_rps_events);
> +	gen6_disable_pm_irq(dev_priv, GEN6_PM_RPS_EVENTS);
>  
>  	spin_unlock_irq(&dev_priv->irq_lock);
>  	synchronize_irq(dev_priv->drm.irq);
> @@ -4778,7 +4778,9 @@ void intel_irq_init(struct drm_i915_private *dev_priv)
>  		/* WaGsvRC0ResidencyMethod:vlv */
>  		dev_priv->pm_rps_events = GEN6_PM_RP_UP_EI_EXPIRED;
>  	else
> -		dev_priv->pm_rps_events = GEN6_PM_RPS_EVENTS;
> +		dev_priv->pm_rps_events = (GEN6_PM_RP_UP_THRESHOLD |
> +					   GEN6_PM_RP_DOWN_THRESHOLD |
> +					   GEN6_PM_RP_DOWN_TIMEOUT);
>  
>  	rps->pm_intrmsk_mbz = 0;
>  
> diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
> index e0f5999fff07..4b656f31fde9 100644
> --- a/drivers/gpu/drm/i915/i915_reg.h
> +++ b/drivers/gpu/drm/i915/i915_reg.h
> @@ -8582,8 +8582,10 @@ enum {
>  #define  GEN6_PM_RP_DOWN_THRESHOLD		(1 << 4)
>  #define  GEN6_PM_RP_UP_EI_EXPIRED		(1 << 2)
>  #define  GEN6_PM_RP_DOWN_EI_EXPIRED		(1 << 1)
> -#define  GEN6_PM_RPS_EVENTS			(GEN6_PM_RP_UP_THRESHOLD | \
> -						 GEN6_PM_RP_DOWN_THRESHOLD | \
> +#define  GEN6_PM_RPS_EVENTS			(GEN6_PM_RP_UP_EI_EXPIRED   | \
> +						 GEN6_PM_RP_UP_THRESHOLD    | \
> +						 GEN6_PM_RP_DOWN_EI_EXPIRED | \
> +						 GEN6_PM_RP_DOWN_THRESHOLD  | \
>  						 GEN6_PM_RP_DOWN_TIMEOUT)

GEN6_PM_RPS_MASK ?

Reviewed-by: Mika Kuoppala <mika.kuoppala at linux.intel.com>

>  
>  #define GEN7_GT_SCRATCH(i)			_MMIO(0x4F100 + (i) * 4)
> -- 
> 2.18.0
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx


More information about the Intel-gfx mailing list