From cdbaf90cd256b9c9b92ec39490e3a69d539648df Mon Sep 17 00:00:00 2001 From: Anjaneya Prasad Musunuri Date: Wed, 13 Mar 2024 08:55:00 +0530 Subject: [PATCH] disp: msm: sde: set vlut only after ltm init This changes add checks to make sure LTM init is set before setting VLUT. Change-Id: Ifeeeb1ff176b2c91a2c5f43928fb9621b69585f0 Signed-off-by: Anjaneya Prasad Musunuri --- msm/sde/sde_hw_reg_dma_v1_color_proc.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/msm/sde/sde_hw_reg_dma_v1_color_proc.c b/msm/sde/sde_hw_reg_dma_v1_color_proc.c index d2e4de2609..45e80bc051 100644 --- a/msm/sde/sde_hw_reg_dma_v1_color_proc.c +++ b/msm/sde/sde_hw_reg_dma_v1_color_proc.c @@ -134,6 +134,7 @@ enum ltm_vlut_ops_bitmask { ltm_dither = BIT(1), ltm_roi = BIT(2), ltm_vlut = BIT(3), + ltm_init = BIT(4), ltm_ops_max = BIT(31), }; @@ -4085,6 +4086,7 @@ static void ltm_initv1_disable(struct sde_hw_dspp *ctx, void *cfg, ltm_vlut_ops_mask[dspp_idx[i]] &= ~ltm_dither; ltm_vlut_ops_mask[dspp_idx[i]] &= ~ltm_unsharp; + ltm_vlut_ops_mask[dspp_idx[i]] &= ~ltm_init; REG_DMA_SETUP_OPS(dma_write_cfg, 0x04, &opmode, sizeof(opmode), REG_SINGLE_MODIFY, 0, 0, REG_DMA_LTM_INIT_DISABLE_OP_MASK); @@ -4215,6 +4217,8 @@ void reg_dmav1_setup_ltm_initv1(struct sde_hw_dspp *ctx, void *cfg) ltm_vlut_ops_mask[dspp_idx[i]] &= ~ltm_unsharp; } + ltm_vlut_ops_mask[dspp_idx[i]] |= ltm_init; + /* broadcast feature is not supported with REG_SINGLE_MODIFY */ REG_DMA_SETUP_OPS(dma_write_cfg, 0x04, &opmode, sizeof(opmode), REG_SINGLE_MODIFY, 0, 0, @@ -4436,6 +4440,13 @@ static int reg_dmav1_setup_ltm_vlutv1_common(struct sde_hw_dspp *ctx, void *cfg, return -EINVAL; } + /* vlut is set before ltm init */ + if (!(ltm_vlut_ops_mask[dspp_idx[0]] & ltm_init)) { + DRM_DEBUG_DRIVER("vlut is set before ltm init\n"); + SDE_EVT32(ctx->idx, 0x2222); + return -EINVAL; + } + if (hw_cfg->len != sizeof(struct drm_msm_ltm_data)) { DRM_ERROR("invalid size of payload len %d exp %zd\n", hw_cfg->len, sizeof(struct drm_msm_ltm_data));