[Intel-gfx] [PATCH 03/19] drm/i915: split enable/disable vblank code into chipset specific functions

2011-04-28 Thread Jesse Barnes
This makes the Ironlake+ code trivial and generally simplifies things.

Signed-off-by: Jesse Barnes jbar...@virtuousgeek.org
---
 drivers/gpu/drm/i915/i915_dma.c |4 +++
 drivers/gpu/drm/i915/i915_drv.h |2 +
 drivers/gpu/drm/i915/i915_irq.c |   42 --
 3 files changed, 37 insertions(+), 11 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
index 2f653c2..d124f0e 100644
--- a/drivers/gpu/drm/i915/i915_dma.c
+++ b/drivers/gpu/drm/i915/i915_dma.c
@@ -1258,11 +1258,15 @@ static int i915_load_modeset_init(struct drm_device 
*dev)
dev-driver-irq_preinstall = ironlake_irq_preinstall;
dev-driver-irq_postinstall = ironlake_irq_postinstall;
dev-driver-irq_uninstall = ironlake_irq_uninstall;
+   dev-driver-enable_vblank = ironlake_enable_vblank;
+   dev-driver-disable_vblank = ironlake_disable_vblank;
} else {
dev-driver-irq_preinstall = i915_driver_irq_preinstall;
dev-driver-irq_postinstall = i915_driver_irq_postinstall;
dev-driver-irq_uninstall = i915_driver_irq_uninstall;
dev-driver-irq_handler = i915_driver_irq_handler;
+   dev-driver-enable_vblank = i915_enable_vblank;
+   dev-driver-disable_vblank = i915_disable_vblank;
}
 
ret = drm_irq_install(dev);
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 4841901..4dfe3fa 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -1036,6 +1036,8 @@ extern int i915_vblank_pipe_get(struct drm_device *dev, 
void *data,
struct drm_file *file_priv);
 extern int i915_enable_vblank(struct drm_device *dev, int crtc);
 extern void i915_disable_vblank(struct drm_device *dev, int crtc);
+extern int ironlake_enable_vblank(struct drm_device *dev, int crtc);
+extern void ironlake_disable_vblank(struct drm_device *dev, int crtc);
 extern u32 i915_get_vblank_counter(struct drm_device *dev, int crtc);
 extern u32 gm45_get_vblank_counter(struct drm_device *dev, int crtc);
 extern int i915_vblank_swap(struct drm_device *dev, void *data,
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
index a58d477..d5dcb8f 100644
--- a/drivers/gpu/drm/i915/i915_irq.c
+++ b/drivers/gpu/drm/i915/i915_irq.c
@@ -1344,10 +1344,7 @@ int i915_enable_vblank(struct drm_device *dev, int pipe)
return -EINVAL;
 
spin_lock_irqsave(dev_priv-irq_lock, irqflags);
-   if (HAS_PCH_SPLIT(dev))
-   ironlake_enable_display_irq(dev_priv, (pipe == 0) ?
-   DE_PIPEA_VBLANK: DE_PIPEB_VBLANK);
-   else if (INTEL_INFO(dev)-gen = 4)
+   if (INTEL_INFO(dev)-gen = 4)
i915_enable_pipestat(dev_priv, pipe,
 PIPE_START_VBLANK_INTERRUPT_ENABLE);
else
@@ -1362,6 +1359,22 @@ int i915_enable_vblank(struct drm_device *dev, int pipe)
return 0;
 }
 
+int ironlake_enable_vblank(struct drm_device *dev, int pipe)
+{
+   drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev-dev_private;
+   unsigned long irqflags;
+
+   if (!i915_pipe_enabled(dev, pipe))
+   return -EINVAL;
+
+   spin_lock_irqsave(dev_priv-irq_lock, irqflags);
+   ironlake_enable_display_irq(dev_priv, (pipe == 0) ?
+   DE_PIPEA_VBLANK: DE_PIPEB_VBLANK);
+   spin_unlock_irqrestore(dev_priv-irq_lock, irqflags);
+
+   return 0;
+}
+
 /* Called from drm generic code, passed 'crtc' which
  * we use as a pipe index
  */
@@ -1375,13 +1388,20 @@ void i915_disable_vblank(struct drm_device *dev, int 
pipe)
I915_WRITE(INSTPM,
   INSTPM_AGPBUSY_DIS  16 | INSTPM_AGPBUSY_DIS);
 
-   if (HAS_PCH_SPLIT(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);
+   i915_disable_pipestat(dev_priv, pipe,
+ PIPE_VBLANK_INTERRUPT_ENABLE |
+ PIPE_START_VBLANK_INTERRUPT_ENABLE);
+   spin_unlock_irqrestore(dev_priv-irq_lock, irqflags);
+}
+
+void ironlake_disable_vblank(struct drm_device *dev, int pipe)
+{
+   drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev-dev_private;
+   unsigned long irqflags;
+
+   spin_lock_irqsave(dev_priv-irq_lock, irqflags);
+   ironlake_disable_display_irq(dev_priv, (pipe == 0) ?
+DE_PIPEA_VBLANK: DE_PIPEB_VBLANK);
spin_unlock_irqrestore(dev_priv-irq_lock, irqflags);
 }
 
-- 
1.7.4.1


Re: [Intel-gfx] [PATCH 03/19] drm/i915: split enable/disable vblank code into chipset specific functions

2011-04-28 Thread Keith Packard
On Thu, 28 Apr 2011 15:12:49 -0700, Jesse Barnes jbar...@virtuousgeek.org 
wrote:

 This makes the Ironlake+ code trivial and generally simplifies things.
 
 Signed-off-by: Jesse Barnes jbar...@virtuousgeek.org

Reviewed-by: Keith Packard kei...@keithp.com

-- 
keith.pack...@intel.com


pgpmUuBtFRc86.pgp
Description: PGP signature
___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx