diff options
author | Emily Deng <Emily.Deng@amd.com> | 2018-08-13 02:45:34 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2018-08-13 18:20:10 -0400 |
commit | 33d5bd0705440c158c909da7538f05fc7a0ebcdf (patch) | |
tree | b08a880ef1c6da0816b9317ba96580e6cea681ff /drivers/gpu/drm | |
parent | 4d77c0f676e910fb1f1870738aa4bd168f253621 (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/drm')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c | 32 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.h | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c | 4 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c | 4 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c | 5 |
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 | ||
123 | int amdgpu_uvd_sw_init(struct amdgpu_device *adev) | 123 | int 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 | */ | ||
327 | int 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 | |||
330 | int amdgpu_uvd_suspend(struct amdgpu_device *adev) | 344 | int 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 | ||
70 | int amdgpu_uvd_sw_init(struct amdgpu_device *adev); | 70 | int amdgpu_uvd_sw_init(struct amdgpu_device *adev); |
71 | int amdgpu_uvd_sw_fini(struct amdgpu_device *adev); | 71 | int amdgpu_uvd_sw_fini(struct amdgpu_device *adev); |
72 | int amdgpu_uvd_entity_init(struct amdgpu_device *adev); | ||
72 | int amdgpu_uvd_suspend(struct amdgpu_device *adev); | 73 | int amdgpu_uvd_suspend(struct amdgpu_device *adev); |
73 | int amdgpu_uvd_resume(struct amdgpu_device *adev); | 74 | int amdgpu_uvd_resume(struct amdgpu_device *adev); |
74 | int amdgpu_uvd_get_create_msg(struct amdgpu_ring *ring, uint32_t handle, | 75 | int 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) | |||
410 | static int uvd_v7_0_sw_init(void *handle) | 410 | static 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; |