From eb45d6c17330ed1d35aa890f3789cdb6c47e185b Mon Sep 17 00:00:00 2001 From: Veera Sundaram Sankaran Date: Tue, 18 Jan 2022 16:35:25 -0800 Subject: [PATCH] disp: msm: sde: fix dnsc_blur mux setting for cwb Fix the dnsc_blur block pingpong mux setting for concurrent writeback case. Change-Id: I1a79602f05471ce2bc143258ffe87e46772f3d06 Signed-off-by: Veera Sundaram Sankaran --- msm/sde/sde_encoder.c | 2 +- msm/sde/sde_encoder_phys_wb.c | 3 ++- msm/sde/sde_hw_dnsc_blur.c | 8 ++++++-- msm/sde/sde_hw_dnsc_blur.h | 4 +++- 4 files changed, 12 insertions(+), 5 deletions(-) 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); }; /**