Merge branch 'drm-next-3.12' of git://people.freedesktop.org/~agd5f/linux into drm...
[cascardo/linux.git] / drivers / gpu / drm / radeon / radeon_device.c
index 0610ca4..16cb879 100644 (file)
@@ -1003,16 +1003,28 @@ static void radeon_check_arguments(struct radeon_device *rdev)
                radeon_vram_limit = 0;
        }
 
+       if (radeon_gart_size == -1) {
+               /* default to a larger gart size on newer asics */
+               if (rdev->family >= CHIP_RV770)
+                       radeon_gart_size = 1024;
+               else
+                       radeon_gart_size = 512;
+       }
        /* gtt size must be power of two and greater or equal to 32M */
        if (radeon_gart_size < 32) {
-               dev_warn(rdev->dev, "gart size (%d) too small forcing to 512M\n",
+               dev_warn(rdev->dev, "gart size (%d) too small\n",
                                radeon_gart_size);
-               radeon_gart_size = 512;
-
+               if (rdev->family >= CHIP_RV770)
+                       radeon_gart_size = 1024;
+               else
+                       radeon_gart_size = 512;
        } else if (!radeon_check_pot_argument(radeon_gart_size)) {
                dev_warn(rdev->dev, "gart size (%d) must be a power of 2\n",
                                radeon_gart_size);
-               radeon_gart_size = 512;
+               if (rdev->family >= CHIP_RV770)
+                       radeon_gart_size = 1024;
+               else
+                       radeon_gart_size = 512;
        }
        rdev->mc.gtt_size = (uint64_t)radeon_gart_size << 20;
 
@@ -1144,7 +1156,7 @@ int radeon_device_init(struct radeon_device *rdev,
        rdev->family = flags & RADEON_FAMILY_MASK;
        rdev->is_atom_bios = false;
        rdev->usec_timeout = RADEON_MAX_USEC_TIMEOUT;
-       rdev->mc.gtt_size = radeon_gart_size * 1024 * 1024;
+       rdev->mc.gtt_size = 512 * 1024 * 1024;
        rdev->accel_working = false;
        /* set up ring ids */
        for (i = 0; i < RADEON_NUM_RINGS; i++) {
@@ -1163,6 +1175,7 @@ int radeon_device_init(struct radeon_device *rdev,
        mutex_init(&rdev->gem.mutex);
        mutex_init(&rdev->pm.mutex);
        mutex_init(&rdev->gpu_clock_mutex);
+       mutex_init(&rdev->srbm_mutex);
        init_rwsem(&rdev->pm.mclk_lock);
        init_rwsem(&rdev->exclusive_lock);
        init_waitqueue_head(&rdev->irq.vblank_queue);
@@ -1519,6 +1532,7 @@ int radeon_gpu_reset(struct radeon_device *rdev)
        radeon_save_bios_scratch_regs(rdev);
        /* block TTM */
        resched = ttm_bo_lock_delayed_workqueue(&rdev->mman.bdev);
+       radeon_pm_suspend(rdev);
        radeon_suspend(rdev);
 
        for (i = 0; i < RADEON_NUM_RINGS; ++i) {
@@ -1564,6 +1578,7 @@ retry:
                }
        }
 
+       radeon_pm_resume(rdev);
        drm_helper_resume_force_mode(rdev->ddev);
 
        ttm_bo_unlock_delayed_workqueue(&rdev->mman.bdev, resched);