diff options
| author | 2012-09-25 10:19:46 +0000 | |
|---|---|---|
| committer | 2012-09-25 10:19:46 +0000 | |
| commit | 0642c20bdec0ed0da7abfa7c344453d06e7c927b (patch) | |
| tree | 4fdcefadfa310e5793e3e268b02dbaa2c530f0b2 /sys/dev/pci/drm/i915_irq.c | |
| parent | Remove unused acpi locking code. (diff) | |
| download | wireguard-openbsd-0642c20bdec0ed0da7abfa7c344453d06e7c927b.tar.xz wireguard-openbsd-0642c20bdec0ed0da7abfa7c344453d06e7c927b.zip | |
Add minimal support for gen7/ivy bridge in inteldrm.
Like gen6/sandy bridge this is enough to manage memory but
does not attempt to setup the rings.
ok kettenis@
Diffstat (limited to 'sys/dev/pci/drm/i915_irq.c')
| -rw-r--r-- | sys/dev/pci/drm/i915_irq.c | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/sys/dev/pci/drm/i915_irq.c b/sys/dev/pci/drm/i915_irq.c index a61eea60a9c..99edae49483 100644 --- a/sys/dev/pci/drm/i915_irq.c +++ b/sys/dev/pci/drm/i915_irq.c @@ -1,4 +1,4 @@ -/* $OpenBSD: i915_irq.c,v 1.53 2012/05/19 18:02:53 kettenis Exp $ */ +/* $OpenBSD: i915_irq.c,v 1.54 2012/09/25 10:19:46 jsg Exp $ */ /* i915_irq.c -- IRQ support for the I915 -*- linux-c -*- */ /* @@ -68,7 +68,7 @@ ironlake_enable_graphics_irq(struct inteldrm_softc *dev_priv, u_int32_t mask) if ((dev_priv->gt_irq_mask_reg & mask) != 0) { /* XXX imr bullshit */ dev_priv->gt_irq_mask_reg &= ~mask; - if (IS_GEN6(dev_priv)) { + if (IS_GEN6(dev_priv) || IS_GEN7(dev_priv)) { I915_WRITE(0x20a8, dev_priv->gt_irq_mask_reg); (void)I915_READ(0x20a8); } else { @@ -83,7 +83,7 @@ ironlake_disable_graphics_irq(struct inteldrm_softc *dev_priv, u_int32_t mask) { if ((dev_priv->gt_irq_mask_reg & mask) != mask) { dev_priv->gt_irq_mask_reg |= mask; - if (IS_GEN6(dev_priv)) { + if (IS_GEN6(dev_priv) || IS_GEN7(dev_priv)) { I915_WRITE(0x20a8, dev_priv->gt_irq_mask_reg); (void)I915_READ(0x20a8); } else { @@ -172,7 +172,7 @@ i915_get_vblank_counter(struct drm_device *dev, int pipe) /* GM45 just had to be different... */ if (IS_GM45(dev_priv) || IS_G4X(dev_priv) || IS_IRONLAKE(dev_priv) || - IS_GEN6(dev_priv)) { + IS_GEN6(dev_priv) || IS_GEN7(dev_priv)) { return (I915_READ(PIPE_FRMCOUNT_GM45(pipe))); } @@ -226,7 +226,10 @@ i915_enable_vblank(struct drm_device *dev, int pipe) return (EINVAL); mtx_enter(&dev_priv->user_irq_lock); - if (HAS_PCH_SPLIT(dev_priv)) + if (IS_GEN7(dev_priv)) + ironlake_enable_display_irq(dev_priv, + DE_PIPEA_VBLANK_IVB << (5 * pipe)); + else if (HAS_PCH_SPLIT(dev_priv)) ironlake_enable_display_irq(dev_priv, (pipe == 0) ? DE_PIPEA_VBLANK : DE_PIPEB_VBLANK); else @@ -244,7 +247,10 @@ i915_disable_vblank(struct drm_device *dev, int pipe) struct inteldrm_softc *dev_priv = dev->dev_private; mtx_enter(&dev_priv->user_irq_lock); - if (HAS_PCH_SPLIT(dev_priv)) + if (IS_GEN7(dev_priv)) + ironlake_disable_display_irq(dev_priv, + DE_PIPEA_VBLANK_IVB << (pipe * 5)); + else if (HAS_PCH_SPLIT(dev_priv)) ironlake_disable_display_irq(dev_priv, (pipe == 0) ? DE_PIPEA_VBLANK : DE_PIPEB_VBLANK); else @@ -262,7 +268,8 @@ i915_driver_irq_install(struct drm_device *dev) struct inteldrm_softc *dev_priv = dev->dev_private; dev->vblank->vb_max = 0xffffff; /* only 24 bits of frame count */ - if (IS_G4X(dev_priv) || IS_IRONLAKE(dev_priv) || IS_GEN6(dev_priv)) + if (IS_G4X(dev_priv) || IS_IRONLAKE(dev_priv) || IS_GEN6(dev_priv) || + IS_GEN7(dev_priv)) dev->vblank->vb_max = 0xffffffff; I915_WRITE(HWSTAM, 0xeffe); |
