drm/amdgpu: flush the HDP only once for CPU based VM updates
authorChristian König <christian.koenig@amd.com>
Tue, 11 Jul 2017 15:23:29 +0000 (17:23 +0200)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 14 Jul 2017 15:06:44 +0000 (11:06 -0400)
No need to do this after every single update.

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_vm.c

index 5638c16..24879cf 100644 (file)
@@ -992,10 +992,6 @@ static void amdgpu_vm_cpu_set_ptes(struct amdgpu_pte_update_params *params,
                                        i, value, flags);
                addr += incr;
        }
-
-       /* Flush HDP */
-       mb();
-       amdgpu_gart_flush_gpu_tlb(params->adev, 0);
 }
 
 static int amdgpu_vm_wait_pd(struct amdgpu_device *adev, struct amdgpu_vm *vm,
@@ -1238,6 +1234,12 @@ int amdgpu_vm_update_directories(struct amdgpu_device *adev,
        if (r)
                amdgpu_vm_invalidate_level(&vm->root);
 
+       if (vm->use_cpu_for_update) {
+               /* Flush HDP */
+               mb();
+               amdgpu_gart_flush_gpu_tlb(adev, 0);
+       }
+
        return r;
 }
 
@@ -1745,6 +1747,12 @@ int amdgpu_vm_bo_update(struct amdgpu_device *adev,
                list_add(&bo_va->vm_status, &vm->cleared);
        spin_unlock(&vm->status_lock);
 
+       if (vm->use_cpu_for_update) {
+               /* Flush HDP */
+               mb();
+               amdgpu_gart_flush_gpu_tlb(adev, 0);
+       }
+
        return 0;
 }