[Intel-gfx] [PATCH 2/5] drm/i915: don't specify the IRQ register in the gen2 macros

Daniele Ceraolo Spurio daniele.ceraolospurio at intel.com
Thu Apr 11 23:31:07 UTC 2019



On 4/10/19 4:53 PM, Paulo Zanoni wrote:
> Like the gen3+ macros, the gen2 versions of the IRQ initialization
> macros take the register name in the 'type' argument. But gen2 only
> has one set of registers, so there's really no need to specify the
> type. This commit removes the type argument and uses the registers
> directly instead of passing them through variables.
> 
> Signed-off-by: Paulo Zanoni <paulo.r.zanoni at intel.com>
> ---
>   drivers/gpu/drm/i915/i915_irq.c | 57 +++++++++++++++------------------
>   1 file changed, 25 insertions(+), 32 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
> index 60a3f4203ac3..b1f1db2bd879 100644
> --- a/drivers/gpu/drm/i915/i915_irq.c
> +++ b/drivers/gpu/drm/i915/i915_irq.c
> @@ -151,19 +151,18 @@ static void gen3_irq_reset(struct drm_i915_private *dev_priv, i915_reg_t imr,
>   	POSTING_READ(iir);
>   }
>   
> -static void gen2_irq_reset(struct drm_i915_private *dev_priv, i915_reg_t imr,
> -			   i915_reg_t iir, i915_reg_t ier)
> +static void gen2_irq_reset(struct drm_i915_private *dev_priv)
>   {
> -	I915_WRITE16(imr, 0xffff);
> -	POSTING_READ16(imr);
> +	I915_WRITE16(IMR, 0xffff);
> +	POSTING_READ16(IMR);
>   
> -	I915_WRITE16(ier, 0);
> +	I915_WRITE16(IER, 0);
>   
>   	/* IIR can theoretically queue up two events. Be paranoid. */
> -	I915_WRITE16(iir, 0xffff);
> -	POSTING_READ16(iir);
> -	I915_WRITE16(iir, 0xffff);
> -	POSTING_READ16(iir);
> +	I915_WRITE16(IIR, 0xffff);
> +	POSTING_READ16(IIR);
> +	I915_WRITE16(IIR, 0xffff);
> +	POSTING_READ16(IIR);
>   }
>   
>   #define GEN8_IRQ_RESET_NDX(type, which) \
> @@ -176,8 +175,8 @@ static void gen2_irq_reset(struct drm_i915_private *dev_priv, i915_reg_t imr,
>   #define GEN3_IRQ_RESET(type) \
>   	gen3_irq_reset(dev_priv, type##IMR, type##IIR, type##IER)
>   
> -#define GEN2_IRQ_RESET(type) \
> -	gen2_irq_reset(dev_priv, type##IMR, type##IIR, type##IER)
> +#define GEN2_IRQ_RESET() \
> +	gen2_irq_reset(dev_priv)

We could potentially drop the macro entirely now since it doesn't really 
add any functional value. The same applies for GEN2_IRQ_INIT.

However, I see the argument for keeping things consistent and use the 
same "look" across gens, so with or without the change:

Reviewed-by: Daniele Ceraolo Spurio <daniele.ceraolospurio at intel.com>

Daniele

>   
>   /*
>    * We should clear IMR at preinstall/uninstall, and just check at postinstall.
> @@ -198,20 +197,19 @@ static void gen3_assert_iir_is_zero(struct drm_i915_private *dev_priv,
>   	POSTING_READ(reg);
>   }
>   
> -static void gen2_assert_iir_is_zero(struct drm_i915_private *dev_priv,
> -				    i915_reg_t reg)
> +static void gen2_assert_iir_is_zero(struct drm_i915_private *dev_priv)
>   {
> -	u16 val = I915_READ16(reg);
> +	u16 val = I915_READ16(IIR);
>   
>   	if (val == 0)
>   		return;
>   
>   	WARN(1, "Interrupt register 0x%x is not zero: 0x%08x\n",
> -	     i915_mmio_reg_offset(reg), val);
> -	I915_WRITE16(reg, 0xffff);
> -	POSTING_READ16(reg);
> -	I915_WRITE16(reg, 0xffff);
> -	POSTING_READ16(reg);
> +	     i915_mmio_reg_offset(IIR), val);
> +	I915_WRITE16(IIR, 0xffff);
> +	POSTING_READ16(IIR);
> +	I915_WRITE16(IIR, 0xffff);
> +	POSTING_READ16(IIR);
>   }
>   
>   static void gen3_irq_init(struct drm_i915_private *dev_priv,
> @@ -227,15 +225,13 @@ static void gen3_irq_init(struct drm_i915_private *dev_priv,
>   }
>   
>   static void gen2_irq_init(struct drm_i915_private *dev_priv,
> -			  i915_reg_t imr, u32 imr_val,
> -			  i915_reg_t ier, u32 ier_val,
> -			  i915_reg_t iir)
> +			  u32 imr_val, u32 ier_val)
>   {
> -	gen2_assert_iir_is_zero(dev_priv, iir);
> +	gen2_assert_iir_is_zero(dev_priv);
>   
> -	I915_WRITE16(ier, ier_val);
> -	I915_WRITE16(imr, imr_val);
> -	POSTING_READ16(imr);
> +	I915_WRITE16(IER, ier_val);
> +	I915_WRITE16(IMR, imr_val);
> +	POSTING_READ16(IMR);
>   }
>   
>   #define GEN8_IRQ_INIT_NDX(type, which, imr_val, ier_val) \
> @@ -253,11 +249,8 @@ static void gen2_irq_init(struct drm_i915_private *dev_priv,
>   		      type##IER, ier_val, \
>   		      type##IIR)
>   
> -#define GEN2_IRQ_INIT(type, imr_val, ier_val) \
> -	gen2_irq_init(dev_priv, \
> -		      type##IMR, imr_val, \
> -		      type##IER, ier_val, \
> -		      type##IIR)
> +#define GEN2_IRQ_INIT(imr_val, ier_val) \
> +	gen2_irq_init(dev_priv, imr_val, ier_val)
>   
>   static void gen6_rps_irq_handler(struct drm_i915_private *dev_priv, u32 pm_iir);
>   static void gen9_guc_irq_handler(struct drm_i915_private *dev_priv, u32 pm_iir);
> @@ -4247,7 +4240,7 @@ static int i8xx_irq_postinstall(struct drm_device *dev)
>   		I915_MASTER_ERROR_INTERRUPT |
>   		I915_USER_INTERRUPT;
>   
> -	GEN2_IRQ_INIT(, dev_priv->irq_mask, enable_mask);
> +	GEN2_IRQ_INIT(dev_priv->irq_mask, enable_mask);
>   
>   	/* Interrupt setup is already guaranteed to be single-threaded, this is
>   	 * just to make the assert_spin_locked check happy. */
> 


More information about the Intel-gfx mailing list