disp: msm: sde: handle vsync wait status check during timeout

When VSYNC interrupts are delayed due to irq latencies, there is a
possibility that the timeout handler checking the irq status and the
irq handler clearing the status bit happening at the same time on
different CPU cores. This is reported as an error, though there is
not actual issue. Handle this case, by adding an additional ctl-flush
register check in the vsync timeout handler. As part of the change
add error/eventlogs in commit-done wait failures.

Change-Id: Ie7e30dc4ef1e50651cee9015cd3f2caeacf47e5f
Signed-off-by: Veera Sundaram Sankaran <quic_veeras@quicinc.com>
Šī revīzija ir iekļauta:
Veera Sundaram Sankaran
2022-06-21 11:41:31 -07:00
vecāks 3f859c78b5
revīzija 4672a64057
3 mainīti faili ar 46 papildinājumiem un 21 dzēšanām

Parādīt failu

@@ -1639,7 +1639,10 @@ static void sde_kms_wait_for_commit_done(struct msm_kms *kms,
ret = sde_encoder_wait_for_event(encoder, cwb_disabling ?
MSM_ENC_TX_COMPLETE : MSM_ENC_COMMIT_DONE);
if (ret && ret != -EWOULDBLOCK) {
SDE_ERROR("wait for commit done returned %d\n", ret);
SDE_ERROR("crtc:%d, enc:%d, cwb_d:%d, wait for commit done failed ret:%d\n",
DRMID(crtc), DRMID(encoder), cwb_disabling, ret);
SDE_EVT32(DRMID(crtc), DRMID(encoder), cwb_disabling,
ret, SDE_EVTLOG_ERROR);
sde_crtc_request_frame_reset(crtc, encoder);
break;
}