aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c24
1 files changed, 21 insertions, 3 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
index 7d442c51063e..9bec91484c24 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
@@ -131,6 +131,21 @@ int amdgpu_ring_lock(struct amdgpu_ring *ring, unsigned ndw)
131 return 0; 131 return 0;
132} 132}
133 133
134/** amdgpu_ring_insert_nop - insert NOP packets
135 *
136 * @ring: amdgpu_ring structure holding ring information
137 * @count: the number of NOP packets to insert
138 *
139 * This is the generic insert_nop function for rings except SDMA
140 */
141void amdgpu_ring_insert_nop(struct amdgpu_ring *ring, uint32_t count)
142{
143 int i;
144
145 for (i = 0; i < count; i++)
146 amdgpu_ring_write(ring, ring->nop);
147}
148
134/** 149/**
135 * amdgpu_ring_commit - tell the GPU to execute the new 150 * amdgpu_ring_commit - tell the GPU to execute the new
136 * commands on the ring buffer 151 * commands on the ring buffer
@@ -143,10 +158,13 @@ int amdgpu_ring_lock(struct amdgpu_ring *ring, unsigned ndw)
143 */ 158 */
144void amdgpu_ring_commit(struct amdgpu_ring *ring) 159void amdgpu_ring_commit(struct amdgpu_ring *ring)
145{ 160{
161 uint32_t count;
162
146 /* We pad to match fetch size */ 163 /* We pad to match fetch size */
147 while (ring->wptr & ring->align_mask) { 164 count = ring->align_mask + 1 - (ring->wptr & ring->align_mask);
148 amdgpu_ring_write(ring, ring->nop); 165 count %= ring->align_mask + 1;
149 } 166 ring->funcs->insert_nop(ring, count);
167
150 mb(); 168 mb();
151 amdgpu_ring_set_wptr(ring); 169 amdgpu_ring_set_wptr(ring);
152} 170}