Commit 3d1967ec authored by Wenjing Liu's avatar Wenjing Liu Committed by Alex Deucher

drm/amd/display: take ODM slice count into account when deciding DSC slice

[why]
DSC slice must be divisible by ODM slice count.

[how]
If DSC slice count is not a multiple of ODM slice count, increase DSC
slice until it is. Otherwise fail to compute DSC configuration.
Reviewed-by: default avatarChaitanya Dhere <chaitanya.dhere@amd.com>
Acked-by: default avatarWayne Lin <wayne.lin@amd.com>
Signed-off-by: default avatarWenjing Liu <wenjing.liu@amd.com>
Tested-by: default avatarDaniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 6aa96aa8
......@@ -922,14 +922,30 @@ static bool setup_dsc_config(
else
is_dsc_possible = false;
}
// When we force 2:1 ODM, we can't have 1 slice to divide amongst 2 separate DSC instances
// need to enforce at minimum 2 horizontal slices
if (options->dsc_force_odm_hslice_override) {
num_slices_h = fit_num_slices_up(dsc_common_caps.slice_caps, 2);
if (num_slices_h == 0)
is_dsc_possible = false;
// When we force ODM, num dsc h slices must be divisible by num odm h slices
switch (options->dsc_force_odm_hslice_override) {
case 0:
case 1:
break;
case 2:
if (num_slices_h < 2)
num_slices_h = fit_num_slices_up(dsc_common_caps.slice_caps, 2);
break;
case 3:
if (dsc_common_caps.slice_caps.bits.NUM_SLICES_12)
num_slices_h = 12;
else
num_slices_h = 0;
break;
case 4:
if (num_slices_h < 4)
num_slices_h = fit_num_slices_up(dsc_common_caps.slice_caps, 4);
break;
default:
break;
}
if (num_slices_h == 0)
is_dsc_possible = false;
if (!is_dsc_possible)
goto done;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment