aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Deucher <alexander.deucher@amd.com>2017-08-21 11:58:25 -0400
committerAlex Deucher <alexander.deucher@amd.com>2017-08-29 15:27:40 -0400
commit83e74db6a81daff277732bdd00b438ede2107c68 (patch)
tree7dda9615b65457160dfe6a2db2f4cfb3a09f91e5
parent2d6fb10565ca13e7a0f6f4725f1c3da5a99a2bcc (diff)
drm/amdgpu: add automatic per asic settings for gart_size
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>
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu.h2
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_device.c4
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c4
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c16
4 files changed, 20 insertions, 6 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
index 12e71bbfd222..103635ab784c 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
@@ -76,7 +76,7 @@
76extern int amdgpu_modeset; 76extern int amdgpu_modeset;
77extern int amdgpu_vram_limit; 77extern int amdgpu_vram_limit;
78extern int amdgpu_vis_vram_limit; 78extern int amdgpu_vis_vram_limit;
79extern unsigned amdgpu_gart_size; 79extern int amdgpu_gart_size;
80extern int amdgpu_gtt_size; 80extern int amdgpu_gtt_size;
81extern int amdgpu_moverate; 81extern int amdgpu_moverate;
82extern int amdgpu_benchmarking; 82extern int amdgpu_benchmarking;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
index 1a459ac63df4..f7ffb029f6d5 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -1062,11 +1062,11 @@ static void amdgpu_check_arguments(struct amdgpu_device *adev)
1062 amdgpu_sched_jobs = roundup_pow_of_two(amdgpu_sched_jobs); 1062 amdgpu_sched_jobs = roundup_pow_of_two(amdgpu_sched_jobs);
1063 } 1063 }
1064 1064
1065 if (amdgpu_gart_size < 32) { 1065 if (amdgpu_gart_size != -1 && amdgpu_gart_size < 32) {
1066 /* gart size must be greater or equal to 32M */ 1066 /* gart size must be greater or equal to 32M */
1067 dev_warn(adev->dev, "gart size (%d) too small\n", 1067 dev_warn(adev->dev, "gart size (%d) too small\n",
1068 amdgpu_gart_size); 1068 amdgpu_gart_size);
1069 amdgpu_gart_size = 32; 1069 amdgpu_gart_size = -1;
1070 } 1070 }
1071 1071
1072 if (amdgpu_gtt_size != -1 && amdgpu_gtt_size < 32) { 1072 if (amdgpu_gtt_size != -1 && amdgpu_gtt_size < 32) {
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
index e39ec981b11c..4ecf73787475 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
@@ -76,7 +76,7 @@
76 76
77int amdgpu_vram_limit = 0; 77int amdgpu_vram_limit = 0;
78int amdgpu_vis_vram_limit = 0; 78int amdgpu_vis_vram_limit = 0;
79unsigned amdgpu_gart_size = 256; 79int amdgpu_gart_size = -1; /* auto */
80int amdgpu_gtt_size = -1; /* auto */ 80int amdgpu_gtt_size = -1; /* auto */
81int amdgpu_moverate = -1; /* auto */ 81int amdgpu_moverate = -1; /* auto */
82int amdgpu_benchmarking = 0; 82int amdgpu_benchmarking = 0;
@@ -128,7 +128,7 @@ module_param_named(vramlimit, amdgpu_vram_limit, int, 0600);
128MODULE_PARM_DESC(vis_vramlimit, "Restrict visible VRAM for testing, in megabytes"); 128MODULE_PARM_DESC(vis_vramlimit, "Restrict visible VRAM for testing, in megabytes");
129module_param_named(vis_vramlimit, amdgpu_vis_vram_limit, int, 0444); 129module_param_named(vis_vramlimit, amdgpu_vis_vram_limit, int, 0444);
130 130
131MODULE_PARM_DESC(gartsize, "Size of PCIE/IGP gart to setup in megabytes (32, 64, etc.)"); 131MODULE_PARM_DESC(gartsize, "Size of gart to setup in megabytes (32, 64, etc., -1=auto)");
132module_param_named(gartsize, amdgpu_gart_size, uint, 0600); 132module_param_named(gartsize, amdgpu_gart_size, uint, 0600);
133 133
134MODULE_PARM_DESC(gttsize, "Size of the GTT domain in megabytes (-1 = auto)"); 134MODULE_PARM_DESC(gttsize, "Size of the GTT domain in megabytes (-1 = auto)");
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c
index 94c1e2e8e34c..b9b9f680fc08 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c
@@ -65,7 +65,21 @@
65 */ 65 */
66void amdgpu_gart_set_defaults(struct amdgpu_device *adev) 66void amdgpu_gart_set_defaults(struct amdgpu_device *adev)
67{ 67{
68 adev->mc.gart_size = (uint64_t)amdgpu_gart_size << 20; 68 u64 gart_size;
69
70 if (amdgpu_gart_size == -1) {
71 /* make the GART larger for chips that
72 * dont' support VM for all rings
73 */
74 if (adev->asic_type <= CHIP_STONEY)
75 gart_size = 1024;
76 else
77 gart_size = 256;
78 } else {
79 gart_size = amdgpu_gart_size;
80 }
81
82 adev->mc.gart_size = gart_size << 20;
69} 83}
70 84
71/** 85/**