Bläddra i källkod

disp: msm: sde: use dce api to configure dsc

This change introduces dce api to the encoder component to
configure supported compression hw. This allows encoder to
remain independent of the compression type and specification
supported by the hw.

Change-Id: I6bc35289495b05f57a83323cbab1ea14e9e15db0
Signed-off-by: Abhijit Kulkarni <[email protected]>
Abhijit Kulkarni 6 år sedan
förälder
incheckning
ac8ae6b85f
3 ändrade filer med 68 tillägg och 31 borttagningar
  1. 7 22
      msm/sde/sde_encoder.c
  2. 45 4
      msm/sde/sde_encoder_dce.c
  3. 16 5
      msm/sde/sde_encoder_dce.h

+ 7 - 22
msm/sde/sde_encoder.c

@@ -170,20 +170,6 @@ static bool _sde_encoder_is_autorefresh_enabled(
 			CONNECTOR_PROP_AUTOREFRESH) ? true : false;
 }
 
-static bool _sde_encoder_is_dsc_enabled(struct drm_encoder *drm_enc)
-{
-	struct sde_encoder_virt *sde_enc;
-	struct msm_compression_info *comp_info;
-
-	if (!drm_enc)
-		return false;
-
-	sde_enc  = to_sde_encoder_virt(drm_enc);
-	comp_info = &sde_enc->mode_info.comp_info;
-
-	return (comp_info->comp_type == MSM_DISPLAY_COMPRESSION_DSC);
-}
-
 static void sde_configure_qdss(struct sde_encoder_virt *sde_enc,
 				struct sde_hw_qdss *hw_qdss,
 				struct sde_encoder_phys *phys, bool enable)
@@ -2122,10 +2108,10 @@ static void sde_encoder_virt_mode_set(struct drm_encoder *drm_enc,
 		}
 
 		/*
-		 * Disable dsc before switch the mode and after pre_modeset,
+		 * Disable dce before switch the mode and after pre_modeset,
 		 * to guarantee that previous kickoff finished.
 		 */
-		sde_encoder_dsc_disable(sde_enc);
+		sde_encoder_dce_disable(sde_enc);
 	} else if (msm_is_mode_seamless_poms(adj_mode)) {
 		_sde_encoder_modeset_helper_locked(drm_enc,
 					SDE_ENC_RC_EVENT_PRE_MODESET);
@@ -2637,11 +2623,11 @@ static void sde_encoder_virt_disable(struct drm_encoder *drm_enc)
 	}
 
 	/*
-	 * disable dsc after the transfer is complete (for command mode)
+	 * disable dce after the transfer is complete (for command mode)
 	 * and after physical encoder is disabled, to make sure timing
 	 * engine is already disabled (for video mode).
 	 */
-	sde_encoder_dsc_disable(sde_enc);
+	sde_encoder_dce_disable(sde_enc);
 
 	sde_encoder_resource_control(drm_enc, SDE_ENC_RC_EVENT_STOP);
 
@@ -3985,18 +3971,17 @@ int sde_encoder_prepare_for_kickoff(struct drm_encoder *drm_enc,
 		}
 	}
 
