Procházet zdrojové kódy

disp: msm: avoid cwb on esd recovery commit

This change depends on HAL change which sets CONNECTOR_SET_CRTC
property to null for cwb conn, if cwb is enabled during esd failures.
This causes power off commit crtc_state's active_changed and
connectors_changed set to true, which is causing seamless_crtc
to true during msm_disable_outputs and this leads to invalid crtc
state. This change modifies the seamless_crtc condition and
the msm_crtc_set_mode callback is early returned during such cases
to power off crtc.

Without this change, crtc_disable is not called which avoids
SDE_FENCE_RESET_TIMELINE. On esd failure release fence is not
signaled for the planes used in the composition and this further
leads to GPU wait on release fence and causes fence timeout.

Change-Id: Ie5d8f1b99d6a2d335330331288223fbeba9f6e64
Signed-off-by: Mahadevan <[email protected]>
Mahadevan před 3 roky
rodič
revize
8f64b5283a
1 změnil soubory, kde provedl 5 přidání a 1 odebrání
  1. 5 1
      msm/msm_atomic.c

+ 5 - 1
msm/msm_atomic.c

@@ -88,7 +88,8 @@ static inline bool _msm_seamless_for_crtc(struct drm_atomic_state *state,
 	if (msm_is_mode_seamless_dms(msm_mode) && !enable)
 		return true;
 
-	if (!crtc_state->mode_changed && crtc_state->connectors_changed) {
+	if (!crtc_state->mode_changed && crtc_state->connectors_changed &&
+		crtc_state->active) {
 		for_each_old_connector_in_state(state, connector,
 				conn_state, i) {
 			if ((conn_state->crtc == crtc_state->crtc) ||
@@ -319,6 +320,9 @@ msm_crtc_set_mode(struct drm_device *dev, struct drm_atomic_state *old_state)
 		mode = &new_crtc_state->mode;
 		adjusted_mode = &new_crtc_state->adjusted_mode;
 
+		if (!new_crtc_state->active)
+			continue;
+
 		if (!new_crtc_state->mode_changed &&
 				new_crtc_state->connectors_changed) {
 			if (_msm_seamless_for_conn(connector,