]> Git Repo - linux.git/blobdiff - drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c
Merge tag 'platform-drivers-x86-v4.13-2' of git://git.infradead.org/linux-platform...
[linux.git] / drivers / gpu / drm / amd / amdgpu / amdgpu_ib.c
index 6e4ae0d983c21db9ffac65340994ed6869407caf..f774b3f497d28735829d9b6407cd1832e9174945 100644 (file)
@@ -121,6 +121,7 @@ int amdgpu_ib_schedule(struct amdgpu_ring *ring, unsigned num_ibs,
 {
        struct amdgpu_device *adev = ring->adev;
        struct amdgpu_ib *ib = &ibs[0];
+       struct dma_fence *tmp = NULL;
        bool skip_preamble, need_ctx_switch;
        unsigned patch_offset = ~0;
        struct amdgpu_vm *vm;
@@ -160,8 +161,16 @@ int amdgpu_ib_schedule(struct amdgpu_ring *ring, unsigned num_ibs,
                dev_err(adev->dev, "scheduling IB failed (%d).\n", r);
                return r;
        }
-       if (ring->funcs->emit_pipeline_sync && job && job->need_pipeline_sync)
+
+       if (ring->funcs->emit_pipeline_sync && job &&
+           ((tmp = amdgpu_sync_get_fence(&job->sched_sync)) ||
+            amdgpu_vm_need_pipeline_sync(ring, job))) {
                amdgpu_ring_emit_pipeline_sync(ring);
+               dma_fence_put(tmp);
+       }
+
+       if (ring->funcs->insert_start)
+               ring->funcs->insert_start(ring);
 
        if (vm) {
                r = amdgpu_vm_flush(ring, job);
@@ -188,8 +197,6 @@ int amdgpu_ib_schedule(struct amdgpu_ring *ring, unsigned num_ibs,
                        status |= AMDGPU_HAVE_CTX_SWITCH;
                status |= job->preamble_status;
 
-               if (vm)
-                       status |= AMDGPU_VM_DOMAIN;
                amdgpu_ring_emit_cntxcntl(ring, status);
        }
 
@@ -208,6 +215,9 @@ int amdgpu_ib_schedule(struct amdgpu_ring *ring, unsigned num_ibs,
                need_ctx_switch = false;
        }
 
+       if (ring->funcs->emit_tmz)
+               amdgpu_ring_emit_tmz(ring, false);
+
        if (ring->funcs->emit_hdp_invalidate
 #ifdef CONFIG_X86_64
            && !(adev->flags & AMD_IS_APU)
This page took 0.03533 seconds and 4 git commands to generate.