Преглед на файлове

Merge "disp: msm: sde: reduce complexity in sde_plane_sspp_atomic_check"

qctecmdr преди 5 години
родител
ревизия
3504cd43c2
променени са 1 файла, в които са добавени 44 реда и са изтрити 38 реда
  1. 44 38
      msm/sde/sde_plane.c

+ 44 - 38
msm/sde/sde_plane.c

@@ -2557,6 +2557,48 @@ static int _sde_plane_validate_shared_crtc(struct sde_plane *psde,
 
 }
 
+static int _sde_plane_sspp_atomic_check_helper(struct sde_plane *psde,
+		const struct sde_format *fmt,
+		struct sde_rect src, struct sde_rect dst,
+		u32 width, u32 height)
+{
+	int ret = 0;
+	u32 min_src_size = SDE_FORMAT_IS_YUV(fmt) ? 2 : 1;
+
+	if (SDE_FORMAT_IS_YUV(fmt) &&
+			(!(psde->features & SDE_SSPP_SCALER) ||
+			 !(psde->features & (BIT(SDE_SSPP_CSC)
+					     | BIT(SDE_SSPP_CSC_10BIT))))) {
+		SDE_ERROR_PLANE(psde,
+				"plane doesn't have scaler/csc for yuv\n");
+		ret = -EINVAL;
+
+	/* check src bounds */
+	} else if (width > MAX_IMG_WIDTH || height > MAX_IMG_HEIGHT ||
+			src.w < min_src_size || src.h < min_src_size ||
+			CHECK_LAYER_BOUNDS(src.x, src.w, width) ||
+			CHECK_LAYER_BOUNDS(src.y, src.h, height)) {
+		SDE_ERROR_PLANE(psde, "invalid source %u, %u, %ux%u\n",
+			src.x, src.y, src.w, src.h);
+		ret = -E2BIG;
+
+	/* valid yuv image */
+	} else if (SDE_FORMAT_IS_YUV(fmt) && ((src.x & 0x1) || (src.y & 0x1) ||
+			 (src.w & 0x1) || (src.h & 0x1))) {
+		SDE_ERROR_PLANE(psde, "invalid yuv source %u, %u, %ux%u\n",
+				src.x, src.y, src.w, src.h);
+		ret = -EINVAL;
+
+	/* min dst support */
+	} else if (dst.w < 0x1 || dst.h < 0x1) {
+		SDE_ERROR_PLANE(psde, "invalid dest rect %u, %u, %ux%u\n",
+				dst.x, dst.y, dst.w, dst.h);
+		ret = -EINVAL;
+	}
+
+	return ret;
+}
+
 static int sde_plane_sspp_atomic_check(struct drm_plane *plane,
 		struct drm_plane_state *state)
 {
@@ -2566,7 +2608,6 @@ static int sde_plane_sspp_atomic_check(struct drm_plane *plane,
 	const struct msm_format *msm_fmt;
 	const struct sde_format *fmt;
 	struct sde_rect src, dst;
-	uint32_t min_src_size;
 	bool q16_data = true;
 	struct drm_framebuffer *fb;
 	u32 width;
@@ -2611,57 +2652,22 @@ static int sde_plane_sspp_atomic_check(struct drm_plane *plane,
 	msm_fmt = msm_framebuffer_format(fb);
 	fmt = to_sde_format(msm_fmt);
 
-	min_src_size = SDE_FORMAT_IS_YUV(fmt) ? 2 : 1;
-
-	if (SDE_FORMAT_IS_YUV(fmt) &&
-		(!(psde->features & SDE_SSPP_SCALER) ||
-		 !(psde->features & (BIT(SDE_SSPP_CSC)
-		 | BIT(SDE_SSPP_CSC_10BIT))))) {
-		SDE_ERROR_PLANE(psde,
-				"plane doesn't have scaler/csc for yuv\n");
-		ret = -EINVAL;
-
-	/* check src bounds */
-	} else if (width > MAX_IMG_WIDTH ||
-		height > MAX_IMG_HEIGHT ||
-		src.w < min_src_size || src.h < min_src_size ||
-		CHECK_LAYER_BOUNDS(src.x, src.w, width) ||
-		CHECK_LAYER_BOUNDS(src.y, src.h, height)) {
-		SDE_ERROR_PLANE(psde, "invalid source %u, %u, %ux%u\n",
-			src.x, src.y, src.w, src.h);
-		ret = -E2BIG;
-
-	/* valid yuv image */
-	} else if (SDE_FORMAT_IS_YUV(fmt) && ((src.x & 0x1) || (src.y & 0x1) ||
-			 (src.w & 0x1) || (src.h & 0x1))) {
-		SDE_ERROR_PLANE(psde, "invalid yuv source %u, %u, %ux%u\n",
-				src.x, src.y, src.w, src.h);
-		ret = -EINVAL;
-
-	/* min dst support */
-	} else if (dst.w < 0x1 || dst.h < 0x1) {
-		SDE_ERROR_PLANE(psde, "invalid dest rect %u, %u, %ux%u\n",
-				dst.x, dst.y, dst.w, dst.h);
-		ret = -EINVAL;
-	}
-
+	ret = _sde_plane_sspp_atomic_check_helper(psde, fmt, src, dst, width,
+			height);
 	if (ret)
 		return ret;
 
 	ret = _sde_atomic_check_decimation_scaler(state, psde, fmt, pstate,
 		&src, &dst, width, height);
-
 	if (ret)
 		return ret;
 
 	ret = _sde_atomic_check_excl_rect(psde, pstate,
 		&src, fmt, ret);
-
 	if (ret)
 		return ret;
 
 	ret = _sde_plane_validate_shared_crtc(psde, state);
-
 	if (ret)
 		return ret;