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

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
Loading
Loading
Loading
Loading
+23 −7
Original line number Diff line number Diff line
@@ -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) {
	// 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;