Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 71c6cc9c authored by Veera Sundaram Sankaran's avatar Veera Sundaram Sankaran
Browse files

drm/msm/sde: remove release fence signal from frame done



Move back the release fence signaling to complete commit
for cmd mode panels. As it is causing unbalanced prepare and
signal output fence because few prepare fence calls are not
followed by a kickoff.

Change-Id: Ib1cef5883c66306119c7f7f98af7b2b72017e1c7
Signed-off-by: default avatarVeera Sundaram Sankaran <veeras@codeaurora.org>
parent 316c074a
Loading
Loading
Loading
Loading
+3 −32
Original line number Diff line number Diff line
@@ -1510,7 +1510,6 @@ static void sde_crtc_frame_event_work(struct kthread_work *work)
	struct sde_crtc *sde_crtc;
	struct sde_crtc_state *cstate;
	struct sde_kms *sde_kms;
	struct drm_encoder *encoder;
	unsigned long flags;

	if (!work) {
@@ -1564,26 +1563,8 @@ static void sde_crtc_frame_event_work(struct kthread_work *work)
		}

		if (fevent->event == SDE_ENCODER_FRAME_EVENT_DONE ||
			    (fevent->event & SDE_ENCODER_FRAME_EVENT_ERROR)) {
			bool signal_fence = true;

			drm_for_each_encoder(encoder, crtc->dev) {
				if (encoder->crtc != crtc)
					continue;

				signal_fence &=
					sde_encoder_is_cmd_mode(encoder);
			}

			/* signal release fence only for cmd mode panels here */
			if (signal_fence) {
				sde_fence_signal(&sde_crtc->output_fence, 0);
				SDE_EVT32_VERBOSE(DRMID(crtc), fevent->event,
							SDE_EVTLOG_FUNC_CASE4);
			}

			    (fevent->event & SDE_ENCODER_FRAME_EVENT_ERROR))
			complete_all(&sde_crtc->frame_done_comp);
		}

		if (fevent->event == SDE_ENCODER_FRAME_EVENT_DONE)
			sde_core_perf_crtc_update(crtc, 0, false);
@@ -1648,9 +1629,7 @@ void sde_crtc_complete_commit(struct drm_crtc *crtc,
{
	struct sde_crtc *sde_crtc;
	struct sde_crtc_state *cstate;
	struct drm_encoder *encoder;
	int i;
	bool signal_fence = true;

	if (!crtc || !crtc->state) {
		SDE_ERROR("invalid crtc\n");
@@ -1661,15 +1640,7 @@ void sde_crtc_complete_commit(struct drm_crtc *crtc,
	cstate = to_sde_crtc_state(crtc->state);
	SDE_EVT32_VERBOSE(DRMID(crtc));

	drm_for_each_encoder(encoder, crtc->dev) {
		if (encoder->crtc != crtc)
			continue;

		signal_fence &= !sde_encoder_is_cmd_mode(encoder);
	}

	/* signal release fence for non-cmd mode panels */
	if (signal_fence)
	/* signal release fence */
	sde_fence_signal(&sde_crtc->output_fence, 0);

	/* signal retire fence */