aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd
diff options
context:
space:
mode:
authorRoger He <Hongbo.He@amd.com>2017-08-15 04:05:59 -0400
committerAlex Deucher <alexander.deucher@amd.com>2017-08-17 16:47:43 -0400
commitd07f14be4d11cf323977672342fb0fc6017052f6 (patch)
tree4361547a6d52ef30c2294189e9b2d5379fce94f7 /drivers/gpu/drm/amd
parente618d306ded38dc9d37c04dc37e24bf9d62e9c7b (diff)
drm/amd/amdgpu: expose fragment size as module parameter (v2)
Allow overrides on the command line. v2: agd: sqaush in spelling fix and bogus default value warning Reviewed-by: Christian König <christian.koenig@amd.com> Signed-off-by: Roger He <Hongbo.He@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu.h1
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_device.c7
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c4
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c25
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h5
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c3
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c3
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c3
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c9
9 files changed, 44 insertions, 16 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
index 1f915a5ce9ba..12e71bbfd222 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
@@ -96,6 +96,7 @@ extern int amdgpu_bapm;
96extern int amdgpu_deep_color; 96extern int amdgpu_deep_color;
97extern int amdgpu_vm_size; 97extern int amdgpu_vm_size;
98extern int amdgpu_vm_block_size; 98extern int amdgpu_vm_block_size;
99extern int amdgpu_vm_fragment_size;
99extern int amdgpu_vm_fault_stop; 100extern int amdgpu_vm_fault_stop;
100extern int amdgpu_vm_debug; 101extern int amdgpu_vm_debug;
101extern int amdgpu_vm_update_mode; 102extern int amdgpu_vm_update_mode;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
index a6f6cb0f2e02..1a459ac63df4 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -1076,6 +1076,13 @@ static void amdgpu_check_arguments(struct amdgpu_device *adev)
1076 amdgpu_gtt_size = -1; 1076 amdgpu_gtt_size = -1;
1077 } 1077 }
1078 1078
1079 /* valid range is between 4 and 9 inclusive */
1080 if (amdgpu_vm_fragment_size != -1 &&
1081 (amdgpu_vm_fragment_size > 9 || amdgpu_vm_fragment_size < 4)) {
1082 dev_warn(adev->dev, "valid range is between 4 and 9\n");
1083 amdgpu_vm_fragment_size = -1;
1084 }
1085
1079 amdgpu_check_vm_size(adev); 1086 amdgpu_check_vm_size(adev);
1080 1087
1081 amdgpu_check_block_size(adev); 1088 amdgpu_check_block_size(adev);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
index 5e9ce8a29669..353e3467e5c8 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
@@ -94,6 +94,7 @@ unsigned amdgpu_ip_block_mask = 0xffffffff;
94int amdgpu_bapm = -1; 94int amdgpu_bapm = -1;
95int amdgpu_deep_color = 0; 95int amdgpu_deep_color = 0;
96int amdgpu_vm_size = -1; 96int amdgpu_vm_size = -1;
97int amdgpu_vm_fragment_size = -1;
97int amdgpu_vm_block_size = -1; 98int amdgpu_vm_block_size = -1;
98int amdgpu_vm_fault_stop = 0; 99int amdgpu_vm_fault_stop = 0;
99int amdgpu_vm_debug = 0; 100int amdgpu_vm_debug = 0;
@@ -183,6 +184,9 @@ module_param_named(deep_color, amdgpu_deep_color, int, 0444);
183MODULE_PARM_DESC(vm_size, "VM address space size in gigabytes (default 64GB)"); 184MODULE_PARM_DESC(vm_size, "VM address space size in gigabytes (default 64GB)");
184module_param_named(vm_size, amdgpu_vm_size, int, 0444); 185module_param_named(vm_size, amdgpu_vm_size, int, 0444);
185 186
187MODULE_PARM_DESC(vm_fragment_size, "VM fragment size in bits (4, 5, etc. 4 = 64K (default), Max 9 = 2M)");
188module_param_named(vm_fragment_size, amdgpu_vm_fragment_size, int, 0444);
189
186MODULE_PARM_DESC(vm_block_size, "VM page table size in bits (default depending on vm_size)"); 190MODULE_PARM_DESC(vm_block_size, "VM page table size in bits (default depending on vm_size)");
187module_param_named(vm_block_size, amdgpu_vm_block_size, int, 0444); 191module_param_named(vm_block_size, amdgpu_vm_block_size, int, 0444);
188 192
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
index efac05d489c9..6b1343e5541d 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
@@ -2413,12 +2413,26 @@ static uint32_t amdgpu_vm_get_block_size(uint64_t vm_size)
2413} 2413}
2414 2414
2415/** 2415/**
2416 * amdgpu_vm_adjust_size - adjust vm size and block size 2416 * amdgpu_vm_set_fragment_size - adjust fragment size in PTE
2417 *
2418 * @adev: amdgpu_device pointer
2419 * @fragment_size_default: the default fragment size if it's set auto
2420 */
2421void amdgpu_vm_set_fragment_size(struct amdgpu_device *adev, uint32_t fragment_size_default)
2422{
2423 if (amdgpu_vm_fragment_size == -1)
2424 adev->vm_manager.fragment_size = fragment_size_default;
2425 else
2426 adev->vm_manager.fragment_size = amdgpu_vm_fragment_size;
2427}
2428
2429/**
2430 * amdgpu_vm_adjust_size - adjust vm size, block size and fragment size
2417 * 2431 *
2418 * @adev: amdgpu_device pointer 2432 * @adev: amdgpu_device pointer
2419 * @vm_size: the default vm size if it's set auto 2433 * @vm_size: the default vm size if it's set auto
2420 */ 2434 */
2421void amdgpu_vm_adjust_size(struct amdgpu_device *adev, uint64_t vm_size) 2435void amdgpu_vm_adjust_size(struct amdgpu_device *adev, uint64_t vm_size, uint32_t fragment_size_default)
2422{ 2436{
2423 /* adjust vm size firstly */ 2437 /* adjust vm size firstly */
2424 if (amdgpu_vm_size == -1) 2438 if (amdgpu_vm_size == -1)
@@ -2433,8 +2447,11 @@ void amdgpu_vm_adjust_size(struct amdgpu_device *adev, uint64_t vm_size)
2433 else 2447 else
2434 adev->vm_manager.block_size = amdgpu_vm_block_size; 2448 adev->vm_manager.block_size = amdgpu_vm_block_size;
2435 2449
2436 DRM_INFO("vm size is %llu GB, block size is %u-bit\n", 2450 amdgpu_vm_set_fragment_size(adev, fragment_size_default);
2437 adev->vm_manager.vm_size, adev->vm_manager.block_size); 2451
2452 DRM_INFO("vm size is %llu GB, block size is %u-bit, fragment size is %u-bit\n",
2453 adev->vm_manager.vm_size, adev->vm_manager.block_size,
2454 adev->vm_manager.fragment_size);
2438} 2455}
2439 2456
2440/** 2457/**
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
index 45a276960d02..ba6691b58ee7 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
@@ -271,7 +271,10 @@ int amdgpu_vm_bo_clear_mappings(struct amdgpu_device *adev,
271 uint64_t saddr, uint64_t size); 271 uint64_t saddr, uint64_t size);
272void amdgpu_vm_bo_rmv(struct amdgpu_device *adev, 272void amdgpu_vm_bo_rmv(struct amdgpu_device *adev,
273 struct amdgpu_bo_va *bo_va); 273 struct amdgpu_bo_va *bo_va);
274void amdgpu_vm_adjust_size(struct amdgpu_device *adev, uint64_t vm_size); 274void amdgpu_vm_set_fragment_size(struct amdgpu_device *adev,
275 uint32_t fragment_size_default);
276void amdgpu_vm_adjust_size(struct amdgpu_device *adev, uint64_t vm_size,
277 uint32_t fragment_size_default);
275int amdgpu_vm_ioctl(struct drm_device *dev, void *data, struct drm_file *filp); 278int amdgpu_vm_ioctl(struct drm_device *dev, void *data, struct drm_file *filp);
276bool amdgpu_vm_need_pipeline_sync(struct amdgpu_ring *ring, 279bool amdgpu_vm_need_pipeline_sync(struct amdgpu_ring *ring,
277 struct amdgpu_job *job); 280 struct amdgpu_job *job);
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c
index 2db5c71d696c..12b0c4cd7a5a 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c
@@ -814,8 +814,7 @@ static int gmc_v6_0_sw_init(void *handle)
814 if (r) 814 if (r)
815 return r; 815 return r;
816 816
817 amdgpu_vm_adjust_size(adev, 64); 817 amdgpu_vm_adjust_size(adev, 64, 4);
818 adev->vm_manager.fragment_size = 4;
819 adev->vm_manager.max_pfn = adev->vm_manager.vm_size << 18; 818 adev->vm_manager.max_pfn = adev->vm_manager.vm_size << 18;
820 819
821 adev->mc.mc_mask = 0xffffffffffULL; 820 adev->mc.mc_mask = 0xffffffffffULL;
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
index 8ffdad954a4a..e42c1ad3af5e 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
@@ -950,8 +950,7 @@ static int gmc_v7_0_sw_init(void *handle)
950 * Currently set to 4GB ((1 << 20) 4k pages). 950 * Currently set to 4GB ((1 << 20) 4k pages).
951 * Max GPUVM size for cayman and SI is 40 bits. 951 * Max GPUVM size for cayman and SI is 40 bits.
952 */ 952 */
953 amdgpu_vm_adjust_size(adev, 64); 953 amdgpu_vm_adjust_size(adev, 64, 4);
954 adev->vm_manager.fragment_size = 4;
955 adev->vm_manager.max_pfn = adev->vm_manager.vm_size << 18; 954 adev->vm_manager.max_pfn = adev->vm_manager.vm_size << 18;
956 955
957 /* Set the internal MC address mask 956 /* Set the internal MC address mask
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
index a13f6617de79..7ca2dae8237a 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
@@ -1048,8 +1048,7 @@ static int gmc_v8_0_sw_init(void *handle)
1048 * Currently set to 4GB ((1 << 20) 4k pages). 1048 * Currently set to 4GB ((1 << 20) 4k pages).
1049 * Max GPUVM size for cayman and SI is 40 bits. 1049 * Max GPUVM size for cayman and SI is 40 bits.
1050 */ 1050 */
1051 amdgpu_vm_adjust_size(adev, 64); 1051 amdgpu_vm_adjust_size(adev, 64, 4);
1052 adev->vm_manager.fragment_size = 4;
1053 adev->vm_manager.max_pfn = adev->vm_manager.vm_size << 18; 1052 adev->vm_manager.max_pfn = adev->vm_manager.vm_size << 18;
1054 1053
1055 /* Set the internal MC address mask 1054 /* Set the internal MC address mask
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
index f721b4f4373e..2769c2b3b56e 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
@@ -541,12 +541,11 @@ static int gmc_v9_0_sw_init(void *handle)
541 adev->vm_manager.vm_size = 1U << 18; 541 adev->vm_manager.vm_size = 1U << 18;
542 adev->vm_manager.block_size = 9; 542 adev->vm_manager.block_size = 9;
543 adev->vm_manager.num_level = 3; 543 adev->vm_manager.num_level = 3;
544 adev->vm_manager.fragment_size = 9; 544 amdgpu_vm_set_fragment_size(adev, 9);
545 } else { 545 } else {
546 /* vm_size is 64GB for legacy 2-level page support*/ 546 /* vm_size is 64GB for legacy 2-level page support */
547 amdgpu_vm_adjust_size(adev, 64); 547 amdgpu_vm_adjust_size(adev, 64, 9);
548 adev->vm_manager.num_level = 1; 548 adev->vm_manager.num_level = 1;
549 adev->vm_manager.fragment_size = 9;
550 } 549 }
551 break; 550 break;
552 case CHIP_VEGA10: 551 case CHIP_VEGA10:
@@ -560,7 +559,7 @@ static int gmc_v9_0_sw_init(void *handle)
560 adev->vm_manager.vm_size = 1U << 18; 559 adev->vm_manager.vm_size = 1U << 18;
561 adev->vm_manager.block_size = 9; 560 adev->vm_manager.block_size = 9;
562 adev->vm_manager.num_level = 3; 561 adev->vm_manager.num_level = 3;
563 adev->vm_manager.fragment_size = 9; 562 amdgpu_vm_set_fragment_size(adev, 9);
564 break; 563 break;
565 default: 564 default:
566 break; 565 break;