Plumb the invalidation method into amdgpu_gmc_flush_gpu_tlb(). Keep the current behavior. No intended functional change. The MES/KIQ handling is an existing special case of the MMIO path.
Signed-off-by: Alex Deucher <[email protected]> --- drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c index 7c05545063346..4acad329aee5a 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c @@ -719,15 +719,27 @@ void amdgpu_gmc_flush_gpu_tlb(struct amdgpu_device *adev, uint32_t vmid, { struct amdgpu_ring *ring; struct amdgpu_vmhub *hub = &adev->vmhub[vmhub]; + bool use_mmio; struct dma_fence *fence; struct amdgpu_job *job; int r; ring = to_amdgpu_ring(adev->mman.buffer_funcs_scheds[0]); - if (!hub->sdma_invalidation_workaround || vmid || - !adev->mman.buffer_funcs_enabled || !adev->ib_pool_ready || - !ring->sched.ready) { + switch (adev->gmc.gart_inv_method) { + case AMDGPU_TLB_INV_METHOD_MMIO: + case AMDGPU_TLB_INV_METHOD_KIQ: + case AMDGPU_TLB_INV_METHOD_MES: + default: + use_mmio = !hub->sdma_invalidation_workaround; + break; + case AMDGPU_TLB_INV_METHOD_SDMA: + use_mmio = false; + break; + } + + if (!adev->mman.buffer_funcs_enabled || vmid || + !adev->ib_pool_ready || !ring->sched.ready || use_mmio) { /* * A GPU reset should flush all TLBs anyway, so no need to do * this while one is ongoing. -- 2.55.0
