drm/amdgpu: add automatic per asic settings for gart_size
authorAlex Deucher <alexander.deucher@amd.com>
Mon, 21 Aug 2017 15:58:25 +0000 (11:58 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 24 Aug 2017 15:48:41 +0000 (11:48 -0400)
We need a larger gart for asics that do not support GPUVM on all
engines (e.g., MM) to make sure we have enough space for all
gtt buffers in physical mode.  Change the default size based on
the asic type.

Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu.h
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c

index 12e71bbfd2228ebeaccd9188142c276653edb938..103635ab784c989945dc1dbcba616b0fe011c8da 100644 (file)
@@ -76,7 +76,7 @@
 extern int amdgpu_modeset;
 extern int amdgpu_vram_limit;
 extern int amdgpu_vis_vram_limit;
-extern unsigned amdgpu_gart_size;
+extern int amdgpu_gart_size;
 extern int amdgpu_gtt_size;
 extern int amdgpu_moverate;
 extern int amdgpu_benchmarking;
index 1a459ac63df453b2cab796b8ed28fd4afff59522..f7ffb029f6d58a743cfba40d574ef1eb23047417 100644 (file)
@@ -1062,11 +1062,11 @@ static void amdgpu_check_arguments(struct amdgpu_device *adev)
                amdgpu_sched_jobs = roundup_pow_of_two(amdgpu_sched_jobs);
        }
 
-       if (amdgpu_gart_size < 32) {
+       if (amdgpu_gart_size != -1 && amdgpu_gart_size < 32) {
                /* gart size must be greater or equal to 32M */
                dev_warn(adev->dev, "gart size (%d) too small\n",
                         amdgpu_gart_size);
-               amdgpu_gart_size = 32;
+               amdgpu_gart_size = -1;
        }
 
        if (amdgpu_gtt_size != -1 && amdgpu_gtt_size < 32) {
index e39ec981b11c85d11ca6250caf2c4ab7de35fd97..4ecf73787475be477cc1df86c6c002a1ec259b50 100644 (file)
@@ -76,7 +76,7 @@
 
 int amdgpu_vram_limit = 0;
 int amdgpu_vis_vram_limit = 0;
-unsigned amdgpu_gart_size = 256;
+int amdgpu_gart_size = -1; /* auto */
 int amdgpu_gtt_size = -1; /* auto */
 int amdgpu_moverate = -1; /* auto */
 int amdgpu_benchmarking = 0;
@@ -128,7 +128,7 @@ module_param_named(vramlimit, amdgpu_vram_limit, int, 0600);
 MODULE_PARM_DESC(vis_vramlimit, "Restrict visible VRAM for testing, in megabytes");
 module_param_named(vis_vramlimit, amdgpu_vis_vram_limit, int, 0444);
 
-MODULE_PARM_DESC(gartsize, "Size of PCIE/IGP gart to setup in megabytes (32, 64, etc.)");
+MODULE_PARM_DESC(gartsize, "Size of gart to setup in megabytes (32, 64, etc., -1=auto)");
 module_param_named(gartsize, amdgpu_gart_size, uint, 0600);
 
 MODULE_PARM_DESC(gttsize, "Size of the GTT domain in megabytes (-1 = auto)");
index 94c1e2e8e34ca659717af06aa944c8e2675ba2a7..b9b9f680fc084bd6f185f26ffa901aded711948d 100644 (file)
  */
 void amdgpu_gart_set_defaults(struct amdgpu_device *adev)
 {
-       adev->mc.gart_size = (uint64_t)amdgpu_gart_size << 20;
+       u64 gart_size;
+
+       if (amdgpu_gart_size == -1) {
+               /* make the GART larger for chips that
+                * dont' support VM for all rings
+                */
+               if (adev->asic_type <= CHIP_STONEY)
+                       gart_size = 1024;
+               else
+                       gart_size = 256;
+       } else {
+               gart_size = amdgpu_gart_size;
+       }
+
+       adev->mc.gart_size = gart_size << 20;
 }
 
 /**