[Intel-gfx] [PATCH] drm/i915: enable vblank interrupt on ironlake
Zhenyu Wang
zhenyuw at linux.intel.com
Mon Jan 25 01:46:27 CET 2010
On 2010.01.23 00:12:58 +0800, Li Peng wrote:
> Thanks for your review, Zhenyu. I made a little update on this patch,
> adding drm_vblank_off() at ironlake crtc dpms off, so that we won't wait
> on a disabled pipe if one display is turned off.
>
yeah, good catch.
Acked-by: Zhenyu Wang <zhenyuw at linux.intel.com>
Eric, I think this is for .33 stuff.
Thanks.
> From: Li Peng <peng.li at intel.com>
> Date: Fri, 22 Jan 2010 20:59:59 +0800
> Subject: drm/i915: enable vblank interrupt on ironlake
>
> 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 +++++++++++++++++++-----------
> drivers/gpu/drm/i915/intel_display.c | 1 +
> 2 files changed, 20 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;
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index 45da78e..2cc489b 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -1638,6 +1638,7 @@ static void ironlake_crtc_dpms(struct drm_crtc *crtc, int mode)
> case DRM_MODE_DPMS_OFF:
> DRM_DEBUG_KMS("crtc %d dpms off\n", pipe);
>
> + drm_vblank_off(dev, pipe);
> /* Disable display plane */
> temp = I915_READ(dspcntr_reg);
> if ((temp & DISPLAY_PLANE_ENABLE) != 0) {
> --
> 1.6.6
>
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
--
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/20100125/2b0cfe1f/attachment.sig>
More information about the Intel-gfx
mailing list