Commit e038b901 authored by Shirish S's avatar Shirish S Committed by Alex Deucher
Browse files

drm/amdgpu/{uvd,vcn}: fetch ring's read_ptr after alloc



[What]
readptr read always returns zero, since most likely
these blocks are either power or clock gated.

[How]
fetch rptr after amdgpu_ring_alloc() which informs
the power management code that the block is about to be
used and hence the gating is turned off.

Signed-off-by: default avatarLouis Li <Ching-shih.Li@amd.com>
Signed-off-by: default avatarShirish S <shirish.s@amd.com>
Reviewed-by: default avatarChristian König <christian.koenig@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 91c9c23e
Loading
Loading
Loading
Loading
+3 −1
Original line number Original line Diff line number Diff line
@@ -468,7 +468,7 @@ error:
int amdgpu_vcn_enc_ring_test_ring(struct amdgpu_ring *ring)
int amdgpu_vcn_enc_ring_test_ring(struct amdgpu_ring *ring)
{
{
	struct amdgpu_device *adev = ring->adev;
	struct amdgpu_device *adev = ring->adev;
	uint32_t rptr = amdgpu_ring_get_rptr(ring);
	uint32_t rptr;
	unsigned i;
	unsigned i;
	int r;
	int r;


@@ -476,6 +476,8 @@ int amdgpu_vcn_enc_ring_test_ring(struct amdgpu_ring *ring)
	if (r)
	if (r)
		return r;
		return r;


	rptr = amdgpu_ring_get_rptr(ring);

	amdgpu_ring_write(ring, VCN_ENC_CMD_END);
	amdgpu_ring_write(ring, VCN_ENC_CMD_END);
	amdgpu_ring_commit(ring);
	amdgpu_ring_commit(ring);


+4 −1
Original line number Original line Diff line number Diff line
@@ -170,13 +170,16 @@ static void uvd_v6_0_enc_ring_set_wptr(struct amdgpu_ring *ring)
static int uvd_v6_0_enc_ring_test_ring(struct amdgpu_ring *ring)
static int uvd_v6_0_enc_ring_test_ring(struct amdgpu_ring *ring)
{
{
	struct amdgpu_device *adev = ring->adev;
	struct amdgpu_device *adev = ring->adev;
	uint32_t rptr = amdgpu_ring_get_rptr(ring);
	uint32_t rptr;
	unsigned i;
	unsigned i;
	int r;
	int r;


	r = amdgpu_ring_alloc(ring, 16);
	r = amdgpu_ring_alloc(ring, 16);
	if (r)
	if (r)
		return r;
		return r;

	rptr = amdgpu_ring_get_rptr(ring);

	amdgpu_ring_write(ring, HEVC_ENC_CMD_END);
	amdgpu_ring_write(ring, HEVC_ENC_CMD_END);
	amdgpu_ring_commit(ring);
	amdgpu_ring_commit(ring);


+4 −1
Original line number Original line Diff line number Diff line
@@ -175,7 +175,7 @@ static void uvd_v7_0_enc_ring_set_wptr(struct amdgpu_ring *ring)
static int uvd_v7_0_enc_ring_test_ring(struct amdgpu_ring *ring)
static int uvd_v7_0_enc_ring_test_ring(struct amdgpu_ring *ring)
{
{
	struct amdgpu_device *adev = ring->adev;
	struct amdgpu_device *adev = ring->adev;
	uint32_t rptr = amdgpu_ring_get_rptr(ring);
	uint32_t rptr;
	unsigned i;
	unsigned i;
	int r;
	int r;


@@ -185,6 +185,9 @@ static int uvd_v7_0_enc_ring_test_ring(struct amdgpu_ring *ring)
	r = amdgpu_ring_alloc(ring, 16);
	r = amdgpu_ring_alloc(ring, 16);
	if (r)
	if (r)
		return r;
		return r;

	rptr = amdgpu_ring_get_rptr(ring);

	amdgpu_ring_write(ring, HEVC_ENC_CMD_END);
	amdgpu_ring_write(ring, HEVC_ENC_CMD_END);
	amdgpu_ring_commit(ring);
	amdgpu_ring_commit(ring);