|
@@ -141,78 +141,6 @@ void amdgpu_ring_undo(struct amdgpu_ring *ring)
|
|
|
ring->wptr = ring->wptr_old;
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- * amdgpu_ring_backup - Back up the content of a ring
|
|
|
- *
|
|
|
- * @ring: the ring we want to back up
|
|
|
- *
|
|
|
- * Saves all unprocessed commits from a ring, returns the number of dwords saved.
|
|
|
- */
|
|
|
-unsigned amdgpu_ring_backup(struct amdgpu_ring *ring,
|
|
|
- uint32_t **data)
|
|
|
-{
|
|
|
- unsigned size, ptr, i;
|
|
|
-
|
|
|
- *data = NULL;
|
|
|
-
|
|
|
- if (ring->ring_obj == NULL)
|
|
|
- return 0;
|
|
|
-
|
|
|
- /* it doesn't make sense to save anything if all fences are signaled */
|
|
|
- if (!amdgpu_fence_count_emitted(ring))
|
|
|
- return 0;
|
|
|
-
|
|
|
- ptr = le32_to_cpu(*ring->next_rptr_cpu_addr);
|
|
|
-
|
|
|
- size = ring->wptr + (ring->ring_size / 4);
|
|
|
- size -= ptr;
|
|
|
- size &= ring->ptr_mask;
|
|
|
- if (size == 0)
|
|
|
- return 0;
|
|
|
-
|
|
|
- /* and then save the content of the ring */
|
|
|
- *data = kmalloc_array(size, sizeof(uint32_t), GFP_KERNEL);
|
|
|
- if (!*data)
|
|
|
- return 0;
|
|
|
- for (i = 0; i < size; ++i) {
|
|
|
- (*data)[i] = ring->ring[ptr++];
|
|
|
- ptr &= ring->ptr_mask;
|
|
|
- }
|
|
|
-
|
|
|
- return size;
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- * amdgpu_ring_restore - append saved commands to the ring again
|
|
|
- *
|
|
|
- * @ring: ring to append commands to
|
|
|
- * @size: number of dwords we want to write
|
|
|
- * @data: saved commands
|
|
|
- *
|
|
|
- * Allocates space on the ring and restore the previously saved commands.
|
|
|
- */
|
|
|
-int amdgpu_ring_restore(struct amdgpu_ring *ring,
|
|
|
- unsigned size, uint32_t *data)
|
|
|
-{
|
|
|
- int i, r;
|
|
|
-
|
|
|
- if (!size || !data)
|
|
|
- return 0;
|
|
|
-
|
|
|
- /* restore the saved ring content */
|
|
|
- r = amdgpu_ring_alloc(ring, size);
|
|
|
- if (r)
|
|
|
- return r;
|
|
|
-
|
|
|
- for (i = 0; i < size; ++i) {
|
|
|
- amdgpu_ring_write(ring, data[i]);
|
|
|
- }
|
|
|
-
|
|
|
- amdgpu_ring_commit(ring);
|
|
|
- kfree(data);
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
/**
|
|
|
* amdgpu_ring_init - init driver ring struct.
|
|
|
*
|