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

Commit 9c9159af authored by Abhijit Kulkarni's avatar Abhijit Kulkarni
Browse files

disp: msm: sde: disable border color on empty blendstage



This change disables the border color on the layer mixer,
based on the caller's request. This is required to totally
disconnect the layer mixer hardware when it is not
participating in blending the pixels. Having empty blendstage
but border color enabled, allows Layer mixer hw to produce
border pixels even when blend stage is empty.

Change-Id: I8e84aeedffbd42ad793a167a6cc5a3a653864c1a
Signed-off-by: default avatarAbhijit Kulkarni <kabhijit@codeaurora.org>
parent faf4a8b1
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -1686,10 +1686,11 @@ static void _sde_crtc_blend_setup(struct drm_crtc *crtc,
					sde_crtc->name, lm->idx - LM_0,
					ctl->idx - CTL_0);
			ctl->ops.setup_blendstage(ctl, mixer[i].hw_lm->idx,
					NULL);
					NULL, true);
		} else {
			ctl->ops.setup_blendstage(ctl, mixer[i].hw_lm->idx,
					&sde_crtc->stage_cfg[lm_layout]);
					&sde_crtc->stage_cfg[lm_layout],
					false);
		}
	}

+1 −1
Original line number Diff line number Diff line
@@ -4171,7 +4171,7 @@ int sde_encoder_helper_reset_mixers(struct sde_encoder_phys *phys_enc,
		/* only enable border color on LM */
		if (phys_enc->hw_ctl->ops.setup_blendstage)
			phys_enc->hw_ctl->ops.setup_blendstage(
				phys_enc->hw_ctl, hw_lm->idx, NULL);
				phys_enc->hw_ctl, hw_lm->idx, NULL, false);
	}

	if (!lm_valid) {
+5 −3
Original line number Diff line number Diff line
@@ -946,7 +946,8 @@ static void _sde_hw_ctl_get_mixer_cfg(struct sde_hw_ctl *ctx,
}

static void sde_hw_ctl_setup_blendstage(struct sde_hw_ctl *ctx,
	enum sde_lm lm, struct sde_hw_stage_cfg *stage_cfg)
	enum sde_lm lm, struct sde_hw_stage_cfg *stage_cfg,
	bool disable_border)
{
	struct sde_hw_blk_reg_map *c;
	struct sde_ctl_mixer_cfg cfg = { 0 };
@@ -964,8 +965,9 @@ static void sde_hw_ctl_setup_blendstage(struct sde_hw_ctl *ctx,
	if (stage_cfg)
		_sde_hw_ctl_get_mixer_cfg(ctx, stage_cfg, stages, &cfg);

	if ((!cfg.cfg && !cfg.ext && !cfg.ext2 && !cfg.ext3) ||
			(stage_cfg && !stage_cfg->stage[0][0]))
	if (!disable_border &&
			((!cfg.cfg && !cfg.ext && !cfg.ext2 && !cfg.ext3) ||
			(stage_cfg && !stage_cfg->stage[0][0])))
		cfg.cfg |= CTL_MIXER_BORDER_OUT;

	SDE_REG_WRITE(c, CTL_LAYER(lm), cfg.cfg);
+6 −4
Original line number Diff line number Diff line
@@ -426,9 +426,11 @@ struct sde_hw_ctl_ops {
	 * @ctx           : ctl path ctx pointer
	 * @lm            : layer mixer enumeration
	 * @cfg           : blend stage configuration
	 * @disable_border: if true disable border, else enable border out
	 */
	void (*setup_blendstage)(struct sde_hw_ctl *ctx,
		enum sde_lm lm, struct sde_hw_stage_cfg *cfg);
		enum sde_lm lm, struct sde_hw_stage_cfg *cfg,
		bool disable_border);

	/**
	 * Get all the sspp staged on a layer mixer