diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-12-09 08:27:39 -0800 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-12-09 08:27:39 -0800 | 
| commit | 21283f056fe10a022187a40c331100a1a9a90244 (patch) | |
| tree | 2b46c8428c5b97405a5ddfc6303f18ae383e4f08 | |
| parent | cdf0c7de29a87cc600ef367893523ea15938da4e (diff) | |
| parent | b60678a75d44fa9d5969f79781bd856ad5858609 (diff) | |
Merge branch 'drm-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6
* 'drm-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6:
  drm/i915: Disable the GM965 MSI errata workaround.
  drm/i915: Don't return error in evict_everything when we get to the end.
  drm/radeon: don't actually enable the IRQ regs until irq is enabled
| -rw-r--r-- | drivers/gpu/drm/i915/i915_dma.c | 5 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/i915_gem.c | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_drv.h | 1 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_irq.c | 8 | 
4 files changed, 9 insertions, 7 deletions
diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c index ba89b42f790a..553dd4bc3075 100644 --- a/drivers/gpu/drm/i915/i915_dma.c +++ b/drivers/gpu/drm/i915/i915_dma.c @@ -847,9 +847,10 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)  	 * and the registers being closely associated.  	 *  	 * According to chipset errata, on the 965GM, MSI interrupts may -	 * be lost or delayed +	 * be lost or delayed, but we use them anyways to avoid +	 * stuck interrupts on some machines.  	 */ -	if (!IS_I945G(dev) && !IS_I945GM(dev) && !IS_I965GM(dev)) +	if (!IS_I945G(dev) && !IS_I945GM(dev))  		pci_enable_msi(dev->pdev);  	intel_opregion_init(dev); diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index 3fde82be014f..ad672d854828 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c @@ -1104,6 +1104,8 @@ i915_gem_evict_everything(struct drm_device *dev)  		if (ret != 0)  			break;  	} +	if (ret == -ENOMEM) +		return 0;  	return ret;  } diff --git a/drivers/gpu/drm/radeon/radeon_drv.h b/drivers/gpu/drm/radeon/radeon_drv.h index 7a183789be97..3bbb871b25d5 100644 --- a/drivers/gpu/drm/radeon/radeon_drv.h +++ b/drivers/gpu/drm/radeon/radeon_drv.h @@ -299,7 +299,6 @@ typedef struct drm_radeon_private {  	atomic_t swi_emitted;  	int vblank_crtc;  	uint32_t irq_enable_reg; -	int irq_enabled;  	uint32_t r500_disp_irq_reg;  	struct radeon_surface surfaces[RADEON_MAX_SURFACES]; diff --git a/drivers/gpu/drm/radeon/radeon_irq.c b/drivers/gpu/drm/radeon/radeon_irq.c index 97c0599fdb1e..99be11418ac2 100644 --- a/drivers/gpu/drm/radeon/radeon_irq.c +++ b/drivers/gpu/drm/radeon/radeon_irq.c @@ -44,7 +44,8 @@ void radeon_irq_set_state(struct drm_device *dev, u32 mask, int state)  	else  		dev_priv->irq_enable_reg &= ~mask; -	RADEON_WRITE(RADEON_GEN_INT_CNTL, dev_priv->irq_enable_reg); +	if (!dev->irq_enabled) +		RADEON_WRITE(RADEON_GEN_INT_CNTL, dev_priv->irq_enable_reg);  }  static void r500_vbl_irq_set_state(struct drm_device *dev, u32 mask, int state) @@ -56,7 +57,8 @@ static void r500_vbl_irq_set_state(struct drm_device *dev, u32 mask, int state)  	else  		dev_priv->r500_disp_irq_reg &= ~mask; -	RADEON_WRITE(R500_DxMODE_INT_MASK, dev_priv->r500_disp_irq_reg); +	if (!dev->irq_enabled) +		RADEON_WRITE(R500_DxMODE_INT_MASK, dev_priv->r500_disp_irq_reg);  }  int radeon_enable_vblank(struct drm_device *dev, int crtc) @@ -355,8 +357,6 @@ void radeon_driver_irq_uninstall(struct drm_device * dev)  	if (!dev_priv)  		return; -	dev_priv->irq_enabled = 0; -  	if ((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_RS690)  		RADEON_WRITE(R500_DxMODE_INT_MASK, 0);  	/* Disable *all* interrupts */  | 
