Commit a64d9afc authored by Ankit Nautiyal's avatar Ankit Nautiyal
Browse files

drm/i915/display: Prepare for dsc 3 stream splitter



At the moment dsc_split represents whether the dsc splitter is used
or not. With 3 DSC engines, the splitter can split into two streams
or three streams.

Instead of representing the splitter's state, it is more effective to
represent the number of DSC streams per pipe.

Replace the `dsc.dsc_split` member with `dsc.num_streams` to indicate the
number of DSC streams used per pipe. This change will implicitly
convey the splitter's operation mode.

v2: Avoid new enum for dsc split. (Suraj)
v3:
-Replace dsc_split with num_stream. (Suraj)
-Avoid extra parentheses. (Jani)
v4: Set num_streams to 1, if VDSC_JOINER not set while readout.

Signed-off-by: default avatarAnkit Nautiyal <ankit.k.nautiyal@intel.com>
Reviewed-by: default avatarSuraj Kandpal <suraj.kandpal@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20241030041036.1238006-3-ankit.k.nautiyal@intel.com
parent e1faaca9
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -1602,7 +1602,9 @@ static int gen11_dsi_dsc_compute_config(struct intel_encoder *encoder,

	/* FIXME: split only when necessary */
	if (crtc_state->dsc.slice_count > 1)
		crtc_state->dsc.dsc_split = true;
		crtc_state->dsc.num_streams = 2;
	else
		crtc_state->dsc.num_streams = 1;

	/* FIXME: initialize from VBT */
	vdsc_cfg->rc_model_size = DSC_RC_MODEL_SIZE_CONST;
+1 −1
Original line number Diff line number Diff line
@@ -5743,7 +5743,7 @@ intel_pipe_config_compare(const struct intel_crtc_state *current_config,
	PIPE_CONF_CHECK_I(dsc.config.nsl_bpg_offset);

	PIPE_CONF_CHECK_BOOL(dsc.compression_enable);
	PIPE_CONF_CHECK_BOOL(dsc.dsc_split);
	PIPE_CONF_CHECK_I(dsc.num_streams);
	PIPE_CONF_CHECK_I(dsc.compressed_bpp_x16);

	PIPE_CONF_CHECK_BOOL(splitter.enable);
+1 −1
Original line number Diff line number Diff line
@@ -1235,7 +1235,7 @@ struct intel_crtc_state {
	/* Display Stream compression state */
	struct {
		bool compression_enable;
		bool dsc_split;
		int num_streams;
		/* Compressed Bpp in U6.4 format (first 4 bits for fractional part) */
		u16 compressed_bpp_x16;
		u8 slice_count;
+3 −1
Original line number Diff line number Diff line
@@ -2413,7 +2413,9 @@ int intel_dp_dsc_compute_config(struct intel_dp *intel_dp,
	 * then we need to use 2 VDSC instances.
	 */
	if (pipe_config->joiner_pipes || pipe_config->dsc.slice_count > 1)
		pipe_config->dsc.dsc_split = true;
		pipe_config->dsc.num_streams = 2;
	else
		pipe_config->dsc.num_streams = 1;

	ret = intel_dp_dsc_compute_params(connector, pipe_config);
	if (ret < 0) {
+7 −5
Original line number Diff line number Diff line
@@ -379,7 +379,7 @@ intel_dsc_power_domain(struct intel_crtc *crtc, enum transcoder cpu_transcoder)

static int intel_dsc_get_vdsc_per_pipe(const struct intel_crtc_state *crtc_state)
{
	return crtc_state->dsc.dsc_split ? 2 : 1;
	return crtc_state->dsc.num_streams;
}

int intel_dsc_get_num_vdsc_instances(const struct intel_crtc_state *crtc_state)
@@ -976,8 +976,10 @@ void intel_dsc_get_config(struct intel_crtc_state *crtc_state)
	if (!crtc_state->dsc.compression_enable)
		goto out;

	crtc_state->dsc.dsc_split = (dss_ctl2 & RIGHT_BRANCH_VDSC_ENABLE) &&
		(dss_ctl1 & JOINER_ENABLE);
	if (dss_ctl1 & JOINER_ENABLE && dss_ctl2 & RIGHT_BRANCH_VDSC_ENABLE)
		crtc_state->dsc.num_streams = 2;
	else
		crtc_state->dsc.num_streams = 1;

	intel_dsc_get_pps_config(crtc_state);
out:
@@ -988,10 +990,10 @@ static void intel_vdsc_dump_state(struct drm_printer *p, int indent,
				  const struct intel_crtc_state *crtc_state)
{
	drm_printf_indent(p, indent,
			  "dsc-dss: compressed-bpp:" FXP_Q4_FMT ", slice-count: %d, split: %s\n",
			  "dsc-dss: compressed-bpp:" FXP_Q4_FMT ", slice-count: %d, num_streams: %d\n",
			  FXP_Q4_ARGS(crtc_state->dsc.compressed_bpp_x16),
			  crtc_state->dsc.slice_count,
			  str_yes_no(crtc_state->dsc.dsc_split));
			  crtc_state->dsc.num_streams);
}

void intel_vdsc_state_dump(struct drm_printer *p, int indent,