aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2798-drm-amdgpu-allow-specifying-vm_block_size-for-multi-.patch
diff options
context:
space:
mode:
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-.patch83
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
+