Просмотр исходного кода

disp: msm: sde: prepare encoders during enable commit

Prepare commit hook is getting skipped for encoders during
power-on. This is required for clearing the pending flush
mask but the encoder->crtc link is not established at
this point for an enable commit.

Instead of looking at the old CRTC state and matching an
attached encoder, use the encoder_mask in the new CRTC state
to determine which encoders to prepare.

Change-Id: I0754020abd328504899d9591180dedc1723aae49
Signed-off-by: Steve Cohen <[email protected]>
Steve Cohen 4 лет назад
Родитель
Сommit
bd79e929f8
1 измененных файлов с 3 добавлено и 7 удалено
  1. 3 7
      msm/sde/sde_kms.c

+ 3 - 7
msm/sde/sde_kms.c

@@ -1091,7 +1091,7 @@ static void sde_kms_prepare_commit(struct msm_kms *kms,
 	struct drm_device *dev;
 	struct drm_encoder *encoder;
 	struct drm_crtc *crtc;
-	struct drm_crtc_state *crtc_state;
+	struct drm_crtc_state *cstate;
 	struct sde_vm_ops *vm_ops;
 	int i, rc;
 
@@ -1117,12 +1117,8 @@ static void sde_kms_prepare_commit(struct msm_kms *kms,
 		sde_kms->first_kickoff = false;
 	}
 
-	for_each_old_crtc_in_state(state, crtc, crtc_state, i) {
-		list_for_each_entry(encoder, &dev->mode_config.encoder_list,
-				head) {
-			if (encoder->crtc != crtc)
-				continue;
-
+	for_each_new_crtc_in_state(state, crtc, cstate, i) {
+		drm_for_each_encoder_mask(encoder, dev, cstate->encoder_mask) {
 			if (sde_encoder_prepare_commit(encoder) == -ETIMEDOUT) {
 				SDE_ERROR("crtc:%d, initiating hw reset\n",
 						DRMID(crtc));