-	if (_sde_encoder_is_dsc_enabled(drm_enc) && sde_enc->cur_master &&
+	if (sde_enc->cur_master &&
 		((is_cmd_mode && sde_enc->cur_master->cont_splash_enabled) ||
 			!sde_enc->cur_master->cont_splash_enabled)) {
-		rc = sde_encoder_dsc_setup(sde_enc, params);
+		rc = sde_encoder_dce_setup(sde_enc, params);
 		if (rc) {
 			SDE_ERROR_ENC(sde_enc, "failed to setup DSC: %d\n", rc);
 			ret = rc;
 		}
 	}
 
-	if (sde_encoder_dsc_is_dirty(sde_enc))
-		sde_encoder_dsc_helper_flush_dsc(sde_enc);
+	sde_encoder_dce_flush(sde_enc);
 
 	if (sde_enc->cur_master && !sde_enc->cur_master->cont_splash_enabled)
 		sde_configure_qdss(sde_enc, sde_enc->cur_master->hw_qdss,

+ 45 - 4
msm/sde/sde_encoder_dce.c

@@ -474,7 +474,7 @@ static int _sde_encoder_dsc_2_lm_2_enc_1_intf(struct sde_encoder_virt *sde_enc,
 	return 0;
 }
 
-int sde_encoder_dsc_setup(struct sde_encoder_virt *sde_enc,
+static int _dce_dsc_setup(struct sde_encoder_virt *sde_enc,
 		struct sde_encoder_kickoff_params *params)
 {
 	enum sde_rm_topology_name topology;
@@ -530,7 +530,7 @@ int sde_encoder_dsc_setup(struct sde_encoder_virt *sde_enc,
 	return ret;
 }
 
-void sde_encoder_dsc_disable(struct sde_encoder_virt *sde_enc)
+static void _dce_dsc_disable(struct sde_encoder_virt *sde_enc)
 {
 	int i;
 	struct sde_hw_pingpong *hw_pp = NULL;
@@ -576,7 +576,7 @@ void sde_encoder_dsc_disable(struct sde_encoder_virt *sde_enc)
 	 */
 }
 
-bool sde_encoder_dsc_is_dirty(struct sde_encoder_virt *sde_enc)
+static bool _dce_dsc_is_dirty(struct sde_encoder_virt *sde_enc)
 {
 	int i;
 
@@ -593,7 +593,7 @@ bool sde_encoder_dsc_is_dirty(struct sde_encoder_virt *sde_enc)
 }
 
 
-void sde_encoder_dsc_helper_flush_dsc(struct sde_encoder_virt *sde_enc)
+static void _dce_helper_flush_dsc(struct sde_encoder_virt *sde_enc)
 {
 	int i;
 	struct sde_hw_ctl *hw_ctl = NULL;
@@ -611,4 +611,45 @@ void sde_encoder_dsc_helper_flush_dsc(struct sde_encoder_virt *sde_enc)
 	}
 }
 
+void sde_encoder_dce_disable(struct sde_encoder_virt *sde_enc)
+{
+	enum msm_display_compression_type comp_type;
+
+	if (!sde_enc)
+		return;
+
+	comp_type = sde_enc->mode_info.comp_info.comp_type;
+
+	if (comp_type == MSM_DISPLAY_COMPRESSION_DSC)
+		_dce_dsc_disable(sde_enc);
+}
+
+int sde_encoder_dce_flush(struct sde_encoder_virt *sde_enc)
+{
+	int rc = 0;
+
+	if (!sde_enc)
+		return -EINVAL;
+
+	if (_dce_dsc_is_dirty(sde_enc))
+		_dce_helper_flush_dsc(sde_enc);
 
+	return rc;
+}
+
+int sde_encoder_dce_setup(struct sde_encoder_virt *sde_enc,
+		struct sde_encoder_kickoff_params *params)
+{
+	enum msm_display_compression_type comp_type;
+	int rc = 0;
+
+	if (!sde_enc)
+		return -EINVAL;
+
+	comp_type = sde_enc->mode_info.comp_info.comp_type;
+
+	if (comp_type == MSM_DISPLAY_COMPRESSION_DSC)
+		rc = _dce_dsc_setup(sde_enc, params);
+
+	return rc;
+}

+ 16 - 5
msm/sde/sde_encoder_dce.h

@@ -8,13 +8,24 @@
 
 #include "sde_encoder.h"
 
-bool sde_encoder_dsc_is_dirty(struct sde_encoder_virt *sde_enc);
-
-void sde_encoder_dsc_disable(struct sde_encoder_virt *sde_enc);
+/**
+ * sde_encoder_dce_disable : function to disable compression
+ * @sde_enc: pointer to virtual encoder structure
+ */
+void sde_encoder_dce_disable(struct sde_encoder_virt *sde_enc);
 
-int sde_encoder_dsc_setup(struct sde_encoder_virt *sde_enc,
+/**
+ * sde_encoder_dce_setup : function to configure compression block
+ * @sde_enc: pointer to virtual encoder structure
+ * @params: pointer to kickoff params
+ */
+int sde_encoder_dce_setup(struct sde_encoder_virt *sde_enc,
 		struct sde_encoder_kickoff_params *params);
 
-void sde_encoder_dsc_helper_flush_dsc(struct sde_encoder_virt *sde_enc);
+/**
+ * sde_encoder_dce_flush :function to flush the compression configuration
+ * @sde_enc: pointer to virtual encoder structure
+ */
+void sde_encoder_dce_flush(struct sde_encoder_virt *sde_enc);
 
 #endif /* __SDE_ENCODER_DCE_H__ */