aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian König <christian.koenig@amd.com>2016-10-05 09:36:39 -0400
committerAlex Deucher <alexander.deucher@amd.com>2016-10-25 14:38:37 -0400
commit21cd942e5c471941769cd0515164b169d012ad8a (patch)
treed3f70705cbb5b625404bc220abc0aa36d565dbff
parente12f3d7a23c99617f72305a805ed827567a43a9c (diff)
drm/amdgpu: move the ring type into the funcs structure (v2)
It's constant, so it doesn't make to much sense to keep it with the variable data. v2: update vce and uvd phys mode ring structures as well Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c4
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c4
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h6
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c2
-rw-r--r--drivers/gpu/drm/amd/amdgpu/cik_sdma.c5
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c12
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c16
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c14
-rw-r--r--drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c5
-rw-r--r--drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c5
-rw-r--r--drivers/gpu/drm/amd/amdgpu/si_dma.c5
-rw-r--r--drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c3
-rw-r--r--drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c3
-rw-r--r--drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c4
-rw-r--r--drivers/gpu/drm/amd/amdgpu/vce_v2_0.c3
-rw-r--r--drivers/gpu/drm/amd/amdgpu/vce_v3_0.c4
16 files changed, 52 insertions, 43 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
index a13e551e67cf..04b7aaf770e4 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
@@ -942,8 +942,8 @@ static int amdgpu_cs_ib_fill(struct amdgpu_device *adev,
942 942
943 /* UVD & VCE fw doesn't support user fences */ 943 /* UVD & VCE fw doesn't support user fences */
944 if (parser->job->uf_addr && ( 944 if (parser->job->uf_addr && (
945 parser->job->ring->type == AMDGPU_RING_TYPE_UVD || 945 parser->job->ring->funcs->type == AMDGPU_RING_TYPE_UVD ||
946 parser->job->ring->type == AMDGPU_RING_TYPE_VCE)) 946 parser->job->ring->funcs->type == AMDGPU_RING_TYPE_VCE))
947 return -EINVAL; 947 return -EINVAL;
948 948
949 return 0; 949 return 0;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
index 3cb5e903cd62..b81b1244a120 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
@@ -164,8 +164,7 @@ void amdgpu_ring_undo(struct amdgpu_ring *ring)
164 */ 164 */
165int amdgpu_ring_init(struct amdgpu_device *adev, struct amdgpu_ring *ring, 165int amdgpu_ring_init(struct amdgpu_device *adev, struct amdgpu_ring *ring,
166 unsigned max_dw, u32 nop, u32 align_mask, 166 unsigned max_dw, u32 nop, u32 align_mask,
167 struct amdgpu_irq_src *irq_src, unsigned irq_type, 167 struct amdgpu_irq_src *irq_src, unsigned irq_type)
168 enum amdgpu_ring_type ring_type)
169{ 168{
170 int r; 169 int r;
171 170
@@ -218,7 +217,6 @@ int amdgpu_ring_init(struct amdgpu_device *adev, struct amdgpu_ring *ring,
218 amdgpu_sched_hw_submission); 217 amdgpu_sched_hw_submission);
219 ring->align_mask = align_mask; 218 ring->align_mask = align_mask;
220 ring->nop = nop; 219 ring->nop = nop;
221 ring->type = ring_type;
222 220
223 /* Allocate ring buffer */ 221 /* Allocate ring buffer */
224 if (ring->ring_obj == NULL) { 222 if (ring->ring_obj == NULL) {
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h
index 767843c2b1d7..6cf89c97ef8e 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h
@@ -92,6 +92,8 @@ unsigned amdgpu_fence_count_emitted(struct amdgpu_ring *ring);
92 92
93/* provided by hw blocks that expose a ring buffer for commands */ 93/* provided by hw blocks that expose a ring buffer for commands */
94struct amdgpu_ring_funcs { 94struct amdgpu_ring_funcs {
95 enum amdgpu_ring_type type;
96
95 /* ring read/write ptr handling */ 97 /* ring read/write ptr handling */
96 u32 (*get_rptr)(struct amdgpu_ring *ring); 98 u32 (*get_rptr)(struct amdgpu_ring *ring);
97 u32 (*get_wptr)(struct amdgpu_ring *ring); 99 u32 (*get_wptr)(struct amdgpu_ring *ring);
@@ -161,7 +163,6 @@ struct amdgpu_ring {
161 unsigned wptr_offs; 163 unsigned wptr_offs;
162 unsigned fence_offs; 164 unsigned fence_offs;
163 uint64_t current_ctx; 165 uint64_t current_ctx;
164 enum amdgpu_ring_type type;
165 char name[16]; 166 char name[16];
166 unsigned cond_exe_offs; 167 unsigned cond_exe_offs;
167 u64 cond_exe_gpu_addr; 168 u64 cond_exe_gpu_addr;
@@ -178,8 +179,7 @@ void amdgpu_ring_commit(struct amdgpu_ring *ring);
178void amdgpu_ring_undo(struct amdgpu_ring *ring); 179void amdgpu_ring_undo(struct amdgpu_ring *ring);
179int amdgpu_ring_init(struct amdgpu_device *adev, struct amdgpu_ring *ring, 180int amdgpu_ring_init(struct amdgpu_device *adev, struct amdgpu_ring *ring,
180 unsigned ring_size, u32 nop, u32 align_mask, 181 unsigned ring_size, u32 nop, u32 align_mask,
181 struct amdgpu_irq_src *irq_src, unsigned irq_type, 182 struct amdgpu_irq_src *irq_src, unsigned irq_type);
182 enum amdgpu_ring_type ring_type);
183void amdgpu_ring_fini(struct amdgpu_ring *ring); 183void amdgpu_ring_fini(struct amdgpu_ring *ring);
184 184
185#endif 185#endif
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
index b8620d3dd61e..da66823eff1c 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
@@ -348,7 +348,7 @@ static bool amdgpu_vm_ring_has_compute_vm_bug(struct amdgpu_ring *ring)
348 struct amdgpu_device *adev = ring->adev; 348 struct amdgpu_device *adev = ring->adev;
349 const struct amdgpu_ip_block_version *ip_block; 349 const struct amdgpu_ip_block_version *ip_block;
350 350
351 if (ring->type != AMDGPU_RING_TYPE_COMPUTE) 351 if (ring->funcs->type != AMDGPU_RING_TYPE_COMPUTE)
352 /* only compute rings */ 352 /* only compute rings */
353 return false; 353 return false;
354 354
diff --git a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c
index 49b34decce58..472cfff28ccf 100644
--- a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c
+++ b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c
@@ -946,8 +946,8 @@ static int cik_sdma_sw_init(void *handle)
946 SDMA_PACKET(SDMA_OPCODE_NOP, 0, 0), 0xf, 946 SDMA_PACKET(SDMA_OPCODE_NOP, 0, 0), 0xf,
947 &adev->sdma.trap_irq, 947 &adev->sdma.trap_irq,
948 (i == 0) ? 948 (i == 0) ?
949 AMDGPU_SDMA_IRQ_TRAP0 : AMDGPU_SDMA_IRQ_TRAP1, 949 AMDGPU_SDMA_IRQ_TRAP0 :
950 AMDGPU_RING_TYPE_SDMA); 950 AMDGPU_SDMA_IRQ_TRAP1);
951 if (r) 951 if (r)
952 return r; 952 return r;
953 } 953 }
@@ -1209,6 +1209,7 @@ const struct amd_ip_funcs cik_sdma_ip_funcs = {
1209}; 1209};
1210 1210
1211static const struct amdgpu_ring_funcs cik_sdma_ring_funcs = { 1211static const struct amdgpu_ring_funcs cik_sdma_ring_funcs = {
1212 .type = AMDGPU_RING_TYPE_SDMA,
1212 .get_rptr = cik_sdma_ring_get_rptr, 1213 .get_rptr = cik_sdma_ring_get_rptr,
1213 .get_wptr = cik_sdma_ring_get_wptr, 1214 .get_wptr = cik_sdma_ring_get_wptr,
1214 .set_wptr = cik_sdma_ring_set_wptr, 1215 .set_wptr = cik_sdma_ring_set_wptr,
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
index a86b17944bcf..1f8687fd8662 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
@@ -1940,7 +1940,7 @@ static int gfx_v6_0_cp_resume(struct amdgpu_device *adev)
1940 1940
1941static void gfx_v6_0_ring_emit_pipeline_sync(struct amdgpu_ring *ring) 1941static void gfx_v6_0_ring_emit_pipeline_sync(struct amdgpu_ring *ring)
1942{ 1942{
1943 int usepfp = (ring->type == AMDGPU_RING_TYPE_GFX); 1943 int usepfp = (ring->funcs->type == AMDGPU_RING_TYPE_GFX);
1944 uint32_t seq = ring->fence_drv.sync_seq; 1944 uint32_t seq = ring->fence_drv.sync_seq;
1945 uint64_t addr = ring->fence_drv.gpu_addr; 1945 uint64_t addr = ring->fence_drv.gpu_addr;
1946 1946
@@ -1966,7 +1966,7 @@ static void gfx_v6_0_ring_emit_pipeline_sync(struct amdgpu_ring *ring)
1966static void gfx_v6_0_ring_emit_vm_flush(struct amdgpu_ring *ring, 1966static void gfx_v6_0_ring_emit_vm_flush(struct amdgpu_ring *ring,
1967 unsigned vm_id, uint64_t pd_addr) 1967 unsigned vm_id, uint64_t pd_addr)
1968{ 1968{
1969 int usepfp = (ring->type == AMDGPU_RING_TYPE_GFX); 1969 int usepfp = (ring->funcs->type == AMDGPU_RING_TYPE_GFX);
1970 1970
1971 /* write new base address */ 1971 /* write new base address */
1972 amdgpu_ring_write(ring, PACKET3(PACKET3_WRITE_DATA, 3)); 1972 amdgpu_ring_write(ring, PACKET3(PACKET3_WRITE_DATA, 3));
@@ -2870,8 +2870,7 @@ static int gfx_v6_0_sw_init(void *handle)
2870 sprintf(ring->name, "gfx"); 2870 sprintf(ring->name, "gfx");
2871 r = amdgpu_ring_init(adev, ring, 1024, 2871 r = amdgpu_ring_init(adev, ring, 1024,
2872 0x80000000, 0xff, 2872 0x80000000, 0xff,
2873 &adev->gfx.eop_irq, AMDGPU_CP_IRQ_GFX_EOP, 2873 &adev->gfx.eop_irq, AMDGPU_CP_IRQ_GFX_EOP);
2874 AMDGPU_RING_TYPE_GFX);
2875 if (r) 2874 if (r)
2876 return r; 2875 return r;
2877 } 2876 }
@@ -2894,8 +2893,7 @@ static int gfx_v6_0_sw_init(void *handle)
2894 irq_type = AMDGPU_CP_IRQ_COMPUTE_MEC1_PIPE0_EOP + ring->pipe; 2893 irq_type = AMDGPU_CP_IRQ_COMPUTE_MEC1_PIPE0_EOP + ring->pipe;
2895 r = amdgpu_ring_init(adev, ring, 1024, 2894 r = amdgpu_ring_init(adev, ring, 1024,
2896 0x80000000, 0xff, 2895 0x80000000, 0xff,
2897 &adev->gfx.eop_irq, irq_type, 2896 &adev->gfx.eop_irq, irq_type);
2898 AMDGPU_RING_TYPE_COMPUTE);
2899 if (r) 2897 if (r)
2900 return r; 2898 return r;
2901 } 2899 }
@@ -3228,6 +3226,7 @@ const struct amd_ip_funcs gfx_v6_0_ip_funcs = {
3228}; 3226};
3229 3227
3230static const struct amdgpu_ring_funcs gfx_v6_0_ring_funcs_gfx = { 3228static const struct amdgpu_ring_funcs gfx_v6_0_ring_funcs_gfx = {
3229 .type = AMDGPU_RING_TYPE_GFX,
3231 .get_rptr = gfx_v6_0_ring_get_rptr, 3230 .get_rptr = gfx_v6_0_ring_get_rptr,
3232 .get_wptr = gfx_v6_0_ring_get_wptr, 3231 .get_wptr = gfx_v6_0_ring_get_wptr,
3233 .set_wptr = gfx_v6_0_ring_set_wptr_gfx, 3232 .set_wptr = gfx_v6_0_ring_set_wptr_gfx,
@@ -3252,6 +3251,7 @@ static const struct amdgpu_ring_funcs gfx_v6_0_ring_funcs_gfx = {
3252}; 3251};
3253 3252
3254static const struct amdgpu_ring_funcs gfx_v6_0_ring_funcs_compute = { 3253static const struct amdgpu_ring_funcs gfx_v6_0_ring_funcs_compute = {
3254 .type = AMDGPU_RING_TYPE_COMPUTE,
3255 .get_rptr = gfx_v6_0_ring_get_rptr, 3255 .get_rptr = gfx_v6_0_ring_get_rptr,
3256 .get_wptr = gfx_v6_0_ring_get_wptr, 3256 .get_wptr = gfx_v6_0_ring_get_wptr,
3257 .set_wptr = gfx_v6_0_ring_set_wptr_compute, 3257 .set_wptr = gfx_v6_0_ring_set_wptr_compute,
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
index f2415f58c160..cb2fc826f95c 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
@@ -2077,9 +2077,9 @@ static int gfx_v7_0_ring_test_ring(struct amdgpu_ring *ring)
2077static void gfx_v7_0_ring_emit_hdp_flush(struct amdgpu_ring *ring) 2077static void gfx_v7_0_ring_emit_hdp_flush(struct amdgpu_ring *ring)
2078{ 2078{
2079 u32 ref_and_mask; 2079 u32 ref_and_mask;
2080 int usepfp = ring->type == AMDGPU_RING_TYPE_COMPUTE ? 0 : 1; 2080 int usepfp = ring->funcs->type == AMDGPU_RING_TYPE_COMPUTE ? 0 : 1;
2081 2081
2082 if (ring->type == AMDGPU_RING_TYPE_COMPUTE) { 2082 if (ring->funcs->type == AMDGPU_RING_TYPE_COMPUTE) {
2083 switch (ring->me) { 2083 switch (ring->me) {
2084 case 1: 2084 case 1:
2085 ref_and_mask = GPU_HDP_FLUSH_DONE__CP2_MASK << ring->pipe; 2085 ref_and_mask = GPU_HDP_FLUSH_DONE__CP2_MASK << ring->pipe;
@@ -3222,7 +3222,7 @@ static int gfx_v7_0_cp_resume(struct amdgpu_device *adev)
3222 */ 3222 */
3223static void gfx_v7_0_ring_emit_pipeline_sync(struct amdgpu_ring *ring) 3223static void gfx_v7_0_ring_emit_pipeline_sync(struct amdgpu_ring *ring)
3224{ 3224{
3225 int usepfp = (ring->type == AMDGPU_RING_TYPE_GFX); 3225 int usepfp = (ring->funcs->type == AMDGPU_RING_TYPE_GFX);
3226 uint32_t seq = ring->fence_drv.sync_seq; 3226 uint32_t seq = ring->fence_drv.sync_seq;
3227 uint64_t addr = ring->fence_drv.gpu_addr; 3227 uint64_t addr = ring->fence_drv.gpu_addr;
3228 3228
@@ -3262,7 +3262,7 @@ static void gfx_v7_0_ring_emit_pipeline_sync(struct amdgpu_ring *ring)
3262static void gfx_v7_0_ring_emit_vm_flush(struct amdgpu_ring *ring, 3262static void gfx_v7_0_ring_emit_vm_flush(struct amdgpu_ring *ring,
3263 unsigned vm_id, uint64_t pd_addr) 3263 unsigned vm_id, uint64_t pd_addr)
3264{ 3264{
3265 int usepfp = (ring->type == AMDGPU_RING_TYPE_GFX); 3265 int usepfp = (ring->funcs->type == AMDGPU_RING_TYPE_GFX);
3266 3266
3267 amdgpu_ring_write(ring, PACKET3(PACKET3_WRITE_DATA, 3)); 3267 amdgpu_ring_write(ring, PACKET3(PACKET3_WRITE_DATA, 3));
3268 amdgpu_ring_write(ring, (WRITE_DATA_ENGINE_SEL(usepfp) | 3268 amdgpu_ring_write(ring, (WRITE_DATA_ENGINE_SEL(usepfp) |
@@ -4612,8 +4612,7 @@ static int gfx_v7_0_sw_init(void *handle)
4612 sprintf(ring->name, "gfx"); 4612 sprintf(ring->name, "gfx");
4613 r = amdgpu_ring_init(adev, ring, 1024, 4613 r = amdgpu_ring_init(adev, ring, 1024,
4614 PACKET3(PACKET3_NOP, 0x3FFF), 0xff, 4614 PACKET3(PACKET3_NOP, 0x3FFF), 0xff,
4615 &adev->gfx.eop_irq, AMDGPU_CP_IRQ_GFX_EOP, 4615 &adev->gfx.eop_irq, AMDGPU_CP_IRQ_GFX_EOP);
4616 AMDGPU_RING_TYPE_GFX);
4617 if (r) 4616 if (r)
4618 return r; 4617 return r;
4619 } 4618 }
@@ -4639,8 +4638,7 @@ static int gfx_v7_0_sw_init(void *handle)
4639 /* type-2 packets are deprecated on MEC, use type-3 instead */ 4638 /* type-2 packets are deprecated on MEC, use type-3 instead */
4640 r = amdgpu_ring_init(adev, ring, 1024, 4639 r = amdgpu_ring_init(adev, ring, 1024,
4641 PACKET3(PACKET3_NOP, 0x3FFF), 0xff, 4640 PACKET3(PACKET3_NOP, 0x3FFF), 0xff,
4642 &adev->gfx.eop_irq, irq_type, 4641 &adev->gfx.eop_irq, irq_type);
4643 AMDGPU_RING_TYPE_COMPUTE);
4644 if (r) 4642 if (r)
4645 return r; 4643 return r;
4646 } 4644 }
@@ -5109,6 +5107,7 @@ const struct amd_ip_funcs gfx_v7_0_ip_funcs = {
5109}; 5107};
5110 5108
5111static const struct amdgpu_ring_funcs gfx_v7_0_ring_funcs_gfx = { 5109static const struct amdgpu_ring_funcs gfx_v7_0_ring_funcs_gfx = {
5110 .type = AMDGPU_RING_TYPE_GFX,
5112 .get_rptr = gfx_v7_0_ring_get_rptr, 5111 .get_rptr = gfx_v7_0_ring_get_rptr,
5113 .get_wptr = gfx_v7_0_ring_get_wptr_gfx, 5112 .get_wptr = gfx_v7_0_ring_get_wptr_gfx,
5114 .set_wptr = gfx_v7_0_ring_set_wptr_gfx, 5113 .set_wptr = gfx_v7_0_ring_set_wptr_gfx,
@@ -5136,6 +5135,7 @@ static const struct amdgpu_ring_funcs gfx_v7_0_ring_funcs_gfx = {
5136}; 5135};
5137 5136
5138static const struct amdgpu_ring_funcs gfx_v7_0_ring_funcs_compute = { 5137static const struct amdgpu_ring_funcs gfx_v7_0_ring_funcs_compute = {
5138 .type = AMDGPU_RING_TYPE_COMPUTE,
5139 .get_rptr = gfx_v7_0_ring_get_rptr, 5139 .get_rptr = gfx_v7_0_ring_get_rptr,
5140 .get_wptr = gfx_v7_0_ring_get_wptr_compute, 5140 .get_wptr = gfx_v7_0_ring_get_wptr_compute,
5141 .set_wptr = gfx_v7_0_ring_set_wptr_compute, 5141 .set_wptr = gfx_v7_0_ring_set_wptr_compute,
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
index e3330d06af9a..637dbc1a2e48 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
@@ -2036,8 +2036,7 @@ static int gfx_v8_0_sw_init(void *handle)
2036 2036
2037 r = amdgpu_ring_init(adev, ring, 1024, 2037 r = amdgpu_ring_init(adev, ring, 1024,
2038 PACKET3(PACKET3_NOP, 0x3FFF), 0xff, 2038 PACKET3(PACKET3_NOP, 0x3FFF), 0xff,
2039 &adev->gfx.eop_irq, AMDGPU_CP_IRQ_GFX_EOP, 2039 &adev->gfx.eop_irq, AMDGPU_CP_IRQ_GFX_EOP);
2040 AMDGPU_RING_TYPE_GFX);
2041 if (r) 2040 if (r)
2042 return r; 2041 return r;
2043 } 2042 }
@@ -2063,8 +2062,7 @@ static int gfx_v8_0_sw_init(void *handle)
2063 /* type-2 packets are deprecated on MEC, use type-3 instead */ 2062 /* type-2 packets are deprecated on MEC, use type-3 instead */
2064 r = amdgpu_ring_init(adev, ring, 1024, 2063 r = amdgpu_ring_init(adev, ring, 1024,
2065 PACKET3(PACKET3_NOP, 0x3FFF), 0xff, 2064 PACKET3(PACKET3_NOP, 0x3FFF), 0xff,
2066 &adev->gfx.eop_irq, irq_type, 2065 &adev->gfx.eop_irq, irq_type);
2067 AMDGPU_RING_TYPE_COMPUTE);
2068 if (r) 2066 if (r)
2069 return r; 2067 return r;
2070 } 2068 }
@@ -6127,7 +6125,7 @@ static void gfx_v8_0_ring_emit_hdp_flush(struct amdgpu_ring *ring)
6127{ 6125{
6128 u32 ref_and_mask, reg_mem_engine; 6126 u32 ref_and_mask, reg_mem_engine;
6129 6127
6130 if (ring->type == AMDGPU_RING_TYPE_COMPUTE) { 6128 if (ring->funcs->type == AMDGPU_RING_TYPE_COMPUTE) {
6131 switch (ring->me) { 6129 switch (ring->me) {
6132 case 1: 6130 case 1:
6133 ref_and_mask = GPU_HDP_FLUSH_DONE__CP2_MASK << ring->pipe; 6131 ref_and_mask = GPU_HDP_FLUSH_DONE__CP2_MASK << ring->pipe;
@@ -6229,7 +6227,7 @@ static void gfx_v8_0_ring_emit_fence_gfx(struct amdgpu_ring *ring, u64 addr,
6229 6227
6230static void gfx_v8_0_ring_emit_pipeline_sync(struct amdgpu_ring *ring) 6228static void gfx_v8_0_ring_emit_pipeline_sync(struct amdgpu_ring *ring)
6231{ 6229{
6232 int usepfp = (ring->type == AMDGPU_RING_TYPE_GFX); 6230 int usepfp = (ring->funcs->type == AMDGPU_RING_TYPE_GFX);
6233 uint32_t seq = ring->fence_drv.sync_seq; 6231 uint32_t seq = ring->fence_drv.sync_seq;
6234 uint64_t addr = ring->fence_drv.gpu_addr; 6232 uint64_t addr = ring->fence_drv.gpu_addr;
6235 6233
@@ -6247,7 +6245,7 @@ static void gfx_v8_0_ring_emit_pipeline_sync(struct amdgpu_ring *ring)
6247static void gfx_v8_0_ring_emit_vm_flush(struct amdgpu_ring *ring, 6245static void gfx_v8_0_ring_emit_vm_flush(struct amdgpu_ring *ring,
6248 unsigned vm_id, uint64_t pd_addr) 6246 unsigned vm_id, uint64_t pd_addr)
6249{ 6247{
6250 int usepfp = (ring->type == AMDGPU_RING_TYPE_GFX); 6248 int usepfp = (ring->funcs->type == AMDGPU_RING_TYPE_GFX);
6251 6249
6252 amdgpu_ring_write(ring, PACKET3(PACKET3_WRITE_DATA, 3)); 6250 amdgpu_ring_write(ring, PACKET3(PACKET3_WRITE_DATA, 3));
6253 amdgpu_ring_write(ring, (WRITE_DATA_ENGINE_SEL(usepfp) | 6251 amdgpu_ring_write(ring, (WRITE_DATA_ENGINE_SEL(usepfp) |
@@ -6529,6 +6527,7 @@ const struct amd_ip_funcs gfx_v8_0_ip_funcs = {
6529}; 6527};
6530 6528
6531static const struct amdgpu_ring_funcs gfx_v8_0_ring_funcs_gfx = { 6529static const struct amdgpu_ring_funcs gfx_v8_0_ring_funcs_gfx = {
6530 .type = AMDGPU_RING_TYPE_GFX,
6532 .get_rptr = gfx_v8_0_ring_get_rptr, 6531 .get_rptr = gfx_v8_0_ring_get_rptr,
6533 .get_wptr = gfx_v8_0_ring_get_wptr_gfx, 6532 .get_wptr = gfx_v8_0_ring_get_wptr_gfx,
6534 .set_wptr = gfx_v8_0_ring_set_wptr_gfx, 6533 .set_wptr = gfx_v8_0_ring_set_wptr_gfx,
@@ -6558,6 +6557,7 @@ static const struct amdgpu_ring_funcs gfx_v8_0_ring_funcs_gfx = {
6558}; 6557};
6559 6558
6560static const struct amdgpu_ring_funcs gfx_v8_0_ring_funcs_compute = { 6559static const struct amdgpu_ring_funcs gfx_v8_0_ring_funcs_compute = {
6560 .type = AMDGPU_RING_TYPE_COMPUTE,
6561 .get_rptr = gfx_v8_0_ring_get_rptr, 6561 .get_rptr = gfx_v8_0_ring_get_rptr,
6562 .get_wptr = gfx_v8_0_ring_get_wptr_compute, 6562 .get_wptr = gfx_v8_0_ring_get_wptr_compute,
6563 .set_wptr = gfx_v8_0_ring_set_wptr_compute, 6563 .set_wptr = gfx_v8_0_ring_set_wptr_compute,
diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c
index 7cd24e42aa9a..36a135de44fe 100644
--- a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c
+++ b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c
@@ -952,8 +952,8 @@ static int sdma_v2_4_sw_init(void *handle)
952 SDMA_PKT_NOP_HEADER_OP(SDMA_OP_NOP), 0xf, 952 SDMA_PKT_NOP_HEADER_OP(SDMA_OP_NOP), 0xf,
953 &adev->sdma.trap_irq, 953 &adev->sdma.trap_irq,
954 (i == 0) ? 954 (i == 0) ?
955 AMDGPU_SDMA_IRQ_TRAP0 : AMDGPU_SDMA_IRQ_TRAP1, 955 AMDGPU_SDMA_IRQ_TRAP0 :
956 AMDGPU_RING_TYPE_SDMA); 956 AMDGPU_SDMA_IRQ_TRAP1);
957 if (r) 957 if (r)
958 return r; 958 return r;
959 } 959 }
@@ -1206,6 +1206,7 @@ const struct amd_ip_funcs sdma_v2_4_ip_funcs = {
1206}; 1206};
1207 1207
1208static const struct amdgpu_ring_funcs sdma_v2_4_ring_funcs = { 1208static const struct amdgpu_ring_funcs sdma_v2_4_ring_funcs = {
1209 .type = AMDGPU_RING_TYPE_SDMA,
1209 .get_rptr = sdma_v2_4_ring_get_rptr, 1210 .get_rptr = sdma_v2_4_ring_get_rptr,
1210 .get_wptr = sdma_v2_4_ring_get_wptr, 1211 .get_wptr = sdma_v2_4_ring_get_wptr,
1211 .set_wptr = sdma_v2_4_ring_set_wptr, 1212 .set_wptr = sdma_v2_4_ring_set_wptr,
diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c
index 6518993e23a8..e4f59c36f989 100644
--- a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c
@@ -1164,8 +1164,8 @@ static int sdma_v3_0_sw_init(void *handle)
1164 SDMA_PKT_NOP_HEADER_OP(SDMA_OP_NOP), 0xf, 1164 SDMA_PKT_NOP_HEADER_OP(SDMA_OP_NOP), 0xf,
1165 &adev->sdma.trap_irq, 1165 &adev->sdma.trap_irq,
1166 (i == 0) ? 1166 (i == 0) ?
1167 AMDGPU_SDMA_IRQ_TRAP0 : AMDGPU_SDMA_IRQ_TRAP1, 1167 AMDGPU_SDMA_IRQ_TRAP0 :
1168 AMDGPU_RING_TYPE_SDMA); 1168 AMDGPU_SDMA_IRQ_TRAP1);
1169 if (r) 1169 if (r)
1170 return r; 1170 return r;
1171 } 1171 }
@@ -1549,6 +1549,7 @@ const struct amd_ip_funcs sdma_v3_0_ip_funcs = {
1549}; 1549};
1550 1550
1551static const struct amdgpu_ring_funcs sdma_v3_0_ring_funcs = { 1551static const struct amdgpu_ring_funcs sdma_v3_0_ring_funcs = {
1552 .type = AMDGPU_RING_TYPE_SDMA,
1552 .get_rptr = sdma_v3_0_ring_get_rptr, 1553 .get_rptr = sdma_v3_0_ring_get_rptr,
1553 .get_wptr = sdma_v3_0_ring_get_wptr, 1554 .get_wptr = sdma_v3_0_ring_get_wptr,
1554 .set_wptr = sdma_v3_0_ring_set_wptr, 1555 .set_wptr = sdma_v3_0_ring_set_wptr,
diff --git a/drivers/gpu/drm/amd/amdgpu/si_dma.c b/drivers/gpu/drm/amd/amdgpu/si_dma.c
index c1c1b5179de5..1aee45b0bb9e 100644
--- a/drivers/gpu/drm/amd/amdgpu/si_dma.c
+++ b/drivers/gpu/drm/amd/amdgpu/si_dma.c
@@ -534,8 +534,8 @@ static int si_dma_sw_init(void *handle)
534 DMA_PACKET(DMA_PACKET_NOP, 0, 0, 0, 0), 0xf, 534 DMA_PACKET(DMA_PACKET_NOP, 0, 0, 0, 0), 0xf,
535 &adev->sdma.trap_irq, 535 &adev->sdma.trap_irq,
536 (i == 0) ? 536 (i == 0) ?
537 AMDGPU_SDMA_IRQ_TRAP0 : AMDGPU_SDMA_IRQ_TRAP1, 537 AMDGPU_SDMA_IRQ_TRAP0 :
538 AMDGPU_RING_TYPE_SDMA); 538 AMDGPU_SDMA_IRQ_TRAP1);
539 if (r) 539 if (r)
540 return r; 540 return r;
541 } 541 }
@@ -764,6 +764,7 @@ const struct amd_ip_funcs si_dma_ip_funcs = {
764}; 764};
765 765
766static const struct amdgpu_ring_funcs si_dma_ring_funcs = { 766static const struct amdgpu_ring_funcs si_dma_ring_funcs = {
767 .type = AMDGPU_RING_TYPE_SDMA,
767 .get_rptr = si_dma_ring_get_rptr, 768 .get_rptr = si_dma_ring_get_rptr,
768 .get_wptr = si_dma_ring_get_wptr, 769 .get_wptr = si_dma_ring_get_wptr,
769 .set_wptr = si_dma_ring_set_wptr, 770 .set_wptr = si_dma_ring_set_wptr,
diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c b/drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c
index 708de997e3b0..55af8aca4b2a 100644
--- a/drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c
+++ b/drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c
@@ -117,7 +117,7 @@ static int uvd_v4_2_sw_init(void *handle)
117 ring = &adev->uvd.ring; 117 ring = &adev->uvd.ring;
118 sprintf(ring->name, "uvd"); 118 sprintf(ring->name, "uvd");
119 r = amdgpu_ring_init(adev, ring, 512, PACKET0(mmUVD_NO_OP, 0), 0xf, 119 r = amdgpu_ring_init(adev, ring, 512, PACKET0(mmUVD_NO_OP, 0), 0xf,
120 &adev->uvd.irq, 0, AMDGPU_RING_TYPE_UVD); 120 &adev->uvd.irq, 0);
121 121
122 return r; 122 return r;
123} 123}
@@ -742,6 +742,7 @@ const struct amd_ip_funcs uvd_v4_2_ip_funcs = {
742}; 742};
743 743
744static const struct amdgpu_ring_funcs uvd_v4_2_ring_funcs = { 744static const struct amdgpu_ring_funcs uvd_v4_2_ring_funcs = {
745 .type = AMDGPU_RING_TYPE_UVD,
745 .get_rptr = uvd_v4_2_ring_get_rptr, 746 .get_rptr = uvd_v4_2_ring_get_rptr,
746 .get_wptr = uvd_v4_2_ring_get_wptr, 747 .get_wptr = uvd_v4_2_ring_get_wptr,
747 .set_wptr = uvd_v4_2_ring_set_wptr, 748 .set_wptr = uvd_v4_2_ring_set_wptr,
diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c b/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c
index 9e695e01f8b8..21e725b50a90 100644
--- a/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c
@@ -113,7 +113,7 @@ static int uvd_v5_0_sw_init(void *handle)
113 ring = &adev->uvd.ring; 113 ring = &adev->uvd.ring;
114 sprintf(ring->name, "uvd"); 114 sprintf(ring->name, "uvd");
115 r = amdgpu_ring_init(adev, ring, 512, PACKET0(mmUVD_NO_OP, 0), 0xf, 115 r = amdgpu_ring_init(adev, ring, 512, PACKET0(mmUVD_NO_OP, 0), 0xf,
116 &adev->uvd.irq, 0, AMDGPU_RING_TYPE_UVD); 116 &adev->uvd.irq, 0);
117 117
118 return r; 118 return r;
119} 119}
@@ -793,6 +793,7 @@ const struct amd_ip_funcs uvd_v5_0_ip_funcs = {
793}; 793};
794 794
795static const struct amdgpu_ring_funcs uvd_v5_0_ring_funcs = { 795static const struct amdgpu_ring_funcs uvd_v5_0_ring_funcs = {
796 .type = AMDGPU_RING_TYPE_UVD,
796 .get_rptr = uvd_v5_0_ring_get_rptr, 797 .get_rptr = uvd_v5_0_ring_get_rptr,
797 .get_wptr = uvd_v5_0_ring_get_wptr, 798 .get_wptr = uvd_v5_0_ring_get_wptr,
798 .set_wptr = uvd_v5_0_ring_set_wptr, 799 .set_wptr = uvd_v5_0_ring_set_wptr,
diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c b/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
index aeb1b6e2c518..65df5b208243 100644
--- a/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
@@ -117,7 +117,7 @@ static int uvd_v6_0_sw_init(void *handle)
117 ring = &adev->uvd.ring; 117 ring = &adev->uvd.ring;
118 sprintf(ring->name, "uvd"); 118 sprintf(ring->name, "uvd");
119 r = amdgpu_ring_init(adev, ring, 512, PACKET0(mmUVD_NO_OP, 0), 0xf, 119 r = amdgpu_ring_init(adev, ring, 512, PACKET0(mmUVD_NO_OP, 0), 0xf,
120 &adev->uvd.irq, 0, AMDGPU_RING_TYPE_UVD); 120 &adev->uvd.irq, 0);
121 121
122 return r; 122 return r;
123} 123}
@@ -1023,6 +1023,7 @@ const struct amd_ip_funcs uvd_v6_0_ip_funcs = {
1023}; 1023};
1024 1024
1025static const struct amdgpu_ring_funcs uvd_v6_0_ring_phys_funcs = { 1025static const struct amdgpu_ring_funcs uvd_v6_0_ring_phys_funcs = {
1026 .type = AMDGPU_RING_TYPE_UVD,
1026 .get_rptr = uvd_v6_0_ring_get_rptr, 1027 .get_rptr = uvd_v6_0_ring_get_rptr,
1027 .get_wptr = uvd_v6_0_ring_get_wptr, 1028 .get_wptr = uvd_v6_0_ring_get_wptr,
1028 .set_wptr = uvd_v6_0_ring_set_wptr, 1029 .set_wptr = uvd_v6_0_ring_set_wptr,
@@ -1046,6 +1047,7 @@ static const struct amdgpu_ring_funcs uvd_v6_0_ring_phys_funcs = {
1046}; 1047};
1047 1048
1048static const struct amdgpu_ring_funcs uvd_v6_0_ring_vm_funcs = { 1049static const struct amdgpu_ring_funcs uvd_v6_0_ring_vm_funcs = {
1050 .type = AMDGPU_RING_TYPE_UVD,
1049 .get_rptr = uvd_v6_0_ring_get_rptr, 1051 .get_rptr = uvd_v6_0_ring_get_rptr,
1050 .get_wptr = uvd_v6_0_ring_get_wptr, 1052 .get_wptr = uvd_v6_0_ring_get_wptr,
1051 .set_wptr = uvd_v6_0_ring_set_wptr, 1053 .set_wptr = uvd_v6_0_ring_set_wptr,
diff --git a/drivers/gpu/drm/amd/amdgpu/vce_v2_0.c b/drivers/gpu/drm/amd/amdgpu/vce_v2_0.c
index 7ada30ddfa0d..cf0c68fda20e 100644
--- a/drivers/gpu/drm/amd/amdgpu/vce_v2_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/vce_v2_0.c
@@ -225,7 +225,7 @@ static int vce_v2_0_sw_init(void *handle)
225 ring = &adev->vce.ring[i]; 225 ring = &adev->vce.ring[i];
226 sprintf(ring->name, "vce%d", i); 226 sprintf(ring->name, "vce%d", i);
227 r = amdgpu_ring_init(adev, ring, 512, VCE_CMD_NO_OP, 0xf, 227 r = amdgpu_ring_init(adev, ring, 512, VCE_CMD_NO_OP, 0xf,
228 &adev->vce.irq, 0, AMDGPU_RING_TYPE_VCE); 228 &adev->vce.irq, 0);
229 if (r) 229 if (r)
230 return r; 230 return r;
231 } 231 }
@@ -610,6 +610,7 @@ const struct amd_ip_funcs vce_v2_0_ip_funcs = {
610}; 610};
611 611
612static const struct amdgpu_ring_funcs vce_v2_0_ring_funcs = { 612static const struct amdgpu_ring_funcs vce_v2_0_ring_funcs = {
613 .type = AMDGPU_RING_TYPE_VCE,
613 .get_rptr = vce_v2_0_ring_get_rptr, 614 .get_rptr = vce_v2_0_ring_get_rptr,
614 .get_wptr = vce_v2_0_ring_get_wptr, 615 .get_wptr = vce_v2_0_ring_get_wptr,
615 .set_wptr = vce_v2_0_ring_set_wptr, 616 .set_wptr = vce_v2_0_ring_set_wptr,
diff --git a/drivers/gpu/drm/amd/amdgpu/vce_v3_0.c b/drivers/gpu/drm/amd/amdgpu/vce_v3_0.c
index 0db59d885f04..95fe8a8bda12 100644
--- a/drivers/gpu/drm/amd/amdgpu/vce_v3_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/vce_v3_0.c
@@ -390,7 +390,7 @@ static int vce_v3_0_sw_init(void *handle)
390 ring = &adev->vce.ring[i]; 390 ring = &adev->vce.ring[i];
391 sprintf(ring->name, "vce%d", i); 391 sprintf(ring->name, "vce%d", i);
392 r = amdgpu_ring_init(adev, ring, 512, VCE_CMD_NO_OP, 0xf, 392 r = amdgpu_ring_init(adev, ring, 512, VCE_CMD_NO_OP, 0xf,
393 &adev->vce.irq, 0, AMDGPU_RING_TYPE_VCE); 393 &adev->vce.irq, 0);
394 if (r) 394 if (r)
395 return r; 395 return r;
396 } 396 }
@@ -829,6 +829,7 @@ const struct amd_ip_funcs vce_v3_0_ip_funcs = {
829}; 829};
830 830
831static const struct amdgpu_ring_funcs vce_v3_0_ring_phys_funcs = { 831static const struct amdgpu_ring_funcs vce_v3_0_ring_phys_funcs = {
832 .type = AMDGPU_RING_TYPE_VCE,
832 .get_rptr = vce_v3_0_ring_get_rptr, 833 .get_rptr = vce_v3_0_ring_get_rptr,
833 .get_wptr = vce_v3_0_ring_get_wptr, 834 .get_wptr = vce_v3_0_ring_get_wptr,
834 .set_wptr = vce_v3_0_ring_set_wptr, 835 .set_wptr = vce_v3_0_ring_set_wptr,
@@ -848,6 +849,7 @@ static const struct amdgpu_ring_funcs vce_v3_0_ring_phys_funcs = {
848}; 849};
849 850
850static const struct amdgpu_ring_funcs vce_v3_0_ring_vm_funcs = { 851static const struct amdgpu_ring_funcs vce_v3_0_ring_vm_funcs = {
852 .type = AMDGPU_RING_TYPE_VCE,
851 .get_rptr = vce_v3_0_ring_get_rptr, 853 .get_rptr = vce_v3_0_ring_get_rptr,
852 .get_wptr = vce_v3_0_ring_get_wptr, 854 .get_wptr = vce_v3_0_ring_get_wptr,
853 .set_wptr = vce_v3_0_ring_set_wptr, 855 .set_wptr = vce_v3_0_ring_set_wptr,