drm/amdgpu: add hdp_invalidate function
authorChunming Zhou <David1.Zhou@amd.com>
Thu, 3 Mar 2016 03:38:48 +0000 (11:38 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 8 Mar 2016 16:01:41 +0000 (11:01 -0500)
It's called after emitting ibs.

Signed-off-by: Chunming Zhou <David1.Zhou@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu.h
drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c

index cfd35b0fce0675042362537ecbb8bf1faf615f8a..497ca587cc35d14f4152fb7f5279e30b9e583d9e 100644 (file)
@@ -329,6 +329,7 @@ struct amdgpu_ring_funcs {
        void (*emit_vm_flush)(struct amdgpu_ring *ring, unsigned vm_id,
                              uint64_t pd_addr);
        void (*emit_hdp_flush)(struct amdgpu_ring *ring);
+       void (*emit_hdp_invalidate)(struct amdgpu_ring *ring);
        void (*emit_gds_switch)(struct amdgpu_ring *ring, uint32_t vmid,
                                uint32_t gds_base, uint32_t gds_size,
                                uint32_t gws_base, uint32_t gws_size,
@@ -2230,6 +2231,7 @@ amdgpu_get_sdma_instance(struct amdgpu_ring *ring)
 #define amdgpu_ring_emit_fence(r, addr, seq, flags) (r)->funcs->emit_fence((r), (addr), (seq), (flags))
 #define amdgpu_ring_emit_gds_switch(r, v, db, ds, wb, ws, ab, as) (r)->funcs->emit_gds_switch((r), (v), (db), (ds), (wb), (ws), (ab), (as))
 #define amdgpu_ring_emit_hdp_flush(r) (r)->funcs->emit_hdp_flush((r))
+#define amdgpu_ring_emit_hdp_invalidate(r) (r)->funcs->emit_hdp_invalidate((r))
 #define amdgpu_ring_pad_ib(r, ib) ((r)->funcs->pad_ib((r), (ib)))
 #define amdgpu_ih_get_wptr(adev) (adev)->irq.ih_funcs->get_wptr((adev))
 #define amdgpu_ih_decode_iv(adev, iv) (adev)->irq.ih_funcs->decode_iv((adev), (iv))
index db14a7bbb8f41a2a1744a02bd719d2635c6867f9..4e978e7aa1b85c4bb3a06da6e867daab7cc9e282 100644 (file)
@@ -178,6 +178,11 @@ int amdgpu_ib_schedule(struct amdgpu_ring *ring, unsigned num_ibs,
                ring->current_ctx = ctx;
        }
 
+       if (vm) {
+               if (ring->funcs->emit_hdp_invalidate)
+                       amdgpu_ring_emit_hdp_invalidate(ring);
+       }
+
        r = amdgpu_fence_emit(ring, owner, &ib->fence);
        if (r) {
                dev_err(adev->dev, "failed to emit fence (%d)\n", r);