Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9f2d8de0 authored by Jayaprakash's avatar Jayaprakash Committed by Gerrit - the friendly Code Review server
Browse files

drm/msm/sde: add support for overlap pixels width



Add changes required for configuring overlap
pixels width during pingpong split usecase.

Change-Id: Ia8982f7c76276c1f3474d46a594a32f757ea3b10
Signed-off-by: default avatarJayaprakash <jmadiset@codeaurora.org>
parent d696db77
Loading
Loading
Loading
Loading
+13 −3
Original line number Diff line number Diff line
@@ -862,12 +862,16 @@ void sde_encoder_helper_split_config(
	struct sde_hw_mdp *hw_mdptop;
	enum sde_rm_topology_name topology;
	struct msm_display_info *disp_info;
	struct msm_mode_info mode_info;
	struct drm_encoder *drm_enc;
	int ret;

	if (!phys_enc || !phys_enc->hw_mdptop || !phys_enc->parent) {
		SDE_ERROR("invalid arg(s), encoder %d\n", phys_enc != 0);
		return;
	}

	drm_enc = phys_enc->parent;
	sde_enc = to_sde_encoder_virt(phys_enc->parent);
	hw_mdptop = phys_enc->hw_mdptop;
	disp_info = &sde_enc->disp_info;
@@ -902,11 +906,17 @@ void sde_encoder_helper_split_config(
			phys_enc->ops.needs_single_flush(phys_enc))
		cfg->split_flush_en = true;

	cfg->pp_split_slave = INTF_MAX;
	topology = sde_connector_get_topology_name(phys_enc->connector);
	if (topology == SDE_RM_TOPOLOGY_PPSPLIT)
	if (topology == SDE_RM_TOPOLOGY_PPSPLIT) {
		cfg->pp_split_slave = cfg->intf;
	else
		cfg->pp_split_slave = INTF_MAX;
		ret = _sde_encoder_get_mode_info(drm_enc, &mode_info);
		if (ret) {
			SDE_ERROR_ENC(sde_enc, "failed to get mode info\n");
			return;
		}
		cfg->overlap_pixel_width = mode_info.overlap_pixels;
	}

	if (topology == SDE_RM_TOPOLOGY_PPSPLIT
			&& phys_enc->split_role == ENC_ROLE_SLAVE)
+2 −0
Original line number Diff line number Diff line
@@ -134,6 +134,8 @@ static void sde_hw_setup_pp_split(struct sde_hw_mdp *mdp,
	} else if (cfg->en && cfg->pp_split_slave != INTF_MAX) {
		ppb_config |= (cfg->pp_split_slave - INTF_0 + 1) << 20;
		ppb_config |= BIT(16); /* split enable */
		/* overlap pixel width */
		ppb_config |= ((cfg->overlap_pixel_width & 0x1F) << 24);
		ppb_control = BIT(5); /* horz split*/
	}

+2 −0
Original line number Diff line number Diff line
@@ -43,6 +43,7 @@ struct traffic_shaper_cfg {
 * @intf      : Interface id for main control path
 * @pp_split_slave: Slave interface for ping pong split, INTF_MAX to disable
 * @pp_split_idx:   Ping pong index for ping pong split
 * @overlap_pixel_width : Number of overlap pixels in the split mode
 * @split_flush_en: Allows both the paths to be flushed when master path is
 *              flushed
 * @split_link_en:  Check if split link is enabled
@@ -54,6 +55,7 @@ struct split_pipe_cfg {
	enum sde_intf intf;
	enum sde_intf pp_split_slave;
	u32 pp_split_index;
	u32 overlap_pixel_width;
	bool split_flush_en;
	bool split_link_en;
	bool pp_slave_intf;