diff --git a/msm/sde/sde_encoder.c b/msm/sde/sde_encoder.c index b29561c024..5adaec7c07 100644 --- a/msm/sde/sde_encoder.c +++ b/msm/sde/sde_encoder.c @@ -3239,7 +3239,7 @@ void sde_encoder_helper_phys_disable(struct sde_encoder_phys *phys_enc, if (phys_enc->hw_dnsc_blur && phys_enc->hw_dnsc_blur->ops.bind_pingpong_blk && phys_enc->hw_pp) { phys_enc->hw_dnsc_blur->ops.bind_pingpong_blk(phys_enc->hw_dnsc_blur, - false, phys_enc->hw_pp->idx); + false, phys_enc->hw_pp->idx, phys_enc->in_clone_mode); if (ctl->ops.update_dnsc_blur_bitmask) ctl->ops.update_dnsc_blur_bitmask(ctl, phys_enc->hw_dnsc_blur->idx, true); diff --git a/msm/sde/sde_encoder_phys_wb.c b/msm/sde/sde_encoder_phys_wb.c index 9375a25ff4..7de457259a 100644 --- a/msm/sde/sde_encoder_phys_wb.c +++ b/msm/sde/sde_encoder_phys_wb.c @@ -1344,7 +1344,8 @@ static void _sde_encoder_phys_wb_setup_dnsc_blur(struct sde_encoder_phys *phys_e hw_dnsc_blur->ops.setup_dither(hw_dnsc_blur, cfg); if (hw_dnsc_blur->ops.bind_pingpong_blk) - hw_dnsc_blur->ops.bind_pingpong_blk(hw_dnsc_blur, enable, hw_pp->idx); + hw_dnsc_blur->ops.bind_pingpong_blk(hw_dnsc_blur, enable, hw_pp->idx, + phys_enc->in_clone_mode); SDE_EVT32(DRMID(phys_enc->parent), WBID(wb_enc), sde_conn_state->dnsc_blur_count, cfg->flags, cfg->flags_h, cfg->flags_v, cfg->src_width, diff --git a/msm/sde/sde_hw_dnsc_blur.c b/msm/sde/sde_hw_dnsc_blur.c index 47248504e1..50a78f50a0 100644 --- a/msm/sde/sde_hw_dnsc_blur.c +++ b/msm/sde/sde_hw_dnsc_blur.c @@ -1,5 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-only /* + * Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved. * Copyright (c) 2021, The Linux Foundation. All rights reserved. */ @@ -207,7 +208,7 @@ static void _sde_hw_dnsc_blur_dither_setup(struct sde_hw_dnsc_blur *hw_dnsc_blur } static void _sde_hw_dnsc_blur_bind_pingpong_blk(struct sde_hw_dnsc_blur *hw_dnsc_blur, - bool enable, const enum sde_pingpong pp) + bool enable, const enum sde_pingpong pp, bool cwb) { struct sde_hw_blk_reg_map *hw = &hw_dnsc_blur->hw; int mux_cfg; @@ -215,7 +216,10 @@ static void _sde_hw_dnsc_blur_bind_pingpong_blk(struct sde_hw_dnsc_blur *hw_dnsc if (enable && (pp < PINGPONG_0 || pp >= PINGPONG_MAX)) return; - mux_cfg = enable ? (pp - PINGPONG_0) & 0x7 : 0xF; + if (enable) + mux_cfg = cwb ? 0xD : (pp - PINGPONG_0) & 0x7; + else + mux_cfg = 0xF; SDE_REG_WRITE(hw, DNSC_BLUR_MUX, mux_cfg); } diff --git a/msm/sde/sde_hw_dnsc_blur.h b/msm/sde/sde_hw_dnsc_blur.h index 4e700650ea..30ad92a12f 100644 --- a/msm/sde/sde_hw_dnsc_blur.h +++ b/msm/sde/sde_hw_dnsc_blur.h @@ -1,5 +1,6 @@ /* SPDX-License-Identifier: GPL-2.0-only */ /* + * Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved. * Copyright (c) 2021, The Linux Foundation. All rights reserved. */ @@ -42,9 +43,10 @@ struct sde_hw_dnsc_blur_ops { * @hw_dnsc_blur: Pointer to dnsc_blur context * @enable: Boolean to indicate enable/disable of the binding * @pp: Pingpong block idx for binding + * @cwb: Flag to indicate concurrent writeback */ void (*bind_pingpong_blk)(struct sde_hw_dnsc_blur *hw_dnsc_blur, - bool enable, const enum sde_pingpong pp); + bool enable, const enum sde_pingpong pp, bool cwb); }; /**