From 0a00bff777adc8747476f7c60b38fdaf3b691eec Mon Sep 17 00:00:00 2001 From: Mahadevan Date: Mon, 16 Jan 2023 15:25:36 +0530 Subject: [PATCH] disp: msm: sde: cancel delayed idle_notify_work beginning of every commit In some cases HAL sets CRTC_PROP_IDLE_TIMEOUT property to zero and idle_notify_work which is already scheduled will send notfication on timer expire. This will cause janks in subsequent commit. This change cancels the existing delayed idle_notify work and will get rescheduled after frame trigger if CRTC_PROP_IDLE_TIMEOUT property is non zero. Change-Id: I8b9ebce8282425f55838b94cfd345b5e733fa645 Signed-off-by: Mahadevan --- msm/sde/sde_crtc.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/msm/sde/sde_crtc.c b/msm/sde/sde_crtc.c index 132222fa68e9..9caa41328e80 100644 --- a/msm/sde/sde_crtc.c +++ b/msm/sde/sde_crtc.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved. + * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved. * Copyright (c) 2014-2021 The Linux Foundation. All rights reserved. * Copyright (C) 2013 Red Hat * Author: Rob Clark @@ -3323,6 +3323,12 @@ static void sde_crtc_atomic_begin(struct drm_crtc *crtc, _sde_crtc_blend_setup(crtc, old_state, true); _sde_crtc_dest_scaler_setup(crtc); + /* cancel the idle notify delayed work */ + if (sde_encoder_check_curr_mode(sde_crtc->mixers[0].encoder, + MSM_DISPLAY_VIDEO_MODE) && + kthread_cancel_delayed_work_sync(&sde_crtc->idle_notify_work)) + SDE_DEBUG("idle notify work cancelled\n"); + if (crtc->state->mode_changed || sde_kms->perf.catalog->uidle_cfg.dirty) sde_core_perf_crtc_update_uidle(crtc, true);