aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThong Thai <thong.thai@amd.com>2019-07-25 11:21:58 -0400
committerAlex Deucher <alexander.deucher@amd.com>2019-07-31 00:48:32 -0400
commit333fe325febabe3df2bc3019d4b97f879d8cef73 (patch)
tree14a264bc5d988d8e65b1dc46aad9fcfdc2680f3c
parentd3b9f39d8417ee2f2cd87b5e5410015ce6f78491 (diff)
drm/amd/amdgpu/vcn_v2_0: Mark RB commands as KMD commands
Sets the CMD_SOURCE bit for VCN 2.0 Decoder Ring Buffer commands. This bit was previously set by the RBC HW on older firmware. Newer firmware uses a SW RBC and this bit has to be set by the driver. Signed-off-by: Thong Thai <thong.thai@amd.com> Reviewed-by: Leo Liu <leo.liu@amd.com> Reviewed-by: Christian König <christian.koenig@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h1
-rw-r--r--drivers/gpu/drm/amd/amdgpu/vcn_v2_0.c12
2 files changed, 7 insertions, 6 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h
index 38f0d53a6381..dface275c81a 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h
@@ -35,6 +35,7 @@
35#define AMDGPU_VCN_HARVEST_VCN0 (1 << 0) 35#define AMDGPU_VCN_HARVEST_VCN0 (1 << 0)
36#define AMDGPU_VCN_HARVEST_VCN1 (1 << 1) 36#define AMDGPU_VCN_HARVEST_VCN1 (1 << 1)
37 37
38#define VCN_DEC_KMD_CMD 0x80000000
38#define VCN_DEC_CMD_FENCE 0x00000000 39#define VCN_DEC_CMD_FENCE 0x00000000
39#define VCN_DEC_CMD_TRAP 0x00000001 40#define VCN_DEC_CMD_TRAP 0x00000001
40#define VCN_DEC_CMD_WRITE_REG 0x00000004 41#define VCN_DEC_CMD_WRITE_REG 0x00000004
diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v2_0.c b/drivers/gpu/drm/amd/amdgpu/vcn_v2_0.c
index a022e47f2a1d..80bb49736ee4 100644
--- a/drivers/gpu/drm/amd/amdgpu/vcn_v2_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/vcn_v2_0.c
@@ -1494,7 +1494,7 @@ void vcn_v2_0_dec_ring_insert_start(struct amdgpu_ring *ring)
1494 amdgpu_ring_write(ring, PACKET0(adev->vcn.internal.data0, 0)); 1494 amdgpu_ring_write(ring, PACKET0(adev->vcn.internal.data0, 0));
1495 amdgpu_ring_write(ring, 0); 1495 amdgpu_ring_write(ring, 0);
1496 amdgpu_ring_write(ring, PACKET0(adev->vcn.internal.cmd, 0)); 1496 amdgpu_ring_write(ring, PACKET0(adev->vcn.internal.cmd, 0));
1497 amdgpu_ring_write(ring, VCN_DEC_CMD_PACKET_START << 1); 1497 amdgpu_ring_write(ring, VCN_DEC_KMD_CMD | (VCN_DEC_CMD_PACKET_START << 1));
1498} 1498}
1499 1499
1500/** 1500/**
@@ -1509,7 +1509,7 @@ void vcn_v2_0_dec_ring_insert_end(struct amdgpu_ring *ring)
1509 struct amdgpu_device *adev = ring->adev; 1509 struct amdgpu_device *adev = ring->adev;
1510 1510
1511 amdgpu_ring_write(ring, PACKET0(adev->vcn.internal.cmd, 0)); 1511 amdgpu_ring_write(ring, PACKET0(adev->vcn.internal.cmd, 0));
1512 amdgpu_ring_write(ring, VCN_DEC_CMD_PACKET_END << 1); 1512 amdgpu_ring_write(ring, VCN_DEC_KMD_CMD | (VCN_DEC_CMD_PACKET_END << 1));
1513} 1513}
1514 1514
1515/** 1515/**
@@ -1556,7 +1556,7 @@ void vcn_v2_0_dec_ring_emit_fence(struct amdgpu_ring *ring, u64 addr, u64 seq,
1556 amdgpu_ring_write(ring, upper_32_bits(addr) & 0xff); 1556 amdgpu_ring_write(ring, upper_32_bits(addr) & 0xff);
1557 1557
1558 amdgpu_ring_write(ring, PACKET0(adev->vcn.internal.cmd, 0)); 1558 amdgpu_ring_write(ring, PACKET0(adev->vcn.internal.cmd, 0));
1559 amdgpu_ring_write(ring, VCN_DEC_CMD_FENCE << 1); 1559 amdgpu_ring_write(ring, VCN_DEC_KMD_CMD | (VCN_DEC_CMD_FENCE << 1));
1560 1560
1561 amdgpu_ring_write(ring, PACKET0(adev->vcn.internal.data0, 0)); 1561 amdgpu_ring_write(ring, PACKET0(adev->vcn.internal.data0, 0));
1562 amdgpu_ring_write(ring, 0); 1562 amdgpu_ring_write(ring, 0);
@@ -1566,7 +1566,7 @@ void vcn_v2_0_dec_ring_emit_fence(struct amdgpu_ring *ring, u64 addr, u64 seq,
1566 1566
1567 amdgpu_ring_write(ring, PACKET0(adev->vcn.internal.cmd, 0)); 1567 amdgpu_ring_write(ring, PACKET0(adev->vcn.internal.cmd, 0));
1568 1568
1569 amdgpu_ring_write(ring, VCN_DEC_CMD_TRAP << 1); 1569 amdgpu_ring_write(ring, VCN_DEC_KMD_CMD | (VCN_DEC_CMD_TRAP << 1));
1570} 1570}
1571 1571
1572/** 1572/**
@@ -1612,7 +1612,7 @@ void vcn_v2_0_dec_ring_emit_reg_wait(struct amdgpu_ring *ring, uint32_t reg,
1612 1612
1613 amdgpu_ring_write(ring, PACKET0(adev->vcn.internal.cmd, 0)); 1613 amdgpu_ring_write(ring, PACKET0(adev->vcn.internal.cmd, 0));
1614 1614
1615 amdgpu_ring_write(ring, VCN_DEC_CMD_REG_READ_COND_WAIT << 1); 1615 amdgpu_ring_write(ring, VCN_DEC_KMD_CMD | (VCN_DEC_CMD_REG_READ_COND_WAIT << 1));
1616} 1616}
1617 1617
1618void vcn_v2_0_dec_ring_emit_vm_flush(struct amdgpu_ring *ring, 1618void vcn_v2_0_dec_ring_emit_vm_flush(struct amdgpu_ring *ring,
@@ -1643,7 +1643,7 @@ void vcn_v2_0_dec_ring_emit_wreg(struct amdgpu_ring *ring,
1643 1643
1644 amdgpu_ring_write(ring, PACKET0(adev->vcn.internal.cmd, 0)); 1644 amdgpu_ring_write(ring, PACKET0(adev->vcn.internal.cmd, 0));
1645 1645
1646 amdgpu_ring_write(ring, VCN_DEC_CMD_WRITE_REG << 1); 1646 amdgpu_ring_write(ring, VCN_DEC_KMD_CMD | (VCN_DEC_CMD_WRITE_REG << 1));
1647} 1647}
1648 1648
1649/** 1649/**