Pārlūkot izejas kodu

Merge "disp: msm: sde: disable solver for autorefresh disable transition"

qctecmdr 1 gadu atpakaļ
vecāks
revīzija
d0c7fa0965
3 mainītis faili ar 18 papildinājumiem un 2 dzēšanām
  1. 6 0
      msm/sde/sde_encoder.c
  2. 2 0
      msm/sde/sde_encoder_phys.h
  3. 10 2
      msm/sde/sde_encoder_phys_cmd.c

+ 6 - 0
msm/sde/sde_encoder.c

@@ -1816,6 +1816,12 @@ static int _sde_encoder_update_rsc_client(
 				sde_enc->cur_master->connector);
 		sde_enc->autorefresh_solver_disable =
 			 _sde_encoder_is_autorefresh_enabled(sde_enc) ? true : false;
+
+		if (sde_enc->cur_master->ops.is_autoref_disable_pending)
+			sde_enc->autorefresh_solver_disable =
+				(sde_enc->autorefresh_solver_disable ||
+				 sde_enc->cur_master->ops.is_autoref_disable_pending(
+					 sde_enc->cur_master));
 	}
 
 	/* left primary encoder keep vote */

+ 2 - 0
msm/sde/sde_encoder_phys.h

@@ -144,6 +144,7 @@ struct sde_encoder_virt_ops {
  * @restore:			Restore all the encoder configs.
  * @is_autorefresh_enabled:	provides the autorefresh current
  *                              enable/disable state.
+ * @is_autoref_disable_pending:	Indicates if autorefresh disable commit in progress
  * @get_line_count:		Obtain current internal vertical line count
  * @wait_dma_trigger:		Returns true if lut dma has to trigger and wait
  *                              unitl transaction is complete.
@@ -202,6 +203,7 @@ struct sde_encoder_phys_ops {
 	void (*control_te)(struct sde_encoder_phys *phys_enc, bool enable);
 	void (*restore)(struct sde_encoder_phys *phys);
 	bool (*is_autorefresh_enabled)(struct sde_encoder_phys *phys);
+	bool (*is_autoref_disable_pending)(struct sde_encoder_phys *phys);
 	int (*get_line_count)(struct sde_encoder_phys *phys);
 	bool (*wait_dma_trigger)(struct sde_encoder_phys *phys);
 	int (*wait_for_active)(struct sde_encoder_phys *phys);

+ 10 - 2
msm/sde/sde_encoder_phys_cmd.c

@@ -114,6 +114,14 @@ static void _sde_encoder_phys_cmd_config_autorefresh(
 		hw_pp->ops.setup_autorefresh(hw_pp, cfg_cur);
 }
 
+static bool sde_encoder_phys_cmd_is_autoref_disable_pending(struct sde_encoder_phys *phys_enc)
+{
+	if (!phys_enc)
+		return true;
+
+	return phys_enc->autorefresh_disable_trans;
+}
+
 static void _sde_encoder_phys_cmd_update_flush_mask(
 		struct sde_encoder_phys *phys_enc)
 {
@@ -2540,8 +2548,8 @@ static void sde_encoder_phys_cmd_init_ops(struct sde_encoder_phys_ops *ops)
 	ops->update_split_role = sde_encoder_phys_cmd_update_split_role;
 	ops->restore = sde_encoder_phys_cmd_enable_helper;
 	ops->control_te = sde_encoder_phys_cmd_connect_te;
-	ops->is_autorefresh_enabled =
-			sde_encoder_phys_cmd_is_autorefresh_enabled;
+	ops->is_autorefresh_enabled = sde_encoder_phys_cmd_is_autorefresh_enabled;
+	ops->is_autoref_disable_pending = sde_encoder_phys_cmd_is_autoref_disable_pending;
 	ops->get_line_count = sde_encoder_phys_cmd_te_get_line_count;
 	ops->wait_for_active = NULL;
 	ops->setup_vsync_source = sde_encoder_phys_cmd_setup_vsync_source;