Browse Source

disp: msm: sde: add check for layer-mixer width

Add check in layer mixer to avoid odd values as HW does not
support it.

Change-Id: Ifddd2047c81a016b774712ee52cfceca83374e6d
Signed-off-by: Veera Sundaram Sankaran <[email protected]>
Veera Sundaram Sankaran 3 years ago
parent
commit
84d43e8596
2 changed files with 25 additions and 0 deletions
  1. 18 0
      msm/sde/sde_connector.h
  2. 7 0
      msm/sde/sde_crtc.c

+ 18 - 0
msm/sde/sde_connector.h

@@ -1215,6 +1215,24 @@ static inline int sde_connector_state_get_compression_info(
 	return 0;
 }
 
+static inline bool sde_connector_is_3d_merge_enabled(struct drm_connector *conn)
+{
+	enum sde_rm_topology_name topology;
+
+	if (!conn)
+		return false;
+
+	topology = sde_connector_get_topology_name(conn);
+	if ((topology == SDE_RM_TOPOLOGY_DUALPIPE_3DMERGE)
+			|| (topology == SDE_RM_TOPOLOGY_DUALPIPE_3DMERGE_DSC)
+			|| (topology == SDE_RM_TOPOLOGY_DUALPIPE_3DMERGE_VDC)
+			|| (topology == SDE_RM_TOPOLOGY_QUADPIPE_3DMERGE)
+			|| (topology == SDE_RM_TOPOLOGY_QUADPIPE_3DMERGE_DSC))
+		return true;
+
+	return false;
+}
+
 /**
 * sde_connector_set_msm_mode - set msm_mode for connector state
 * @conn_state: Pointer to drm connector state structure

+ 7 - 0
msm/sde/sde_crtc.c

@@ -1402,6 +1402,13 @@ static int _sde_crtc_check_rois(struct drm_crtc *crtc,
 			return -EINVAL;
 		}
 
+		if (sde_connector_is_3d_merge_enabled(conn) && (mixer_width % 2)) {
+			SDE_ERROR(
+			  "%s: invalid width w/ 3d-merge - mixer_w:%d, crtc_w:%d, num_mixers:%d\n",
+				sde_crtc->name, crtc_width, mixer_width, sde_crtc->num_mixers);
+			return -EINVAL;
+		}
+
 		if (!mode_info.roi_caps.enabled)
 			continue;