disp: msm: sde: disable autorefresh on encoder disable

Disable the autorefresh during encoder disable to avoid any
pending frame transfers while disabling. Additionally, handle
frame_done for new autorefresh frames to signal the fences and
proper accounting of pending_kickoff counter.

Change-Id: I8af114972b19ccdf0edab6b4c454ee90b4e8d8cf
Signed-off-by: Veera Sundaram Sankaran <quic_veeras@quicinc.com>
This commit is contained in:
Veera Sundaram Sankaran
2022-03-24 15:01:29 -07:00
parent 6e050f641a
commit e50d08286f
3 changed files with 29 additions and 13 deletions

View File

@@ -3177,9 +3177,18 @@ static void sde_encoder_virt_disable(struct drm_encoder *drm_enc)
SDE_EVT32(DRMID(drm_enc));
/* wait for idle */
if (!sde_encoder_in_clone_mode(drm_enc))
if (!sde_encoder_in_clone_mode(drm_enc)) {
/* disable autorefresh */
for (i = 0; i < sde_enc->num_phys_encs; i++) {
struct sde_encoder_phys *phys = sde_enc->phys_encs[i];
if (phys && phys->ops.disable_autorefresh)
phys->ops.disable_autorefresh(phys);
}
/* wait for idle */
sde_encoder_wait_for_event(drm_enc, MSM_ENC_TX_COMPLETE);
}
_sde_encoder_input_handler_unregister(drm_enc);