On Thu, 2007-02-15 at 14:22 -0500, Dominik Brodowski wrote:
> 
> This issue (IRQ being disabled) is still present in 2.6.20 and
> 2.6.20-git-as-of-yesterday. It breaks suspend-to-{}, it breaks switching
> from console to tty, and sometimes it locks the system when trying to
> shutdown. Any ideas?

Does this patch happen to make any difference?


-- 
Earthling Michel Dänzer           |          http://tungstengraphics.com
Libre software enthusiast         |          Debian, X and DRI developer
diff --git a/shared-core/i915_irq.c b/shared-core/i915_irq.c
index e373a8d..b459259 100644
--- a/shared-core/i915_irq.c
+++ b/shared-core/i915_irq.c
@@ -213,13 +221,12 @@ irqreturn_t i915_driver_irq_handler(DRM_IRQ_ARGS)
 {
 	drm_device_t *dev = (drm_device_t *) arg;
 	drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
-	u16 temp;
-	u32 pipea_stats, pipeb_stats;
+	u32 temp, pipea_stats, pipeb_stats;
 
 	pipea_stats = I915_READ(I915REG_PIPEASTAT);
 	pipeb_stats = I915_READ(I915REG_PIPEBSTAT);
 		
-	temp = I915_READ16(I915REG_INT_IDENTITY_R);
+	temp = I915_READ(I915REG_INT_IDENTITY_R);
 	temp &= (dev_priv->irq_enable_reg | USER_INT_FLAG);
 
 #if 0
@@ -228,7 +235,7 @@ irqreturn_t i915_driver_irq_handler(DRM_IRQ_ARGS)
 	if (temp == 0)
 		return IRQ_NONE;
 
-	I915_WRITE16(I915REG_INT_IDENTITY_R, temp);
+	I915_WRITE(I915REG_INT_IDENTITY_R, temp);
 
 	dev_priv->sarea_priv->last_dispatch = READ_BREADCRUMB(dev_priv);
 
@@ -298,7 +305,7 @@ void i915_user_irq_on(drm_i915_private_t *dev_priv)
 	spin_lock(&dev_priv->user_irq_lock);
 	if (dev_priv->irq_enabled && (++dev_priv->user_irq_refcount == 1)){
 		dev_priv->irq_enable_reg |= USER_INT_FLAG;
-		I915_WRITE16(I915REG_INT_ENABLE_R, dev_priv->irq_enable_reg);
+		I915_WRITE(I915REG_INT_ENABLE_R, dev_priv->irq_enable_reg);
 	}
 	spin_unlock(&dev_priv->user_irq_lock);
 
@@ -432,7 +439,7 @@ static void i915_enable_interrupt (drm_device_t *dev)
 	if (dev_priv->vblank_pipe & DRM_I915_VBLANK_PIPE_B)
 		dev_priv->irq_enable_reg |= VSYNC_PIPEB_FLAG;
 
-	I915_WRITE16(I915REG_INT_ENABLE_R, dev_priv->irq_enable_reg);
+	I915_WRITE(I915REG_INT_ENABLE_R, dev_priv->irq_enable_reg);
 	dev_priv->irq_enabled = 1;
 }
 
@@ -607,8 +614,8 @@ void i915_driver_irq_preinstall(drm_device_t * dev)
 	drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
 
 	I915_WRITE16(I915REG_HWSTAM, 0xeffe);
-	I915_WRITE16(I915REG_INT_MASK_R, 0x0);
-	I915_WRITE16(I915REG_INT_ENABLE_R, 0x0);
+	I915_WRITE(I915REG_INT_MASK_R, 0x0);
+	I915_WRITE(I915REG_INT_ENABLE_R, 0x0);
 }
 
 void i915_driver_irq_postinstall(drm_device_t * dev)
@@ -650,9 +657,9 @@ void i915_driver_irq_uninstall(drm_device_t * dev)
 
 	dev_priv->irq_enabled = 0;
 	I915_WRITE16(I915REG_HWSTAM, 0xffff);
-	I915_WRITE16(I915REG_INT_MASK_R, 0xffff);
-	I915_WRITE16(I915REG_INT_ENABLE_R, 0x0);
+	I915_WRITE(I915REG_INT_MASK_R, 0xffffffff);
+	I915_WRITE(I915REG_INT_ENABLE_R, 0x0);
 
-	temp = I915_READ16(I915REG_INT_IDENTITY_R);
-	I915_WRITE16(I915REG_INT_IDENTITY_R, temp);
+	temp = I915_READ(I915REG_INT_IDENTITY_R);
+	I915_WRITE(I915REG_INT_IDENTITY_R, temp);
 }
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
--
_______________________________________________
Dri-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/dri-devel

Reply via email to