diff --git a/msm/sde/sde_crtc.c b/msm/sde/sde_crtc.c index 450a3407..275d1690 100644 --- a/msm/sde/sde_crtc.c +++ b/msm/sde/sde_crtc.c @@ -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); } } diff --git a/msm/sde/sde_encoder.c b/msm/sde/sde_encoder.c index c9b0a340..4364a6f2 100644 --- a/msm/sde/sde_encoder.c +++ b/msm/sde/sde_encoder.c @@ -4173,7 +4173,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) { diff --git a/msm/sde/sde_hw_ctl.c b/msm/sde/sde_hw_ctl.c index 73e70f62..4558a5d6 100644 --- a/msm/sde/sde_hw_ctl.c +++ b/msm/sde/sde_hw_ctl.c @@ -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); diff --git a/msm/sde/sde_hw_ctl.h b/msm/sde/sde_hw_ctl.h index 78522cde..1ea29dad 100644 --- a/msm/sde/sde_hw_ctl.h +++ b/msm/sde/sde_hw_ctl.h @@ -423,12 +423,14 @@ struct sde_hw_ctl_ops { /** * Configure layer mixer to pipe configuration - * @ctx : ctl path ctx pointer - * @lm : layer mixer enumeration - * @cfg : blend stage configuration + * @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