aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu
diff options
context:
space:
mode:
authorEmily Deng <Emily.Deng@amd.com>2018-08-13 02:45:34 -0400
committerAlex Deucher <alexander.deucher@amd.com>2018-08-13 18:20:10 -0400
commit33d5bd0705440c158c909da7538f05fc7a0ebcdf (patch)
treeb08a880ef1c6da0816b9317ba96580e6cea681ff /drivers/gpu
parent4d77c0f676e910fb1f1870738aa4bd168f253621 (diff)
drm/amdgpu/uvd: UVD entity initialization relys on ring initialization
Entity init should after ring init, as the entity's sched_rq's initialization is in ring init. SWDEV-161495 Signed-off-by: Emily Deng <Emily.Deng@amd.com> Reviewed-by: Christian König <christian.koenig@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c32
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.h1
-rw-r--r--drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c4
-rw-r--r--drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c4
-rw-r--r--drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c2
-rw-r--r--drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c5
6 files changed, 39 insertions, 9 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
index 632fa5980ff4..433a741d0762 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
@@ -122,8 +122,6 @@ static void amdgpu_uvd_idle_work_handler(struct work_struct *work);
122 122
123int amdgpu_uvd_sw_init(struct amdgpu_device *adev) 123int amdgpu_uvd_sw_init(struct amdgpu_device *adev)
124{ 124{
125 struct amdgpu_ring *ring;
126 struct drm_sched_rq *rq;
127 unsigned long bo_size; 125 unsigned long bo_size;
128 const char *fw_name; 126 const char *fw_name;
129 const struct common_firmware_header *hdr; 127 const struct common_firmware_header *hdr;
@@ -266,13 +264,6 @@ int amdgpu_uvd_sw_init(struct amdgpu_device *adev)
266 } 264 }
267 } 265 }
268 266
269 ring = &adev->uvd.inst[0].ring;
270 rq = &ring->sched.sched_rq[DRM_SCHED_PRIORITY_NORMAL];
271 r = drm_sched_entity_init(&adev->uvd.entity, &rq, 1, NULL);
272 if (r) {
273 DRM_ERROR("Failed setting up UVD kernel entity.\n");
274 return r;
275 }
276 for (i = 0; i < adev->uvd.max_handles; ++i) { 267 for (i = 0; i < adev->uvd.max_handles; ++i) {
277 atomic_set(&adev->uvd.handles[i], 0); 268 atomic_set(&adev->uvd.handles[i], 0);
278 adev->uvd.filp[i] = NULL; 269 adev->uvd.filp[i] = NULL;
@@ -327,6 +318,29 @@ int amdgpu_uvd_sw_fini(struct amdgpu_device *adev)
327 return 0; 318 return 0;
328} 319}
329 320
321/**
322 * amdgpu_uvd_entity_init - init entity
323 *
324 * @adev: amdgpu_device pointer
325 *
326 */
327int amdgpu_uvd_entity_init(struct amdgpu_device *adev)
328{
329 struct amdgpu_ring *ring;
330 struct drm_sched_rq *rq;
331 int r;
332
333 ring = &adev->uvd.inst[0].ring;
334 rq = &ring->sched.sched_rq[DRM_SCHED_PRIORITY_NORMAL];
335 r = drm_sched_entity_init(&adev->uvd.entity, &rq, 1, NULL);
336 if (r) {
337 DRM_ERROR("Failed setting up UVD kernel entity.\n");
338 return r;
339 }
340
341 return 0;
342}
343
330int amdgpu_uvd_suspend(struct amdgpu_device *adev) 344int amdgpu_uvd_suspend(struct amdgpu_device *adev)
331{ 345{
332 unsigned size; 346 unsigned size;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.h
index 33c5f806f925..a3ab1a41060f 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.h
@@ -69,6 +69,7 @@ struct amdgpu_uvd {
69 69
70int amdgpu_uvd_sw_init(struct amdgpu_device *adev); 70int amdgpu_uvd_sw_init(struct amdgpu_device *adev);
71int amdgpu_uvd_sw_fini(struct amdgpu_device *adev); 71int amdgpu_uvd_sw_fini(struct amdgpu_device *adev);
72int amdgpu_uvd_entity_init(struct amdgpu_device *adev);
72int amdgpu_uvd_suspend(struct amdgpu_device *adev); 73int amdgpu_uvd_suspend(struct amdgpu_device *adev);
73int amdgpu_uvd_resume(struct amdgpu_device *adev); 74int amdgpu_uvd_resume(struct amdgpu_device *adev);
74int amdgpu_uvd_get_create_msg(struct amdgpu_ring *ring, uint32_t handle, 75int amdgpu_uvd_get_create_msg(struct amdgpu_ring *ring, uint32_t handle,
diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c b/drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c
index 6fed3d7797a8..8a926d1df939 100644
--- a/drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c
+++ b/drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c
@@ -123,6 +123,10 @@ static int uvd_v4_2_sw_init(void *handle)
123 ring = &adev->uvd.inst->ring; 123 ring = &adev->uvd.inst->ring;
124 sprintf(ring->name, "uvd"); 124 sprintf(ring->name, "uvd");
125 r = amdgpu_ring_init(adev, ring, 512, &adev->uvd.inst->irq, 0); 125 r = amdgpu_ring_init(adev, ring, 512, &adev->uvd.inst->irq, 0);
126 if (r)
127 return r;
128
129 r = amdgpu_uvd_entity_init(adev);
126 130
127 return r; 131 return r;
128} 132}
diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c b/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c
index aeaa1ca46a99..50248059412e 100644
--- a/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c
@@ -120,6 +120,10 @@ static int uvd_v5_0_sw_init(void *handle)
120 ring = &adev->uvd.inst->ring; 120 ring = &adev->uvd.inst->ring;
121 sprintf(ring->name, "uvd"); 121 sprintf(ring->name, "uvd");
122 r = amdgpu_ring_init(adev, ring, 512, &adev->uvd.inst->irq, 0); 122 r = amdgpu_ring_init(adev, ring, 512, &adev->uvd.inst->irq, 0);
123 if (r)
124 return r;
125
126 r = amdgpu_uvd_entity_init(adev);
123 127
124 return r; 128 return r;
125} 129}
diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c b/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
index 598dbeaba636..6ae82cc2e55e 100644
--- a/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
@@ -440,6 +440,8 @@ static int uvd_v6_0_sw_init(void *handle)
440 } 440 }
441 } 441 }
442 442
443 r = amdgpu_uvd_entity_init(adev);
444
443 return r; 445 return r;
444} 446}
445 447
diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c b/drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c
index 5fab3560a71d..9b7f8469bc5c 100644
--- a/drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c
@@ -410,6 +410,7 @@ static int uvd_v7_0_early_init(void *handle)
410static int uvd_v7_0_sw_init(void *handle) 410static int uvd_v7_0_sw_init(void *handle)
411{ 411{
412 struct amdgpu_ring *ring; 412 struct amdgpu_ring *ring;
413
413 int i, j, r; 414 int i, j, r;
414 struct amdgpu_device *adev = (struct amdgpu_device *)handle; 415 struct amdgpu_device *adev = (struct amdgpu_device *)handle;
415 416
@@ -478,6 +479,10 @@ static int uvd_v7_0_sw_init(void *handle)
478 } 479 }
479 } 480 }
480 481
482 r = amdgpu_uvd_entity_init(adev);
483 if (r)
484 return r;
485
481 r = amdgpu_virt_alloc_mm_table(adev); 486 r = amdgpu_virt_alloc_mm_table(adev);
482 if (r) 487 if (r)
483 return r; 488 return r;