i915 vsync interrupt fix

From: Jeremy Fitzhardinge
Date: Fri Jun 23 2006 - 20:35:02 EST


I need this patch from Alan Hourihane <mailto:alanh@xxxxxxxxxxxxxxxxxxxx> to make direct rendering work properly on my 945GM-based laptop. It comes from https://bugs.freedesktop.org/show_bug.cgi?id=7233. This change is immediately useful to me now, but I don't know if the development DRM is going to be merged with the kernel any time soon (I notice CVS has a variant of this patch).

J
/

/

From: Alan Hourihane <alanh@xxxxxxxxxxxxxxxxxxxx>

Look at vsync interrupts from pipe B as well as A.
https://bugs.freedesktop.org/show_bug.cgi?id=7233


diff -r 91a715ea44db drivers/char/drm/i915_irq.c
--- a/drivers/char/drm/i915_irq.c Thu Jun 22 19:09:11 2006 -0700
+++ b/drivers/char/drm/i915_irq.c Fri Jun 23 14:08:08 2006 -0700
@@ -44,7 +44,7 @@ irqreturn_t i915_driver_irq_handler(DRM_
u16 temp;

temp = I915_READ16(I915REG_INT_IDENTITY_R);
- temp &= (USER_INT_FLAG | VSYNC_PIPEA_FLAG);
+ temp &= (USER_INT_FLAG | VSYNC_PIPEA_FLAG | VSYNC_PIPEB_FLAG);

DRM_DEBUG("%s flag=%08x\n", __FUNCTION__, temp);

@@ -58,7 +58,7 @@ irqreturn_t i915_driver_irq_handler(DRM_
if (temp & USER_INT_FLAG)
DRM_WAKEUP(&dev_priv->irq_queue);

- if (temp & VSYNC_PIPEA_FLAG) {
+ if (temp & (VSYNC_PIPEA_FLAG | VSYNC_PIPEB_FLAG)) {
atomic_inc(&dev->vbl_received);
DRM_WAKEUP(&dev->vbl_queue);
drm_vbl_send_signals(dev);
@@ -197,7 +197,7 @@ void i915_driver_irq_postinstall(drm_dev
{
drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;

- I915_WRITE16(I915REG_INT_ENABLE_R, USER_INT_FLAG | VSYNC_PIPEA_FLAG);
+ I915_WRITE16(I915REG_INT_ENABLE_R, USER_INT_FLAG | VSYNC_PIPEA_FLAG | VSYNC_PIPEB_FLAG);
DRM_INIT_WAITQUEUE(&dev_priv->irq_queue);
}



-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/