diff options
author | Keith Packard <keithp@neko.keithp.com> | 2007-05-07 09:07:48 -0400 |
---|---|---|
committer | Keith Packard <keithp@neko.keithp.com> | 2007-05-10 13:15:32 -0700 |
commit | e4d163d81ad7ce46af43cf84485dc96c4cb22b1f (patch) | |
tree | 51e23e9d1c9ddf97e620c445c7cdaee2a51f81fb /shared-core | |
parent | e0056c7eb4640fc4863a352997ba00e3142b3355 (diff) |
Allow vblank interrupts to remain disabled across VT switch.
i915_driver_irq_postinstall was forcing vblank interrupts to pipe A when
called with vblank interrupts disabled. This caused vblank interrupts to be
accidentally re-enabled when VT switching the X server. Instead, start the
driver with vblank interrupts enabled on pipe A to support older X servers,
but then leave control over the state to the X server if it is able to do so.
Diffstat (limited to 'shared-core')
-rw-r--r-- | shared-core/i915_dma.c | 4 | ||||
-rw-r--r-- | shared-core/i915_irq.c | 5 |
2 files changed, 4 insertions, 5 deletions
diff --git a/shared-core/i915_dma.c b/shared-core/i915_dma.c index cb5dcea8..8991a3ce 100644 --- a/shared-core/i915_dma.c +++ b/shared-core/i915_dma.c @@ -177,6 +177,10 @@ static int i915_initialize(drm_device_t * dev, */ dev_priv->allow_batchbuffer = 1; + /* Enable vblank on pipe A for older X servers + */ + dev_priv->vblank_pipe = DRM_I915_VBLANK_PIPE_A; + /* Program Hardware Status Page */ dev_priv->status_page_dmah = drm_pci_alloc(dev, PAGE_SIZE, PAGE_SIZE, 0xffffffff); diff --git a/shared-core/i915_irq.c b/shared-core/i915_irq.c index 8748b647..e3335458 100644 --- a/shared-core/i915_irq.c +++ b/shared-core/i915_irq.c @@ -726,9 +726,6 @@ void i915_driver_irq_postinstall(drm_device_t * dev) INIT_LIST_HEAD(&dev_priv->vbl_swaps.head); dev_priv->swaps_pending = 0; - if (!dev_priv->vblank_pipe) - dev_priv->vblank_pipe = DRM_I915_VBLANK_PIPE_A; - dev_priv->swaps_lock = SPIN_LOCK_UNLOCKED; INIT_LIST_HEAD(&dev_priv->vbl_swaps.head); dev_priv->swaps_pending = 0; @@ -736,8 +733,6 @@ void i915_driver_irq_postinstall(drm_device_t * dev) dev_priv->user_irq_lock = SPIN_LOCK_UNLOCKED; dev_priv->user_irq_refcount = 0; - if (!dev_priv->vblank_pipe) - dev_priv->vblank_pipe = DRM_I915_VBLANK_PIPE_A; i915_enable_interrupt(dev); DRM_INIT_WAITQUEUE(&dev_priv->irq_queue); |