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 <quic_aprasad@quicinc.com>
Cette révision appartient à :
Anjaneya Prasad Musunuri
2024-03-13 08:55:00 +05:30
Parent a11f7d8f87
révision cdbaf90cd2

Voir le fichier

@@ -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));