From 728f9d65ca806c790cf0b0265cfe4b4a99bf1dfb Mon Sep 17 00:00:00 2001 From: Veera Sundaram Sankaran Date: Tue, 9 Aug 2022 22:58:36 -0700 Subject: [PATCH] disp: msm: sde: update hw configs on dnsc_blur disable Currently, dnsc_blur hardware block is not updated when the connector dnsc_blur property is set to NULL or when dnsc_blur_count is 0. Update the dnsc_blur hw block configs to avoid stale configs affecting the current frame. Signed-off-by: Veera Sundaram Sankaran Change-Id: If64dc5548b03edba401fb7f40edf3419dbe57ca3 --- msm/sde/sde_encoder_phys_wb.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/msm/sde/sde_encoder_phys_wb.c b/msm/sde/sde_encoder_phys_wb.c index 1fa6494a..63ec302b 100644 --- a/msm/sde/sde_encoder_phys_wb.c +++ b/msm/sde/sde_encoder_phys_wb.c @@ -1426,23 +1426,32 @@ static void _sde_encoder_phys_wb_setup_dnsc_blur(struct sde_encoder_phys *phys_e int i; bool enable; - if (!sde_kms->catalog->dnsc_blur_count || !hw_dnsc_blur || !hw_pp - || !hw_dnsc_blur->ops.setup_dnsc_blur) + if (!sde_kms->catalog->dnsc_blur_count || !hw_pp) return; sde_conn = to_sde_connector(wb_dev->connector); sde_conn_state = to_sde_connector_state(wb_dev->connector->state); - if (sde_conn_state->dnsc_blur_count && !hw_dnsc_blur) { + if (sde_conn_state->dnsc_blur_count + && (!hw_dnsc_blur || !hw_dnsc_blur->ops.setup_dnsc_blur)) { SDE_ERROR("[enc:%d wb:%d] invalid config - dnsc_blur block not reserved\n", DRMID(phys_enc->parent), WBID(wb_enc)); - sde_kms->catalog->dnsc_blur_count = 0; return; } /* swap between 0 & 1 lut idx on each config change for gaussian lut */ sde_conn_state->dnsc_blur_lut = 1 - sde_conn_state->dnsc_blur_lut; + /* + * disable dnsc_blur case - safe to update the opmode as dynamic switching of + * dnsc_blur hw block between WBs are not supported currently. + */ + if (hw_dnsc_blur && !sde_conn_state->dnsc_blur_count) { + hw_dnsc_blur->ops.setup_dnsc_blur(hw_dnsc_blur, NULL, 0); + SDE_EVT32(DRMID(phys_enc->parent), WBID(wb_enc), SDE_EVTLOG_FUNC_CASE1); + return; + } + for (i = 0; i < sde_conn_state->dnsc_blur_count; i++) { cfg = &sde_conn_state->dnsc_blur_cfg[i];