Commit 5011f291 authored by Ankit Nautiyal's avatar Ankit Nautiyal Committed by Uma Shankar
Browse files

drm/i915/dp: Check if DSC supports the given output_format



Go with DSC only if the given output_format is supported.

v2: Use drm helper to get DSC format support for sink.

v3: remove drm_dp_dsc_compute_bpp.

Cc: Uma Shankar <uma.shankar@intel.com>
Signed-off-by: default avatarAnkit Nautiyal <ankit.k.nautiyal@intel.com>
Reviewed-by: default avatarUma Shankar <uma.shankar@intel.com>
Signed-off-by: default avatarUma Shankar <uma.shankar@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230309062855.393087-3-suraj.kandpal@intel.com
parent a389789c
Loading
Loading
Loading
Loading
+28 −0
Original line number Diff line number Diff line
@@ -1515,6 +1515,31 @@ static int intel_dp_dsc_compute_params(struct intel_encoder *encoder,
	return drm_dsc_compute_rc_parameters(vdsc_cfg);
}

static bool intel_dp_dsc_supports_format(struct intel_dp *intel_dp,
					 enum intel_output_format output_format)
{
	u8 sink_dsc_format;

	switch (output_format) {
	case INTEL_OUTPUT_FORMAT_RGB:
		sink_dsc_format = DP_DSC_RGB;
		break;
	case INTEL_OUTPUT_FORMAT_YCBCR444:
		sink_dsc_format = DP_DSC_YCbCr444;
		break;
	case INTEL_OUTPUT_FORMAT_YCBCR420:
		if (min(intel_dp_source_dsc_version_minor(intel_dp),
			intel_dp_sink_dsc_version_minor(intel_dp)) < 2)
			return false;
		sink_dsc_format = DP_DSC_YCbCr420_Native;
		break;
	default:
		return false;
	}

	return drm_dp_dsc_sink_supports_format(intel_dp->dsc_dpcd, sink_dsc_format);
}

int intel_dp_dsc_compute_config(struct intel_dp *intel_dp,
				struct intel_crtc_state *pipe_config,
				struct drm_connector_state *conn_state,
@@ -1535,6 +1560,9 @@ int intel_dp_dsc_compute_config(struct intel_dp *intel_dp,
	if (!intel_dp_supports_dsc(intel_dp, pipe_config))
		return -EINVAL;

	if (!intel_dp_dsc_supports_format(intel_dp, pipe_config->output_format))
		return -EINVAL;

	if (compute_pipe_bpp)
		pipe_bpp = intel_dp_dsc_compute_bpp(intel_dp, conn_state->max_requested_bpc);
	else