|
@@ -3965,6 +3965,7 @@ static void gfx_v8_0_ring_emit_fence_gfx(struct amdgpu_ring *ring, u64 addr,
|
|
|
DATA_SEL(write64bit ? 2 : 1) | INT_SEL(int_sel ? 2 : 0));
|
|
|
amdgpu_ring_write(ring, lower_32_bits(seq));
|
|
|
amdgpu_ring_write(ring, upper_32_bits(seq));
|
|
|
+
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -4044,6 +4045,17 @@ static void gfx_v8_0_ring_emit_vm_flush(struct amdgpu_ring *ring,
|
|
|
unsigned vm_id, uint64_t pd_addr)
|
|
|
{
|
|
|
int usepfp = (ring->type == AMDGPU_RING_TYPE_GFX);
|
|
|
+ uint32_t seq = ring->fence_drv.sync_seq[ring->idx];
|
|
|
+ uint64_t addr = ring->fence_drv.gpu_addr;
|
|
|
+
|
|
|
+ amdgpu_ring_write(ring, PACKET3(PACKET3_WAIT_REG_MEM, 5));
|
|
|
+ amdgpu_ring_write(ring, (WAIT_REG_MEM_MEM_SPACE(1) | /* memory */
|
|
|
+ WAIT_REG_MEM_FUNCTION(3))); /* equal */
|
|
|
+ amdgpu_ring_write(ring, addr & 0xfffffffc);
|
|
|
+ amdgpu_ring_write(ring, upper_32_bits(addr) & 0xffffffff);
|
|
|
+ amdgpu_ring_write(ring, seq);
|
|
|
+ amdgpu_ring_write(ring, 0xffffffff);
|
|
|
+ amdgpu_ring_write(ring, 4); /* poll interval */
|
|
|
|
|
|
amdgpu_ring_write(ring, PACKET3(PACKET3_WRITE_DATA, 3));
|
|
|
amdgpu_ring_write(ring, (WRITE_DATA_ENGINE_SEL(usepfp) |
|