Browse Source

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 <[email protected]>
Veera Sundaram Sankaran 3 years ago
parent
commit
eb45d6c173
4 changed files with 12 additions and 5 deletions
  1. 1 1
      msm/sde/sde_encoder.c
  2. 2 1
      msm/sde/sde_encoder_phys_wb.c
  3. 6 2
      msm/sde/sde_hw_dnsc_blur.c
  4. 3 1
      msm/sde/sde_hw_dnsc_blur.h

+ 1 - 1
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);

+ 2 - 1
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,

+ 6 - 2
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);
 }
 

+ 3 - 1
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);
 };
 
 /**