aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu
diff options
context:
space:
mode:
authorAndrey Grodzovsky <andrey.grodzovsky@amd.com>2018-09-10 18:43:58 -0400
committerAlex Deucher <alexander.deucher@amd.com>2018-09-11 17:30:48 -0400
commitd8de8260a45aae8f74af77eae9a162bdc0ed48d2 (patch)
tree2df525b3a86fcfa357ec4be181a0928bb6485852 /drivers/gpu
parent1c860a022f65224d6e8af71cc9f1411cb779f666 (diff)
drm/amdgpu: Fix SDMA TO after GPU reset v3
After GPU reset amdgpu_vm_clear_bo triggers VM flush but job->vm_pd_addr is not set causing SDMA TO. v2: Per advise by Christian König avoid flushing VM for jobs where job->vm_pd_addr wasn't explicitly set. v3: Shortcut vm_flush_needed early. Fixes cbd5285 drm/amdgpu: move setting the GART addr into TTM. Signed-off-by: Andrey Grodzovsky <andrey.grodzovsky@amd.com> Reviewed-by: Christian König <christian.koenig@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_job.c1
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c3
2 files changed, 3 insertions, 1 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
index 34e54d41f5ca..755f733bf0d9 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
@@ -73,6 +73,7 @@ int amdgpu_job_alloc(struct amdgpu_device *adev, unsigned num_ibs,
73 amdgpu_sync_create(&(*job)->sync); 73 amdgpu_sync_create(&(*job)->sync);
74 amdgpu_sync_create(&(*job)->sched_sync); 74 amdgpu_sync_create(&(*job)->sched_sync);
75 (*job)->vram_lost_counter = atomic_read(&adev->vram_lost_counter); 75 (*job)->vram_lost_counter = atomic_read(&adev->vram_lost_counter);
76 (*job)->vm_pd_addr = AMDGPU_BO_INVALID_OFFSET;
76 77
77 return 0; 78 return 0;
78} 79}
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
index e793a7855bb3..136b00412dc8 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
@@ -870,7 +870,8 @@ int amdgpu_vm_flush(struct amdgpu_ring *ring, struct amdgpu_job *job, bool need_
870 } 870 }
871 871
872 gds_switch_needed &= !!ring->funcs->emit_gds_switch; 872 gds_switch_needed &= !!ring->funcs->emit_gds_switch;
873 vm_flush_needed &= !!ring->funcs->emit_vm_flush; 873 vm_flush_needed &= !!ring->funcs->emit_vm_flush &&
874 job->vm_pd_addr != AMDGPU_BO_INVALID_OFFSET;
874 pasid_mapping_needed &= adev->gmc.gmc_funcs->emit_pasid_mapping && 875 pasid_mapping_needed &= adev->gmc.gmc_funcs->emit_pasid_mapping &&
875 ring->funcs->emit_wreg; 876 ring->funcs->emit_wreg;
876 877