diff options
author | Tom St Denis <tom.stdenis@amd.com> | 2016-09-22 12:20:58 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2016-09-22 14:15:59 -0400 |
commit | beb86f29c9c7f2d04f9a42c4c61cc469c3689779 (patch) | |
tree | b1ffbabcfcfe095fd8a3451081b93d267a50a0d6 | |
parent | e37e4f057b47ff1e502799062f8ab30156e54bd3 (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.c | 18 |
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 | ||
1425 | static void dce_v6_0_afmt_init(struct amdgpu_device *adev) | 1425 | static 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 | ||
1442 | static void dce_v6_0_afmt_fini(struct amdgpu_device *adev) | 1450 | static 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) |