drm/radeon: Add MSI quirk for gateway RS690
[pandora-kernel.git] / drivers / gpu / drm / radeon / radeon_irq_kms.c
index afaa172..2da4465 100644 (file)
@@ -99,7 +99,6 @@ void radeon_driver_irq_preinstall_kms(struct drm_device *dev)
        /* Disable *all* interrupts */
        for (i = 0; i < RADEON_NUM_RINGS; i++)
                atomic_set(&rdev->irq.ring_int[i], 0);
-       rdev->irq.gui_idle = false;
        for (i = 0; i < RADEON_MAX_HPD_PINS; i++)
                rdev->irq.hpd[i] = false;
        for (i = 0; i < RADEON_MAX_CRTCS; i++) {
@@ -147,7 +146,6 @@ void radeon_driver_irq_uninstall_kms(struct drm_device *dev)
        /* Disable *all* interrupts */
        for (i = 0; i < RADEON_NUM_RINGS; i++)
                atomic_set(&rdev->irq.ring_int[i], 0);
-       rdev->irq.gui_idle = false;
        for (i = 0; i < RADEON_MAX_HPD_PINS; i++)
                rdev->irq.hpd[i] = false;
        for (i = 0; i < RADEON_MAX_CRTCS; i++) {
@@ -204,6 +202,12 @@ static bool radeon_msi_ok(struct radeon_device *rdev)
            (rdev->pdev->subsystem_device == 0x01fd))
                return true;
 
+       /* Gateway RS690 only seems to work with MSIs. */
+       if ((rdev->pdev->device == 0x791f) &&
+           (rdev->pdev->subsystem_vendor == 0x107b) &&
+           (rdev->pdev->subsystem_device == 0x0185))
+               return true;
+
        /* RV515 seems to have MSI issues where it loses
         * MSI rearms occasionally. This leads to lockups and freezes.
         * disable it by default.
@@ -457,34 +461,3 @@ void radeon_irq_kms_disable_hpd(struct radeon_device *rdev, unsigned hpd_mask)
        spin_unlock_irqrestore(&rdev->irq.lock, irqflags);
 }
 
-/**
- * radeon_irq_kms_wait_gui_idle - waits for drawing engine to be idle
- *
- * @rdev: radeon device pointer
- *
- * Enabled the GUI idle interrupt and waits for it to fire (r6xx+).
- * This is currently used to make sure the 3D engine is idle for power
- * management, but should be replaces with proper fence waits.
- * GUI idle interrupts don't work very well on pre-r6xx hw and it also
- * does not take into account other aspects of the chip that may be busy.
- * DO NOT USE GOING FORWARD.
- */
-int radeon_irq_kms_wait_gui_idle(struct radeon_device *rdev)
-{
-       unsigned long irqflags;
-       int r;
-
-       spin_lock_irqsave(&rdev->irq.lock, irqflags);
-       rdev->irq.gui_idle = true;
-       radeon_irq_set(rdev);
-       spin_unlock_irqrestore(&rdev->irq.lock, irqflags);
-
-       r = wait_event_timeout(rdev->irq.idle_queue, radeon_gui_idle(rdev),
-                              msecs_to_jiffies(RADEON_WAIT_IDLE_TIMEOUT));
-
-       spin_lock_irqsave(&rdev->irq.lock, irqflags);
-       rdev->irq.gui_idle = false;
-       radeon_irq_set(rdev);
-       spin_unlock_irqrestore(&rdev->irq.lock, irqflags);
-       return r;
-}