aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
index 2895d9d86f29..7ed5302b511a 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
@@ -2064,6 +2064,44 @@ void amdgpu_vm_bo_invalidate(struct amdgpu_device *adev,
2064 } 2064 }
2065} 2065}
2066 2066
2067static uint32_t amdgpu_vm_get_block_size(uint64_t vm_size)
2068{
2069 /* Total bits covered by PD + PTs */
2070 unsigned bits = ilog2(vm_size) + 18;
2071
2072 /* Make sure the PD is 4K in size up to 8GB address space.
2073 Above that split equal between PD and PTs */
2074 if (vm_size <= 8)
2075 return (bits - 9);
2076 else
2077 return ((bits + 3) / 2);
2078}
2079
2080/**
2081 * amdgpu_vm_adjust_size - adjust vm size and block size
2082 *
2083 * @adev: amdgpu_device pointer
2084 * @vm_size: the default vm size if it's set auto
2085 */
2086void amdgpu_vm_adjust_size(struct amdgpu_device *adev, uint64_t vm_size)
2087{
2088 /* adjust vm size firstly */
2089 if (amdgpu_vm_size == -1)
2090 adev->vm_manager.vm_size = vm_size;
2091 else
2092 adev->vm_manager.vm_size = amdgpu_vm_size;
2093
2094 /* block size depends on vm size */
2095 if (amdgpu_vm_block_size == -1)
2096 adev->vm_manager.block_size =
2097 amdgpu_vm_get_block_size(adev->vm_manager.vm_size);
2098 else
2099 adev->vm_manager.block_size = amdgpu_vm_block_size;
2100
2101 DRM_INFO("vm size is %llu GB, block size is %u-bit\n",
2102 adev->vm_manager.vm_size, adev->vm_manager.block_size);
2103}
2104
2067/** 2105/**
2068 * amdgpu_vm_init - initialize a vm instance 2106 * amdgpu_vm_init - initialize a vm instance
2069 * 2107 *