aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
diff options
context:
space:
mode:
authorChristian König <christian.koenig@amd.com>2017-11-30 08:12:53 -0500
committerAlex Deucher <alexander.deucher@amd.com>2017-12-12 14:45:34 -0500
commit94c6f5e4d1574094a91b1712536ab5b6a43f7a23 (patch)
tree929ee7c03458b9c2644899626ec332147d8529f8 /drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
parent79588d21ad312d9cd16a867c0d13278e6377a653 (diff)
drm/amdgpu: stop joining PDEs
That doesn't hit any more most of the time anyway. Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Chunming Zhou <david1.zhou@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c41
1 files changed, 7 insertions, 34 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
index dbe37d621796..17ae6afdef70 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
@@ -1076,8 +1076,7 @@ static int amdgpu_vm_update_level(struct amdgpu_device *adev,
1076 struct amdgpu_bo *shadow; 1076 struct amdgpu_bo *shadow;
1077 struct amdgpu_ring *ring = NULL; 1077 struct amdgpu_ring *ring = NULL;
1078 uint64_t pd_addr, shadow_addr = 0; 1078 uint64_t pd_addr, shadow_addr = 0;
1079 uint64_t last_pde = ~0, last_pt = ~0, last_shadow = ~0; 1079 unsigned pt_idx, ndw = 0;
1080 unsigned count = 0, pt_idx, ndw = 0;
1081 struct amdgpu_job *job; 1080 struct amdgpu_job *job;
1082 struct amdgpu_pte_update_params params; 1081 struct amdgpu_pte_update_params params;
1083 struct dma_fence *fence = NULL; 1082 struct dma_fence *fence = NULL;
@@ -1149,41 +1148,15 @@ static int amdgpu_vm_update_level(struct amdgpu_device *adev,
1149 1148
1150 parent->entries[pt_idx].addr = pt | AMDGPU_PTE_VALID; 1149 parent->entries[pt_idx].addr = pt | AMDGPU_PTE_VALID;
1151 1150
1152 pde = pd_addr + pt_idx * 8;
1153 incr = amdgpu_bo_size(bo); 1151 incr = amdgpu_bo_size(bo);
1154 if (((last_pde + 8 * count) != pde) || 1152 if (shadow) {
1155 ((last_pt + incr * count) != pt) || 1153 pde = shadow_addr + pt_idx * 8;
1156 (count == AMDGPU_VM_MAX_UPDATE_SIZE)) { 1154 params.func(&params, pde, pt, 1, incr,
1157 1155 AMDGPU_PTE_VALID);
1158 if (count) {
1159 if (shadow)
1160 params.func(&params,
1161 last_shadow,
1162 last_pt, count,
1163 incr,
1164 AMDGPU_PTE_VALID);
1165
1166 params.func(&params, last_pde,
1167 last_pt, count, incr,
1168 AMDGPU_PTE_VALID);
1169 }
1170
1171 count = 1;
1172 last_pde = pde;
1173 last_shadow = shadow_addr + pt_idx * 8;
1174 last_pt = pt;
1175 } else {
1176 ++count;
1177 } 1156 }
1178 }
1179 1157
1180 if (count) { 1158 pde = pd_addr + pt_idx * 8;
1181 if (vm->root.base.bo->shadow) 1159 params.func(&params, pde, pt, 1, incr, AMDGPU_PTE_VALID);
1182 params.func(&params, last_shadow, last_pt,
1183 count, incr, AMDGPU_PTE_VALID);
1184
1185 params.func(&params, last_pde, last_pt,
1186 count, incr, AMDGPU_PTE_VALID);
1187 } 1160 }
1188 1161
1189 if (!vm->use_cpu_for_update) { 1162 if (!vm->use_cpu_for_update) {