|
@@ -2516,6 +2516,16 @@ void cayman_vm_flush(struct radeon_device *rdev, struct radeon_ring *ring,
|
|
|
radeon_ring_write(ring, PACKET0(VM_INVALIDATE_REQUEST, 0));
|
|
|
radeon_ring_write(ring, 1 << vm_id);
|
|
|
|
|
|
+ /* wait for the invalidate to complete */
|
|
|
+ radeon_ring_write(ring, PACKET3(PACKET3_WAIT_REG_MEM, 5));
|
|
|
+ radeon_ring_write(ring, (WAIT_REG_MEM_FUNCTION(0) | /* always */
|
|
|
+ WAIT_REG_MEM_ENGINE(0))); /* me */
|
|
|
+ radeon_ring_write(ring, VM_INVALIDATE_REQUEST >> 2);
|
|
|
+ radeon_ring_write(ring, 0);
|
|
|
+ radeon_ring_write(ring, 0); /* ref */
|
|
|
+ radeon_ring_write(ring, 0); /* mask */
|
|
|
+ radeon_ring_write(ring, 0x20); /* poll interval */
|
|
|
+
|
|
|
/* sync PFP to ME, otherwise we might get invalid PFP reads */
|
|
|
radeon_ring_write(ring, PACKET3(PACKET3_PFP_SYNC_ME, 0));
|
|
|
radeon_ring_write(ring, 0x0);
|