Merging drm-ttm-0-2-branch
authorThomas Hellstrom <thomas-at-tungstengraphics-dot-com>
Wed, 18 Oct 2006 15:33:19 +0000 (17:33 +0200)
committerThomas Hellstrom <thomas-at-tungstengraphics-dot-com>
Wed, 18 Oct 2006 15:33:19 +0000 (17:33 +0200)
Conflicts:

linux-core/drmP.h
linux-core/drm_drv.c
linux-core/drm_irq.c
linux-core/drm_stub.c
shared-core/drm.h
shared-core/i915_drv.h
shared-core/i915_irq.c

1  2 
libdrm/xf86drm.h
linux-core/drmP.h
linux-core/drm_bufs.c
linux-core/drm_irq.c
linux-core/drm_stub.c
linux-core/drm_vm.c
shared-core/drm.h
shared-core/i915_dma.c
shared-core/i915_irq.c

Simple merge
Simple merge
Simple merge
Simple merge
@@@ -66,10 -70,9 +71,11 @@@ static int drm_fill_in_dev(drm_device_
        init_timer(&dev->timer);
        mutex_init(&dev->struct_mutex);
        mutex_init(&dev->ctxlist_mutex);
+       mutex_init(&dev->bm.init_mutex);
  
        dev->pdev = pdev;
 +      dev->pci_device = pdev->device;
 +      dev->pci_vendor = pdev->vendor;
  
  #ifdef __alpha__
        dev->hose = pdev->sysdata;
Simple merge
Simple merge
Simple merge
@@@ -316,15 -345,15 +345,15 @@@ int i915_irq_wait(DRM_IOCTL_ARGS
  static void i915_enable_interrupt (drm_device_t *dev)
  {
        drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
-       u16 flag;
        
-       flag = 0;
 -      dev_priv->irq_enable_reg = USER_INT_FLAG; //&= ~(VSYNC_PIPEA_FLAG | VSYNC_PIPEB_FLAG);
++      dev_priv->irq_enable_reg = USER_INT_FLAG; 
        if (dev_priv->vblank_pipe & DRM_I915_VBLANK_PIPE_A)
-               flag |= VSYNC_PIPEA_FLAG;
+               dev_priv->irq_enable_reg |= VSYNC_PIPEA_FLAG;
        if (dev_priv->vblank_pipe & DRM_I915_VBLANK_PIPE_B)
-               flag |= VSYNC_PIPEB_FLAG;
+               dev_priv->irq_enable_reg |= VSYNC_PIPEB_FLAG;
  
-       I915_WRITE16(I915REG_INT_ENABLE_R, USER_INT_FLAG | flag);
+       I915_WRITE16(I915REG_INT_ENABLE_R, dev_priv->irq_enable_reg);
+       dev_priv->irq_enabled = 1;
  }
  
  /* Set the vblank monitor pipe
@@@ -510,10 -539,19 +539,26 @@@ void i915_driver_irq_postinstall(drm_de
        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;
++
+       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);
+       /*
+        * Initialize the hardware status page IRQ location.
+        */
+       I915_WRITE(I915REG_INSTPM, ( 1 << 5) | ( 1 << 21));
  }
  
  void i915_driver_irq_uninstall(drm_device_t * dev)