Commit ea4e4754 authored by Sunil Khatri's avatar Sunil Khatri Committed by Alex Deucher
Browse files

drm/amdgpu: optimize insert_nop using multi dwords



Optimize the ring_insert_nop fn for n dwords in one
step rather then call to amdgpu_ring_write for each
nop packet. This avoid function call for each nop
packet and also wptr is updated once only.

Signed-off-by: default avatarSunil Khatri <sunil.khatri@amd.com>
Suggested-by: default avatarChristian König <christian.koenig@amd.com>
Reviewed-by: default avatarChristian König <christian.koenig@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent ed3dac4b
Loading
Loading
Loading
Loading
+19 −3
Original line number Diff line number Diff line
@@ -108,10 +108,26 @@ int amdgpu_ring_alloc(struct amdgpu_ring *ring, unsigned int ndw)
 */
void amdgpu_ring_insert_nop(struct amdgpu_ring *ring, uint32_t count)
{
	int i;
	uint32_t occupied, chunk1, chunk2;
	uint32_t *dst;

	for (i = 0; i < count; i++)
		amdgpu_ring_write(ring, ring->funcs->nop);
	occupied = ring->wptr & ring->buf_mask;
	dst = (void *)&ring->ring[occupied];
	chunk1 = ring->buf_mask + 1 - occupied;
	chunk1 = (chunk1 >= count) ? count : chunk1;
	chunk2 = count - chunk1;

	if (chunk1)
		memset32(dst, ring->funcs->nop, chunk1);

	if (chunk2) {
		dst = (void *)ring->ring;
		memset32(dst, ring->funcs->nop, chunk2);
	}

	ring->wptr += count;
	ring->wptr &= ring->ptr_mask;
	ring->count_dw -= count;
}

/**