Plumb the invalidation method into amdgpu_gmc_flush_gpu_tlb_gart().
Keep the current behavior.

Signed-off-by: Alex Deucher <[email protected]>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c
index 6af4ed2170b06..779f9b0974d2e 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c
@@ -719,15 +719,25 @@ void amdgpu_gmc_flush_gpu_tlb_gart(struct amdgpu_device 
*adev,
 {
        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 ||
-           !adev->mman.buffer_funcs_enabled || !adev->ib_pool_ready ||
-           !ring->sched.ready) {
+       switch (adev->gmc.gart_inv_method) {
+       case AMDGPU_TLB_INV_METHOD_MMIO:
+       default:
+               use_mmio = !hub->sdma_invalidation_workaround;
+               break;
+       case AMDGPU_TLB_INV_METHOD_SDMA:
+               use_mmio = false;
+               break;
+       }
+
+       if (!adev->mman.buffer_funcs_enabled ||
+           !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

Reply via email to