diff --git a/msm/sde/sde_crtc.c b/msm/sde/sde_crtc.c index 9265cbd08f..c9da5f34bf 100644 --- a/msm/sde/sde_crtc.c +++ b/msm/sde/sde_crtc.c @@ -3891,6 +3891,10 @@ int sde_crtc_sw_fence_error_handle(struct drm_crtc *crtc, int err_status) sde_crtc->handle_fence_error_bw_update = true; drm_for_each_encoder_mask(drm_encoder, crtc->dev, crtc->state->encoder_mask) { + /* continue if copy encoder is encountered */ + if (sde_crtc_state_in_clone_mode(drm_encoder, crtc->state)) + continue; + rc = sde_encoder_handle_dma_fence_out_of_order(drm_encoder); if (rc) { SDE_DEBUG("Dma fence out of order failed, rc = %d\n", rc); diff --git a/msm/sde/sde_encoder.c b/msm/sde/sde_encoder.c index 9f69417d43..90d2777417 100644 --- a/msm/sde/sde_encoder.c +++ b/msm/sde/sde_encoder.c @@ -4423,8 +4423,12 @@ static void _sde_encoder_kickoff_phys(struct sde_encoder_virt *sde_enc, /* reset input fence status and skip flush for fence error case. */ if (sde_crtc->input_fence_status < 0) { - SDE_EVT32(DRMID(&sde_enc->base), sde_crtc->input_fence_status); - sde_crtc->input_fence_status = 0; + if (!sde_encoder_in_clone_mode(&sde_enc->base)) + sde_crtc->input_fence_status = 0; + + SDE_EVT32(DRMID(&sde_enc->base), sde_encoder_in_clone_mode(&sde_enc->base), + sde_crtc->input_fence_status); + goto handle_elevated_ahb_vote; }