aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTom St Denis <tom.stdenis@amd.com>2016-09-22 12:20:58 -0400
committerAlex Deucher <alexander.deucher@amd.com>2016-09-22 14:15:59 -0400
commitbeb86f29c9c7f2d04f9a42c4c61cc469c3689779 (patch)
treeb1ffbabcfcfe095fd8a3451081b93d267a50a0d6
parente37e4f057b47ff1e502799062f8ab30156e54bd3 (diff)
drm/amd/amdgpu: Clean up afmt allocation in DCEv6. (v2)
v2: minor build fix Signed-off-by: Tom St Denis <tom.stdenis@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/dce_v6_0.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c
index c866185fd091..eb8f96a61491 100644
--- a/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c
@@ -1422,21 +1422,29 @@ static void dce_v6_0_afmt_enable(struct drm_encoder *encoder, bool enable)
1422 enable ? "En" : "Dis", dig->afmt->offset, amdgpu_encoder->encoder_id); 1422 enable ? "En" : "Dis", dig->afmt->offset, amdgpu_encoder->encoder_id);
1423} 1423}
1424 1424
1425static void dce_v6_0_afmt_init(struct amdgpu_device *adev) 1425static int dce_v6_0_afmt_init(struct amdgpu_device *adev)
1426{ 1426{
1427 int i; 1427 int i, j;
1428 1428
1429 for (i = 0; i < adev->mode_info.num_dig; i++) 1429 for (i = 0; i < adev->mode_info.num_dig; i++)
1430 adev->mode_info.afmt[i] = NULL; 1430 adev->mode_info.afmt[i] = NULL;
1431 1431
1432 /* DCE8 has audio blocks tied to DIG encoders */ 1432 /* DCE6 has audio blocks tied to DIG encoders */
1433 for (i = 0; i < adev->mode_info.num_dig; i++) { 1433 for (i = 0; i < adev->mode_info.num_dig; i++) {
1434 adev->mode_info.afmt[i] = kzalloc(sizeof(struct amdgpu_afmt), GFP_KERNEL); 1434 adev->mode_info.afmt[i] = kzalloc(sizeof(struct amdgpu_afmt), GFP_KERNEL);
1435 if (adev->mode_info.afmt[i]) { 1435 if (adev->mode_info.afmt[i]) {
1436 adev->mode_info.afmt[i]->offset = dig_offsets[i]; 1436 adev->mode_info.afmt[i]->offset = dig_offsets[i];
1437 adev->mode_info.afmt[i]->id = i; 1437 adev->mode_info.afmt[i]->id = i;
1438 } else {
1439 for (j = 0; j < i; j++) {
1440 kfree(adev->mode_info.afmt[j]);
1441 adev->mode_info.afmt[j] = NULL;
1442 }
1443 DRM_ERROR("Out of memory allocating afmt table\n");
1444 return -ENOMEM;
1438 } 1445 }
1439 } 1446 }
1447 return 0;
1440} 1448}
1441 1449
1442static void dce_v6_0_afmt_fini(struct amdgpu_device *adev) 1450static void dce_v6_0_afmt_fini(struct amdgpu_device *adev)
@@ -2399,7 +2407,9 @@ static int dce_v6_0_sw_init(void *handle)
2399 return -EINVAL; 2407 return -EINVAL;
2400 2408
2401 /* setup afmt */ 2409 /* setup afmt */
2402 dce_v6_0_afmt_init(adev); 2410 r = dce_v6_0_afmt_init(adev);
2411 if (r)
2412 return r;
2403 2413
2404 r = dce_v6_0_audio_init(adev); 2414 r = dce_v6_0_audio_init(adev);
2405 if (r) 2415 if (r)