aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_device.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_device.c31
1 files changed, 13 insertions, 18 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
index 831c2bfd2072..483660742f75 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -1040,35 +1040,31 @@ static bool amdgpu_check_pot_argument(int arg)
1040 return (arg & (arg - 1)) == 0; 1040 return (arg & (arg - 1)) == 0;
1041} 1041}
1042 1042
1043static void amdgpu_get_block_size(struct amdgpu_device *adev) 1043static void amdgpu_check_block_size(struct amdgpu_device *adev)
1044{ 1044{
1045 /* defines number of bits in page table versus page directory, 1045 /* defines number of bits in page table versus page directory,
1046 * a page is 4KB so we have 12 bits offset, minimum 9 bits in the 1046 * a page is 4KB so we have 12 bits offset, minimum 9 bits in the
1047 * page table and the remaining bits are in the page directory */ 1047 * page table and the remaining bits are in the page directory */
1048 if (amdgpu_vm_block_size == -1) { 1048 if (amdgpu_vm_block_size == -1)
1049 1049 return;
1050 /* Total bits covered by PD + PTs */
1051 unsigned bits = ilog2(amdgpu_vm_size) + 18;
1052
1053 /* Make sure the PD is 4K in size up to 8GB address space.
1054 Above that split equal between PD and PTs */
1055 if (amdgpu_vm_size <= 8)
1056 amdgpu_vm_block_size = bits - 9;
1057 else
1058 amdgpu_vm_block_size = (bits + 3) / 2;
1059 1050
1060 } else if (amdgpu_vm_block_size < 9) { 1051 if (amdgpu_vm_block_size < 9) {
1061 dev_warn(adev->dev, "VM page table size (%d) too small\n", 1052 dev_warn(adev->dev, "VM page table size (%d) too small\n",
1062 amdgpu_vm_block_size); 1053 amdgpu_vm_block_size);
1063 amdgpu_vm_block_size = 9; 1054 goto def_value;
1064 } 1055 }
1065 1056
1066 if (amdgpu_vm_block_size > 24 || 1057 if (amdgpu_vm_block_size > 24 ||
1067 (amdgpu_vm_size * 1024) < (1ull << amdgpu_vm_block_size)) { 1058 (amdgpu_vm_size * 1024) < (1ull << amdgpu_vm_block_size)) {
1068 dev_warn(adev->dev, "VM page table size (%d) too large\n", 1059 dev_warn(adev->dev, "VM page table size (%d) too large\n",
1069 amdgpu_vm_block_size); 1060 amdgpu_vm_block_size);
1070 amdgpu_vm_block_size = 9; 1061 goto def_value;
1071 } 1062 }
1063
1064 return;
1065
1066def_value:
1067 amdgpu_vm_block_size = -1;
1072} 1068}
1073 1069
1074static void amdgpu_check_vm_size(struct amdgpu_device *adev) 1070static void amdgpu_check_vm_size(struct amdgpu_device *adev)
@@ -1097,8 +1093,7 @@ static void amdgpu_check_vm_size(struct amdgpu_device *adev)
1097 return; 1093 return;
1098 1094
1099def_value: 1095def_value:
1100 amdgpu_vm_size = 8; 1096 amdgpu_vm_size = -1;
1101 dev_info(adev->dev, "set default VM size %dGB\n", amdgpu_vm_size);
1102} 1097}
1103 1098
1104/** 1099/**
@@ -1132,7 +1127,7 @@ static void amdgpu_check_arguments(struct amdgpu_device *adev)
1132 1127
1133 amdgpu_check_vm_size(adev); 1128 amdgpu_check_vm_size(adev);
1134 1129
1135 amdgpu_get_block_size(adev); 1130 amdgpu_check_block_size(adev);
1136 1131
1137 if (amdgpu_vram_page_split != -1 && (amdgpu_vram_page_split < 16 || 1132 if (amdgpu_vram_page_split != -1 && (amdgpu_vram_page_split < 16 ||
1138 !amdgpu_check_pot_argument(amdgpu_vram_page_split))) { 1133 !amdgpu_check_pot_argument(amdgpu_vram_page_split))) {