diff options
author | Roger He <Hongbo.He@amd.com> | 2017-08-15 04:05:59 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2017-08-17 16:47:43 -0400 |
commit | d07f14be4d11cf323977672342fb0fc6017052f6 (patch) | |
tree | 4361547a6d52ef30c2294189e9b2d5379fce94f7 /drivers/gpu/drm/amd | |
parent | e618d306ded38dc9d37c04dc37e24bf9d62e9c7b (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.h | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 7 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 4 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 25 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h | 5 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c | 9 |
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; | |||
96 | extern int amdgpu_deep_color; | 96 | extern int amdgpu_deep_color; |
97 | extern int amdgpu_vm_size; | 97 | extern int amdgpu_vm_size; |
98 | extern int amdgpu_vm_block_size; | 98 | extern int amdgpu_vm_block_size; |
99 | extern int amdgpu_vm_fragment_size; | ||
99 | extern int amdgpu_vm_fault_stop; | 100 | extern int amdgpu_vm_fault_stop; |
100 | extern int amdgpu_vm_debug; | 101 | extern int amdgpu_vm_debug; |
101 | extern int amdgpu_vm_update_mode; | 102 | extern 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; | |||
94 | int amdgpu_bapm = -1; | 94 | int amdgpu_bapm = -1; |
95 | int amdgpu_deep_color = 0; | 95 | int amdgpu_deep_color = 0; |
96 | int amdgpu_vm_size = -1; | 96 | int amdgpu_vm_size = -1; |
97 | int amdgpu_vm_fragment_size = -1; | ||
97 | int amdgpu_vm_block_size = -1; | 98 | int amdgpu_vm_block_size = -1; |
98 | int amdgpu_vm_fault_stop = 0; | 99 | int amdgpu_vm_fault_stop = 0; |
99 | int amdgpu_vm_debug = 0; | 100 | int amdgpu_vm_debug = 0; |
@@ -183,6 +184,9 @@ module_param_named(deep_color, amdgpu_deep_color, int, 0444); | |||
183 | MODULE_PARM_DESC(vm_size, "VM address space size in gigabytes (default 64GB)"); | 184 | MODULE_PARM_DESC(vm_size, "VM address space size in gigabytes (default 64GB)"); |
184 | module_param_named(vm_size, amdgpu_vm_size, int, 0444); | 185 | module_param_named(vm_size, amdgpu_vm_size, int, 0444); |
185 | 186 | ||
187 | MODULE_PARM_DESC(vm_fragment_size, "VM fragment size in bits (4, 5, etc. 4 = 64K (default), Max 9 = 2M)"); | ||
188 | module_param_named(vm_fragment_size, amdgpu_vm_fragment_size, int, 0444); | ||
189 | |||
186 | MODULE_PARM_DESC(vm_block_size, "VM page table size in bits (default depending on vm_size)"); | 190 | MODULE_PARM_DESC(vm_block_size, "VM page table size in bits (default depending on vm_size)"); |
187 | module_param_named(vm_block_size, amdgpu_vm_block_size, int, 0444); | 191 | module_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 | */ | ||
2421 | void 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 | */ |
2421 | void amdgpu_vm_adjust_size(struct amdgpu_device *adev, uint64_t vm_size) | 2435 | void 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); |
272 | void amdgpu_vm_bo_rmv(struct amdgpu_device *adev, | 272 | void amdgpu_vm_bo_rmv(struct amdgpu_device *adev, |
273 | struct amdgpu_bo_va *bo_va); | 273 | struct amdgpu_bo_va *bo_va); |
274 | void amdgpu_vm_adjust_size(struct amdgpu_device *adev, uint64_t vm_size); | 274 | void amdgpu_vm_set_fragment_size(struct amdgpu_device *adev, |
275 | uint32_t fragment_size_default); | ||
276 | void amdgpu_vm_adjust_size(struct amdgpu_device *adev, uint64_t vm_size, | ||
277 | uint32_t fragment_size_default); | ||
275 | int amdgpu_vm_ioctl(struct drm_device *dev, void *data, struct drm_file *filp); | 278 | int amdgpu_vm_ioctl(struct drm_device *dev, void *data, struct drm_file *filp); |
276 | bool amdgpu_vm_need_pipeline_sync(struct amdgpu_ring *ring, | 279 | bool 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; |