diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_device.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 31 |
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 | ||
1043 | static void amdgpu_get_block_size(struct amdgpu_device *adev) | 1043 | static 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 | |||
1066 | def_value: | ||
1067 | amdgpu_vm_block_size = -1; | ||
1072 | } | 1068 | } |
1073 | 1069 | ||
1074 | static void amdgpu_check_vm_size(struct amdgpu_device *adev) | 1070 | static 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 | ||
1099 | def_value: | 1095 | def_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))) { |