diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c | 24 |
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 | */ | ||
141 | void 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 | */ |
144 | void amdgpu_ring_commit(struct amdgpu_ring *ring) | 159 | void 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 | } |