diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2798-drm-amdgpu-allow-specifying-vm_block_size-for-multi-.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2798-drm-amdgpu-allow-specifying-vm_block_size-for-multi-.patch | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2798-drm-amdgpu-allow-specifying-vm_block_size-for-multi-.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2798-drm-amdgpu-allow-specifying-vm_block_size-for-multi-.patch new file mode 100644 index 00000000..66c2c14d --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2798-drm-amdgpu-allow-specifying-vm_block_size-for-multi-.patch @@ -0,0 +1,83 @@ +From 5dc460af63f6957b739282e9440bfb7b7650a3b5 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com> +Date: Mon, 27 Nov 2017 16:22:05 +0100 +Subject: [PATCH 2798/4131] drm/amdgpu: allow specifying vm_block_size for + multi level PDs v2 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This patch allows specifying the vm_block_size even when multi level +page directories are active. + +v2: fix signed/unsigned compare warning + +Signed-off-by: Christian König <christian.koenig@amd.com> +Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com> +Signed-off-by: Alex Deucher <alexander.deucher@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 14 +------------- + drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 15 +++++++++------ + 2 files changed, 10 insertions(+), 19 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +index 020d7c4..4fc4439 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +@@ -1090,20 +1090,8 @@ static void amdgpu_check_block_size(struct amdgpu_device *adev) + if (amdgpu_vm_block_size < 9) { + dev_warn(adev->dev, "VM page table size (%d) too small\n", + amdgpu_vm_block_size); +- goto def_value; ++ amdgpu_vm_block_size = -1; + } +- +- if (amdgpu_vm_block_size > 24 || +- (amdgpu_vm_size * 1024) < (1ull << amdgpu_vm_block_size)) { +- dev_warn(adev->dev, "VM page table size (%d) too large\n", +- amdgpu_vm_block_size); +- goto def_value; +- } +- +- return; +- +-def_value: +- amdgpu_vm_block_size = -1; + } + + static void amdgpu_check_vm_size(struct amdgpu_device *adev) +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +index 3fe455c..335d37d 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +@@ -2637,18 +2637,21 @@ void amdgpu_vm_adjust_size(struct amdgpu_device *adev, uint32_t vm_size, + adev->vm_manager.max_pfn = (uint64_t)vm_size << 18; + + tmp = roundup_pow_of_two(adev->vm_manager.max_pfn); ++ if (amdgpu_vm_block_size != -1) ++ tmp >>= amdgpu_vm_block_size - 9; + tmp = DIV_ROUND_UP(fls64(tmp) - 1, 9) - 1; + adev->vm_manager.num_level = min(max_level, (unsigned)tmp); + + /* block size depends on vm size and hw setup*/ +- if (adev->vm_manager.num_level > 1) +- /* Use fixed block_size for multi level page tables */ +- adev->vm_manager.block_size = 9; +- else if (amdgpu_vm_block_size == -1) ++ if (amdgpu_vm_block_size != -1) + adev->vm_manager.block_size = +- amdgpu_vm_get_block_size(vm_size); ++ min((unsigned)amdgpu_vm_block_size, max_bits ++ - AMDGPU_GPU_PAGE_SHIFT ++ - 9 * adev->vm_manager.num_level); ++ else if (adev->vm_manager.num_level > 1) ++ adev->vm_manager.block_size = 9; + else +- adev->vm_manager.block_size = amdgpu_vm_block_size; ++ adev->vm_manager.block_size = amdgpu_vm_get_block_size(tmp); + + if (amdgpu_vm_fragment_size == -1) + adev->vm_manager.fragment_size = fragment_size_default; +-- +2.7.4 + |