diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 34 |
1 files changed, 13 insertions, 21 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c index 771995093cac..c942f6b4be1b 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | |||
@@ -2574,43 +2574,35 @@ static uint32_t amdgpu_vm_get_block_size(uint64_t vm_size) | |||
2574 | } | 2574 | } |
2575 | 2575 | ||
2576 | /** | 2576 | /** |
2577 | * amdgpu_vm_set_fragment_size - adjust fragment size in PTE | ||
2578 | * | ||
2579 | * @adev: amdgpu_device pointer | ||
2580 | * @fragment_size_default: the default fragment size if it's set auto | ||
2581 | */ | ||
2582 | void amdgpu_vm_set_fragment_size(struct amdgpu_device *adev, | ||
2583 | uint32_t fragment_size_default) | ||
2584 | { | ||
2585 | if (amdgpu_vm_fragment_size == -1) | ||
2586 | adev->vm_manager.fragment_size = fragment_size_default; | ||
2587 | else | ||
2588 | adev->vm_manager.fragment_size = amdgpu_vm_fragment_size; | ||
2589 | } | ||
2590 | |||
2591 | /** | ||
2592 | * amdgpu_vm_adjust_size - adjust vm size, block size and fragment size | 2577 | * amdgpu_vm_adjust_size - adjust vm size, block size and fragment size |
2593 | * | 2578 | * |
2594 | * @adev: amdgpu_device pointer | 2579 | * @adev: amdgpu_device pointer |
2595 | * @vm_size: the default vm size if it's set auto | 2580 | * @vm_size: the default vm size if it's set auto |
2596 | */ | 2581 | */ |
2597 | void amdgpu_vm_adjust_size(struct amdgpu_device *adev, uint32_t vm_size, | 2582 | void amdgpu_vm_adjust_size(struct amdgpu_device *adev, uint32_t vm_size, |
2598 | uint32_t fragment_size_default) | 2583 | uint32_t fragment_size_default, unsigned max_level) |
2599 | { | 2584 | { |
2600 | /* adjust vm size firstly */ | 2585 | /* adjust vm size first, but only for two level setups for now */ |
2601 | if (amdgpu_vm_size != -1) | 2586 | if (amdgpu_vm_size != -1 && max_level == 1) |
2602 | vm_size = amdgpu_vm_size; | 2587 | vm_size = amdgpu_vm_size; |
2603 | 2588 | ||
2604 | adev->vm_manager.max_pfn = (uint64_t)vm_size << 18; | 2589 | adev->vm_manager.max_pfn = (uint64_t)vm_size << 18; |
2590 | adev->vm_manager.num_level = max_level; | ||
2605 | 2591 | ||
2606 | /* block size depends on vm size */ | 2592 | /* block size depends on vm size and hw setup*/ |
2607 | if (amdgpu_vm_block_size == -1) | 2593 | if (adev->vm_manager.num_level > 1) |
2594 | /* Use fixed block_size for multi level page tables */ | ||
2595 | adev->vm_manager.block_size = 9; | ||
2596 | else if (amdgpu_vm_block_size == -1) | ||
2608 | adev->vm_manager.block_size = | 2597 | adev->vm_manager.block_size = |
2609 | amdgpu_vm_get_block_size(vm_size); | 2598 | amdgpu_vm_get_block_size(vm_size); |
2610 | else | 2599 | else |
2611 | adev->vm_manager.block_size = amdgpu_vm_block_size; | 2600 | adev->vm_manager.block_size = amdgpu_vm_block_size; |
2612 | 2601 | ||
2613 | amdgpu_vm_set_fragment_size(adev, fragment_size_default); | 2602 | if (amdgpu_vm_fragment_size == -1) |
2603 | adev->vm_manager.fragment_size = fragment_size_default; | ||
2604 | else | ||
2605 | adev->vm_manager.fragment_size = amdgpu_vm_fragment_size; | ||
2614 | 2606 | ||
2615 | DRM_INFO("vm size is %u GB, block size is %u-bit, fragment size is %u-bit\n", | 2607 | DRM_INFO("vm size is %u GB, block size is %u-bit, fragment size is %u-bit\n", |
2616 | vm_size, adev->vm_manager.block_size, | 2608 | vm_size, adev->vm_manager.block_size, |