aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
diff options
context:
space:
mode:
authorJammy Zhou <Jammy.Zhou@amd.com>2015-09-01 01:04:08 -0400
committerAlex Deucher <alexander.deucher@amd.com>2015-09-02 12:24:43 -0400
commitedff0e2826412be38f0c7977cbf89262141aad87 (patch)
tree8f6272e27b1e7f13ed7d65355b50515fdeaea33f /drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
parent4b2f7e2ca94d58ea16e411a1f717392b91f7730a (diff)
drm/amdgpu: add insert_nop ring func and default implementation
The insert_nop function is added to amdgpu_ring_funcs structure as well as the default implementation Signed-off-by: Jammy Zhou <Jammy.Zhou@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
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}