[Intel-gfx] [PATCH] drm/i915: enable vblank interrupt on ironlake

Zhenyu Wang zhenyuw at linux.intel.com
Fri Jan 22 03:51:50 CET 2010


On 2010.01.22 01:31:05 +0800, Li Peng wrote:
> so far vblank interrupt on ironlake is disabled, this would cause
> bad gfx performance if userspace calls drm_wait_vblank. This patch
> enables vblank interrupt on ironlake and follows vblank get/put
> model.
> 
> Signed-off-by: Li Peng <peng.li at intel.com>
> ---
>  drivers/gpu/drm/i915/i915_irq.c |   30 +++++++++++++++++++-----------
>  1 files changed, 19 insertions(+), 11 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
> index 89a071a..e7472d8 100644
> --- a/drivers/gpu/drm/i915/i915_irq.c
> +++ b/drivers/gpu/drm/i915/i915_irq.c
> @@ -309,6 +309,12 @@ irqreturn_t ironlake_irq_handler(struct drm_device *dev)
>  	if (de_iir & DE_GSE)
>  		ironlake_opregion_gse_intr(dev);
>  
> +	if (de_iir & DE_PIPEA_VBLANK)
> +		drm_handle_vblank(dev, 0);
> +
> +	if (de_iir & DE_PIPEB_VBLANK)
> +		drm_handle_vblank(dev, 1);
> +
>  	/* check event from PCH */
>  	if ((de_iir & DE_PCH_EVENT) &&
>  	    (pch_iir & SDE_HOTPLUG_MASK)) {
> @@ -844,11 +850,11 @@ int i915_enable_vblank(struct drm_device *dev, int pipe)
>  	if (!(pipeconf & PIPEACONF_ENABLE))
>  		return -EINVAL;
>  
> -	if (IS_IRONLAKE(dev))
> -		return 0;
> -
>  	spin_lock_irqsave(&dev_priv->user_irq_lock, irqflags);
> -	if (IS_I965G(dev))
> +	if (IS_IRONLAKE(dev))
> +		ironlake_enable_display_irq(dev_priv, (pipe == 0) ? 
> +					    DE_PIPEA_VBLANK: DE_PIPEB_VBLANK);
> +	else if (IS_I965G(dev))
>  		i915_enable_pipestat(dev_priv, pipe,
>  				     PIPE_START_VBLANK_INTERRUPT_ENABLE);
>  	else
> @@ -866,13 +872,14 @@ void i915_disable_vblank(struct drm_device *dev, int pipe)
>  	drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
>  	unsigned long irqflags;
>  
> -	if (IS_IRONLAKE(dev))
> -		return;
> -
>  	spin_lock_irqsave(&dev_priv->user_irq_lock, irqflags);
> -	i915_disable_pipestat(dev_priv, pipe,
> -			      PIPE_VBLANK_INTERRUPT_ENABLE |
> -			      PIPE_START_VBLANK_INTERRUPT_ENABLE);
> +	if (IS_IRONLAKE(dev))
> +		ironlake_disable_display_irq(dev_priv, (pipe == 0) ? 
> +					     DE_PIPEA_VBLANK: DE_PIPEB_VBLANK);
> +	else
> +		i915_disable_pipestat(dev_priv, pipe,
> +				      PIPE_VBLANK_INTERRUPT_ENABLE |
> +				      PIPE_START_VBLANK_INTERRUPT_ENABLE);
>  	spin_unlock_irqrestore(&dev_priv->user_irq_lock, irqflags);
>  }
>  
> @@ -1015,7 +1022,8 @@ static int ironlake_irq_postinstall(struct drm_device *dev)
>  {
>  	drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
>  	/* enable kind of interrupts always enabled */
> -	u32 display_mask = DE_MASTER_IRQ_CONTROL | DE_GSE | DE_PCH_EVENT;
> +	u32 display_mask = DE_MASTER_IRQ_CONTROL | DE_GSE | DE_PCH_EVENT |
> +			   DE_PIPEA_VBLANK | DE_PIPEB_VBLANK;
>  	u32 render_mask = GT_USER_INTERRUPT;
>  	u32 hotplug_mask = SDE_CRT_HOTPLUG | SDE_PORTB_HOTPLUG |
>  			   SDE_PORTC_HOTPLUG | SDE_PORTD_HOTPLUG;
> -- 
> 1.6.6
> 

Looks nice to me. Thanks.

Acked-by: Zhenyu Wang <zhenyuw at linux.intel.com>


-- 
Open Source Technology Center, Intel ltd.

$gpg --keyserver wwwkeys.pgp.net --recv-keys 4D781827
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://lists.freedesktop.org/archives/intel-gfx/attachments/20100122/8bcf26d6/attachment.sig>


More information about the Intel-gfx mailing list