aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
diff options
context:
space:
mode:
authorChristian König <christian.koenig@amd.com>2018-07-16 09:19:20 -0400
committerAlex Deucher <alexander.deucher@amd.com>2018-08-27 12:10:47 -0400
commit869a53d4d7d7976d039b9389aa90b6f3d29ed234 (patch)
treed455522733c12e06ff0cac9965962f047e7c68bf /drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
parent72a4c072ca9f2640ea303c399bd3224b69a543d9 (diff)
drm/amdgpu: remove the queue manager
Not needed any more since that is now done by the scheduler. Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Chunming Zhou <david1.zhou@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c67
1 files changed, 61 insertions, 6 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
index a078e68e0319..e5acc72b05d2 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
@@ -121,10 +121,6 @@ static int amdgpu_ctx_init(struct amdgpu_device *adev,
121 goto failed; 121 goto failed;
122 } 122 }
123 123
124 r = amdgpu_queue_mgr_init(adev, &ctx->queue_mgr);
125 if (r)
126 goto failed;
127
128 return 0; 124 return 0;
129 125
130failed: 126failed:
@@ -150,13 +146,72 @@ static void amdgpu_ctx_fini(struct kref *ref)
150 kfree(ctx->fences); 146 kfree(ctx->fences);
151 ctx->fences = NULL; 147 ctx->fences = NULL;
152 148
153 amdgpu_queue_mgr_fini(adev, &ctx->queue_mgr);
154
155 mutex_destroy(&ctx->lock); 149 mutex_destroy(&ctx->lock);
156 150
157 kfree(ctx); 151 kfree(ctx);
158} 152}
159 153
154int amdgpu_ctx_get_ring(struct amdgpu_ctx *ctx,
155 u32 hw_ip, u32 instance, u32 ring,
156 struct amdgpu_ring **out_ring)
157{
158 struct amdgpu_device *adev = ctx->adev;
159 unsigned num_rings = 0;
160
161 /* Right now all IPs have only one instance - multiple rings. */
162 if (instance != 0) {
163 DRM_DEBUG("invalid ip instance: %d\n", instance);
164 return -EINVAL;
165 }
166
167 switch (hw_ip) {
168 case AMDGPU_HW_IP_GFX:
169 *out_ring = &adev->gfx.gfx_ring[ring];
170 num_rings = adev->gfx.num_gfx_rings;
171 break;
172 case AMDGPU_HW_IP_COMPUTE:
173 *out_ring = &adev->gfx.compute_ring[ring];
174 num_rings = adev->gfx.num_compute_rings;
175 break;
176 case AMDGPU_HW_IP_DMA:
177 *out_ring = &adev->sdma.instance[ring].ring;
178 num_rings = adev->sdma.num_instances;
179 break;
180 case AMDGPU_HW_IP_UVD:
181 *out_ring = &adev->uvd.inst[0].ring;
182 num_rings = adev->uvd.num_uvd_inst;
183 break;
184 case AMDGPU_HW_IP_VCE:
185 *out_ring = &adev->vce.ring[ring];
186 num_rings = adev->vce.num_rings;
187 break;
188 case AMDGPU_HW_IP_UVD_ENC:
189 *out_ring = &adev->uvd.inst[0].ring_enc[ring];
190 num_rings = adev->uvd.num_enc_rings;
191 break;
192 case AMDGPU_HW_IP_VCN_DEC:
193 *out_ring = &adev->vcn.ring_dec;
194 num_rings = 1;
195 break;
196 case AMDGPU_HW_IP_VCN_ENC:
197 *out_ring = &adev->vcn.ring_enc[ring];
198 num_rings = adev->vcn.num_enc_rings;
199 break;
200 case AMDGPU_HW_IP_VCN_JPEG:
201 *out_ring = &adev->vcn.ring_jpeg;
202 num_rings = 1;
203 break;
204 default:
205 DRM_ERROR("unknown HW IP type: %d\n", hw_ip);
206 return -EINVAL;
207 }
208
209 if (ring > num_rings)
210 return -EINVAL;
211
212 return 0;
213}
214
160static int amdgpu_ctx_alloc(struct amdgpu_device *adev, 215static int amdgpu_ctx_alloc(struct amdgpu_device *adev,
161 struct amdgpu_fpriv *fpriv, 216 struct amdgpu_fpriv *fpriv,
162 struct drm_file *filp, 217 struct drm_file *filp,