Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e12f3d7a authored by Christian König's avatar Christian König Committed by Alex Deucher
Browse files

drm/amdgpu: move IB and frame size directly into the engine description



I should have suggested that on the initial patchset. This saves us a
few CPU cycles during CS and a bunch of loc.

Signed-off-by: default avatarChristian König <christian.koenig@amd.com>
Reviewed-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 7bc6be82
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -1962,8 +1962,6 @@ amdgpu_get_sdma_instance(struct amdgpu_ring *ring)
#define amdgpu_ring_pad_ib(r, ib) ((r)->funcs->pad_ib((r), (ib)))
#define amdgpu_ring_init_cond_exec(r) (r)->funcs->init_cond_exec((r))
#define amdgpu_ring_patch_cond_exec(r,o) (r)->funcs->patch_cond_exec((r),(o))
#define amdgpu_ring_get_emit_ib_size(r) (r)->funcs->get_emit_ib_size((r))
#define amdgpu_ring_get_dma_frame_size(r) (r)->funcs->get_dma_frame_size((r))
#define amdgpu_ih_get_wptr(adev) (adev)->irq.ih_funcs->get_wptr((adev))
#define amdgpu_ih_decode_iv(adev, iv) (adev)->irq.ih_funcs->decode_iv((adev), (iv))
#define amdgpu_ih_set_rptr(adev) (adev)->irq.ih_funcs->set_rptr((adev))
+2 −2
Original line number Diff line number Diff line
@@ -152,8 +152,8 @@ int amdgpu_ib_schedule(struct amdgpu_ring *ring, unsigned num_ibs,
		return -EINVAL;
	}

	alloc_size = amdgpu_ring_get_dma_frame_size(ring) +
		num_ibs * amdgpu_ring_get_emit_ib_size(ring);
	alloc_size = ring->funcs->emit_frame_size + num_ibs *
		ring->funcs->emit_ib_size;

	r = amdgpu_ring_alloc(ring, alloc_size);
	if (r) {
+3 −2
Original line number Diff line number Diff line
@@ -98,6 +98,9 @@ struct amdgpu_ring_funcs {
	void (*set_wptr)(struct amdgpu_ring *ring);
	/* validating and patching of IBs */
	int (*parse_cs)(struct amdgpu_cs_parser *p, uint32_t ib_idx);
	/* constants to calculate how many DW are needed for an emit */
	unsigned emit_frame_size;
	unsigned emit_ib_size;
	/* command emit functions */
	void (*emit_ib)(struct amdgpu_ring *ring,
			struct amdgpu_ib *ib,
@@ -127,8 +130,6 @@ struct amdgpu_ring_funcs {
	void (*end_use)(struct amdgpu_ring *ring);
	void (*emit_switch_buffer) (struct amdgpu_ring *ring);
	void (*emit_cntxcntl) (struct amdgpu_ring *ring, uint32_t flags);
	unsigned (*get_emit_ib_size) (struct amdgpu_ring *ring);
	unsigned (*get_dma_frame_size) (struct amdgpu_ring *ring);
};

struct amdgpu_ring {
+0 −12
Original line number Diff line number Diff line
@@ -824,18 +824,6 @@ void amdgpu_vce_ring_emit_fence(struct amdgpu_ring *ring, u64 addr, u64 seq,
	amdgpu_ring_write(ring, VCE_CMD_END);
}

unsigned amdgpu_vce_ring_get_emit_ib_size(struct amdgpu_ring *ring)
{
	return
		4; /* amdgpu_vce_ring_emit_ib */
}

unsigned amdgpu_vce_ring_get_dma_frame_size(struct amdgpu_ring *ring)
{
	return
		6; /* amdgpu_vce_ring_emit_fence  x1 no user fence */
}

/**
 * amdgpu_vce_ring_test_ring - test if VCE ring is working
 *
+7 −18
Original line number Diff line number Diff line
@@ -848,22 +848,6 @@ static void cik_sdma_ring_emit_vm_flush(struct amdgpu_ring *ring,
	amdgpu_ring_write(ring, (0xfff << 16) | 10); /* retry count, poll interval */
}

static unsigned cik_sdma_ring_get_emit_ib_size(struct amdgpu_ring *ring)
{
	return
		7 + 4; /* cik_sdma_ring_emit_ib */
}

static unsigned cik_sdma_ring_get_dma_frame_size(struct amdgpu_ring *ring)
{
	return
		6 + /* cik_sdma_ring_emit_hdp_flush */
		3 + /* cik_sdma_ring_emit_hdp_invalidate */
		6 + /* cik_sdma_ring_emit_pipeline_sync */
		12 + /* cik_sdma_ring_emit_vm_flush */
		9 + 9 + 9; /* cik_sdma_ring_emit_fence x3 for user fence, vm fence */
}

static void cik_enable_sdma_mgcg(struct amdgpu_device *adev,
				 bool enable)
{
@@ -1228,6 +1212,13 @@ static const struct amdgpu_ring_funcs cik_sdma_ring_funcs = {
	.get_rptr = cik_sdma_ring_get_rptr,
	.get_wptr = cik_sdma_ring_get_wptr,
	.set_wptr = cik_sdma_ring_set_wptr,
	.emit_frame_size =
		6 + /* cik_sdma_ring_emit_hdp_flush */
		3 + /* cik_sdma_ring_emit_hdp_invalidate */
		6 + /* cik_sdma_ring_emit_pipeline_sync */
		12 + /* cik_sdma_ring_emit_vm_flush */
		9 + 9 + 9, /* cik_sdma_ring_emit_fence x3 for user fence, vm fence */
	.emit_ib_size = 7 + 4, /* cik_sdma_ring_emit_ib */
	.emit_ib = cik_sdma_ring_emit_ib,
	.emit_fence = cik_sdma_ring_emit_fence,
	.emit_pipeline_sync = cik_sdma_ring_emit_pipeline_sync,
@@ -1238,8 +1229,6 @@ static const struct amdgpu_ring_funcs cik_sdma_ring_funcs = {
	.test_ib = cik_sdma_ring_test_ib,
	.insert_nop = cik_sdma_ring_insert_nop,
	.pad_ib = cik_sdma_ring_pad_ib,
	.get_emit_ib_size = cik_sdma_ring_get_emit_ib_size,
	.get_dma_frame_size = cik_sdma_ring_get_dma_frame_size,
};

static void cik_sdma_set_ring_funcs(struct amdgpu_device *adev)
Loading