mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
drm/i915: kill Ivybridge vblank irq vfuncs
The IVB funtions are exactly the same as the ILK ones, with the exception of the bit register. So add IVB/HSW support to ironlake_enable_vblank and ironlake_disable_vblank, then kill the ivybridge functions. Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com> Reviewed-by: Mika Kuoppala <mika.kuoppala@intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
parent
f1af8fc10c
commit
b518421f5f
2 changed files with 11 additions and 33 deletions
|
@ -1658,29 +1658,14 @@ static int ironlake_enable_vblank(struct drm_device *dev, int pipe)
|
||||||
{
|
{
|
||||||
drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
|
drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
|
||||||
unsigned long irqflags;
|
unsigned long irqflags;
|
||||||
|
uint32_t bit = (INTEL_INFO(dev)->gen >= 7) ? DE_PIPE_VBLANK_IVB(pipe) :
|
||||||
|
DE_PIPE_VBLANK_ILK(pipe);
|
||||||
|
|
||||||
if (!i915_pipe_enabled(dev, pipe))
|
if (!i915_pipe_enabled(dev, pipe))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
|
spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
|
||||||
ironlake_enable_display_irq(dev_priv, (pipe == 0) ?
|
ironlake_enable_display_irq(dev_priv, bit);
|
||||||
DE_PIPEA_VBLANK : DE_PIPEB_VBLANK);
|
|
||||||
spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int ivybridge_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,
|
|
||||||
DE_PIPEA_VBLANK_IVB << (5 * pipe));
|
|
||||||
spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
|
spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1731,21 +1716,11 @@ static void ironlake_disable_vblank(struct drm_device *dev, int pipe)
|
||||||
{
|
{
|
||||||
drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
|
drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
|
||||||
unsigned long irqflags;
|
unsigned long irqflags;
|
||||||
|
uint32_t bit = (INTEL_INFO(dev)->gen >= 7) ? DE_PIPE_VBLANK_IVB(pipe) :
|
||||||
|
DE_PIPE_VBLANK_ILK(pipe);
|
||||||
|
|
||||||
spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
|
spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
|
||||||
ironlake_disable_display_irq(dev_priv, (pipe == 0) ?
|
ironlake_disable_display_irq(dev_priv, bit);
|
||||||
DE_PIPEA_VBLANK : DE_PIPEB_VBLANK);
|
|
||||||
spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ivybridge_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,
|
|
||||||
DE_PIPEA_VBLANK_IVB << (pipe * 5));
|
|
||||||
spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
|
spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3071,8 +3046,8 @@ void intel_irq_init(struct drm_device *dev)
|
||||||
dev->driver->irq_preinstall = ironlake_irq_preinstall;
|
dev->driver->irq_preinstall = ironlake_irq_preinstall;
|
||||||
dev->driver->irq_postinstall = ivybridge_irq_postinstall;
|
dev->driver->irq_postinstall = ivybridge_irq_postinstall;
|
||||||
dev->driver->irq_uninstall = ironlake_irq_uninstall;
|
dev->driver->irq_uninstall = ironlake_irq_uninstall;
|
||||||
dev->driver->enable_vblank = ivybridge_enable_vblank;
|
dev->driver->enable_vblank = ironlake_enable_vblank;
|
||||||
dev->driver->disable_vblank = ivybridge_disable_vblank;
|
dev->driver->disable_vblank = ironlake_disable_vblank;
|
||||||
dev_priv->display.hpd_irq_setup = ibx_hpd_irq_setup;
|
dev_priv->display.hpd_irq_setup = ibx_hpd_irq_setup;
|
||||||
} else if (HAS_PCH_SPLIT(dev)) {
|
} else if (HAS_PCH_SPLIT(dev)) {
|
||||||
dev->driver->irq_handler = ironlake_irq_handler;
|
dev->driver->irq_handler = ironlake_irq_handler;
|
||||||
|
|
|
@ -3787,6 +3787,9 @@
|
||||||
#define DE_PLANEA_FLIP_DONE_IVB (1<<3)
|
#define DE_PLANEA_FLIP_DONE_IVB (1<<3)
|
||||||
#define DE_PIPEA_VBLANK_IVB (1<<0)
|
#define DE_PIPEA_VBLANK_IVB (1<<0)
|
||||||
|
|
||||||
|
#define DE_PIPE_VBLANK_ILK(pipe) (1 << ((pipe * 8) + 7))
|
||||||
|
#define DE_PIPE_VBLANK_IVB(pipe) (1 << (pipe * 5))
|
||||||
|
|
||||||
#define VLV_MASTER_IER 0x4400c /* Gunit master IER */
|
#define VLV_MASTER_IER 0x4400c /* Gunit master IER */
|
||||||
#define MASTER_INTERRUPT_ENABLE (1<<31)
|
#define MASTER_INTERRUPT_ENABLE (1<<31)
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue