Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4e385c38 authored by Govinda Rajulu Chenna's avatar Govinda Rajulu Chenna Committed by Gerrit - the friendly Code Review server
Browse files

drm/msm: extract compression ratio and widebus mode from connector



Add implementation to extract compression ratio and widebus config
data from connector module and configure sde interface module
accordignly to avoid the fixed compression ratio configuration.

Change-Id: Ica1bf21dba43f9a0017e06870b4e5882fa74ebd9
Signed-off-by: default avatarGovinda Rajulu Chenna <gchenna@codeaurora.org>
parent b34bfab8
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -410,6 +410,8 @@ int dp_connector_get_mode_info(struct drm_connector *connector,
		return -EINVAL;
	}

	memset(mode_info, 0, sizeof(*mode_info));

	topology = &mode_info->topology;
	topology->num_lm = (max_mixer_width <= drm_mode->hdisplay) ?
							dual_lm : single_lm;
@@ -418,7 +420,6 @@ int dp_connector_get_mode_info(struct drm_connector *connector,

	mode_info->frame_rate = drm_mode->vrefresh;
	mode_info->vtotal = drm_mode->vtotal;
	mode_info->comp_info.comp_type = MSM_DISPLAY_COMPRESSION_NONE;

	return 0;
}
+2 −0
Original line number Diff line number Diff line
@@ -410,6 +410,8 @@ int dsi_conn_get_mode_info(struct drm_connector *connector,
		mode_info->comp_info.comp_type = MSM_DISPLAY_COMPRESSION_DSC;
		memcpy(&mode_info->comp_info.dsc_info, &dsi_mode.priv_info->dsc,
			sizeof(dsi_mode.priv_info->dsc));
		mode_info->comp_info.comp_ratio =
			MSM_DISPLAY_COMPRESSION_RATIO_3_TO_1;
	}

	if (dsi_mode.priv_info->roi_caps.enabled) {
+17 −0
Original line number Diff line number Diff line
@@ -222,6 +222,19 @@ enum msm_display_compression_type {
	MSM_DISPLAY_COMPRESSION_DSC,
};

/**
 * enum msm_display_compression_ratio - compression ratio
 * @MSM_DISPLAY_COMPRESSION_NONE: no compression
 * @MSM_DISPLAY_COMPRESSION_RATIO_2_TO_1: 2 to 1 compression
 * @MSM_DISPLAY_COMPRESSION_RATIO_3_TO_1: 3 to 1 compression
 */
enum msm_display_compression_ratio {
	MSM_DISPLAY_COMPRESSION_RATIO_NONE,
	MSM_DISPLAY_COMPRESSION_RATIO_2_TO_1,
	MSM_DISPLAY_COMPRESSION_RATIO_3_TO_1,
	MSM_DISPLAY_COMPRESSION_RATIO_MAX,
};

/**
 * enum msm_display_caps - features/capabilities supported by displays
 * @MSM_DISPLAY_CAP_VID_MODE:           Video or "active" mode supported
@@ -394,11 +407,13 @@ struct msm_display_dsc_info {
/**
 * struct msm_compression_info - defined panel compression
 * @comp_type:        type of compression supported
 * @comp_ratio:       compression ratio
 * @dsc_info:         dsc configuration if the compression
 *                    supported is DSC
 */
struct msm_compression_info {
	enum msm_display_compression_type comp_type;
	enum msm_display_compression_ratio comp_ratio;

	union{
		struct msm_display_dsc_info dsc_info;
@@ -428,6 +443,7 @@ struct msm_display_topology {
 * @topology:        supported topology for the mode
 * @comp_info:       compression info supported
 * @roi_caps:        panel roi capabilities
 * @wide_bus_en:	wide-bus mode cfg for interface module
 */
struct msm_mode_info {
	uint32_t frame_rate;
@@ -439,6 +455,7 @@ struct msm_mode_info {
	struct msm_display_topology topology;
	struct msm_compression_info comp_info;
	struct msm_roi_caps roi_caps;
	bool wide_bus_en;
};

/**
+12 −0
Original line number Diff line number Diff line
@@ -993,6 +993,16 @@ static int sde_encoder_virt_atomic_check(
			return ret;
		}

		if (sde_conn_state->mode_info.comp_info.comp_type &&
			sde_conn_state->mode_info.comp_info.comp_ratio >=
					MSM_DISPLAY_COMPRESSION_RATIO_MAX) {
			SDE_ERROR_ENC(sde_enc,
				"invalid compression ratio: %d\n",
				sde_conn_state->mode_info.comp_info.comp_ratio);
			ret = -EINVAL;
			return ret;
		}

		/* Reserve dynamic resources, indicating atomic_check phase */
		ret = sde_rm_reserve(&sde_kms->rm, drm_enc, crtc_state,
			conn_state, true);
@@ -2995,6 +3005,8 @@ static void sde_encoder_virt_enable(struct drm_encoder *drm_enc)
			continue;

		phys->comp_type = comp_info->comp_type;
		phys->comp_ratio = comp_info->comp_ratio;
		phys->wide_bus_en = mode_info.wide_bus_en;
		if (phys != sde_enc->cur_master) {
			/**
			 * on DMS request, the encoder will be enabled
+4 −0
Original line number Diff line number Diff line
@@ -266,6 +266,8 @@ struct sde_encoder_irq {
 * @intf_cfg_v1:        Interface hardware configuration to be used if control
 *                      path supports SDE_CTL_ACTIVE_CFG
 * @comp_type:      Type of compression supported
 * @comp_ratio:		Compression ratio
 * @wide_bus_en:	Wide-bus configuraiton
 * @enc_spinlock:	Virtual-Encoder-Wide Spin Lock for IRQ purposes
 * @enable_state:	Enable state tracking
 * @vblank_refcount:	Reference count of vblank request
@@ -307,6 +309,8 @@ struct sde_encoder_phys {
	struct sde_hw_intf_cfg intf_cfg;
	struct sde_hw_intf_cfg_v1 intf_cfg_v1;
	enum msm_display_compression_type comp_type;
	enum msm_display_compression_ratio comp_ratio;
	bool wide_bus_en;
	spinlock_t *enc_spinlock;
	enum sde_enc_enable_state enable_state;
	struct mutex *vblank_ctl_lock;
Loading