diff --git a/msm/sde/sde_encoder.c b/msm/sde/sde_encoder.c index dce49fb218..1cdc033283 100644 --- a/msm/sde/sde_encoder.c +++ b/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, diff --git a/msm/sde/sde_encoder_dce.c b/msm/sde/sde_encoder_dce.c index 71b2e087a4..7955aa910d 100644 --- a/msm/sde/sde_encoder_dce.c +++ b/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; +} diff --git a/msm/sde/sde_encoder_dce.h b/msm/sde/sde_encoder_dce.h index ff325320f0..d475dfdaf3 100644 --- a/msm/sde/sde_encoder_dce.h +++ b/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); +/** + * 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); -void sde_encoder_dsc_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__ */