Prechádzať zdrojové kódy

disp: msm: sde: fence error handling for wb and cwb retire fence

Fence error handling for wb and cwb retire fence.
Signal the retire fence for the fence error frame.

Change-Id: I0f73195c50edab4b8aefb58cea342214be87584c
Signed-off-by: GG Hou <[email protected]>
GG Hou 2 rokov pred
rodič
commit
5f4735e2ce
2 zmenil súbory, kde vykonal 10 pridanie a 2 odobranie
  1. 4 0
      msm/sde/sde_crtc.c
  2. 6 2
      msm/sde/sde_encoder.c

+ 4 - 0
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);

+ 6 - 2
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;
 	}