Browse Source

msm: drm: sde: Update SIXZONE to avoid READ_MODIFY during DMA broadcast

The LUTDMA broadcast programming path for the SIXZONE feature incorrectly
has a unprotected READ_MODIFY operation in the broadcast path. This will
result in all SIXZONE LUTDMA feature broadcasts to fail.

Update the SIXZONE LUTDMA logic to ensure all READ_MODIFY operations
happen out of broadcast mode.

Change-Id: If80040872e299f9bdcf16dec3285ac49a9fdc2e1
Signed-off-by: Christopher Braga <[email protected]>
Christopher Braga 4 năm trước cách đây
mục cha
commit
43b6fb6b24
1 tập tin đã thay đổi với 10 bổ sung10 xóa
  1. 10 10
      msm/sde/sde_hw_reg_dma_v1_color_proc.c

+ 10 - 10
msm/sde/sde_hw_reg_dma_v1_color_proc.c

@@ -1691,16 +1691,6 @@ void reg_dmav1_setup_dspp_sixzonev17(struct sde_hw_dspp *ctx, void *cfg)
 
 	local_hold = ((sixzone->sat_hold & REG_MASK(2)) << 12);
 	local_hold |= ((sixzone->val_hold & REG_MASK(2)) << 14);
-	REG_DMA_SETUP_OPS(dma_write_cfg,
-		ctx->cap->sblk->hsic.base + PA_PWL_HOLD_OFF, &local_hold,
-		sizeof(local_hold), REG_SINGLE_MODIFY, 0, 0,
-		REG_DMA_PA_PWL_HOLD_SZONE_MASK);
-	rc = dma_ops->setup_payload(&dma_write_cfg);
-	if (rc) {
-		DRM_ERROR("setting local_hold failed ret %d\n", rc);
-		return;
-	}
-
 	if (sixzone->flags & SIXZONE_HUE_ENABLE)
 		local_opcode |= PA_SIXZONE_HUE_EN;
 	if (sixzone->flags & SIXZONE_SAT_ENABLE)
@@ -1728,6 +1718,16 @@ void reg_dmav1_setup_dspp_sixzonev17(struct sde_hw_dspp *ctx, void *cfg)
 			return;
 		}
 
+		REG_DMA_SETUP_OPS(dma_write_cfg,
+			ctx->cap->sblk->hsic.base + PA_PWL_HOLD_OFF, &local_hold,
+			sizeof(local_hold), REG_SINGLE_MODIFY, 0, 0,
+			REG_DMA_PA_PWL_HOLD_SZONE_MASK);
+		rc = dma_ops->setup_payload(&dma_write_cfg);
+		if (rc) {
+			DRM_ERROR("setting local_hold failed ret %d\n", rc);
+			return;
+		}
+
 		REG_DMA_SETUP_OPS(dma_write_cfg,
 			ctx->cap->sblk->hsic.base, &local_opcode,
 			sizeof(local_opcode), REG_SINGLE_MODIFY, 0, 0,