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

Commit 9f7c3f44 authored by Chris Wilson's avatar Chris Wilson
Browse files

drm/i915/overlay: Tidy check_overlay_dst()

parent 446d2183
Loading
Loading
Loading
Loading
+16 −12
Original line number Diff line number Diff line
@@ -989,11 +989,9 @@ static int check_overlay_src(struct drm_device *dev,
			     struct drm_intel_overlay_put_image *rec,
			     struct drm_gem_object *new_bo)
{
	u32 stride_mask;
	int depth;
	int uv_hscale = uv_hsubsampling(rec->flags);
	int uv_vscale = uv_vsubsampling(rec->flags);
	size_t tmp;
	u32 stride_mask, depth, tmp;

	/* check src dimensions */
	if (IS_845G(dev) || IS_I830(dev)) {
@@ -1005,6 +1003,7 @@ static int check_overlay_src(struct drm_device *dev,
		    rec->src_width  > IMAGE_MAX_WIDTH)
			return -EINVAL;
	}

	/* better safe than sorry, use 4 as the maximal subsampling ratio */
	if (rec->src_height < N_VERT_Y_TAPS*4 ||
	    rec->src_width  < N_HORIZ_Y_TAPS*4)
@@ -1015,12 +1014,15 @@ static int check_overlay_src(struct drm_device *dev,
	case I915_OVERLAY_RGB:
		/* not implemented */
		return -EINVAL;

	case I915_OVERLAY_YUV_PACKED:
		depth = packed_depth_bytes(rec->flags);
		if (uv_vscale != 1)
			return -EINVAL;

		depth = packed_depth_bytes(rec->flags);
		if (depth < 0)
			return depth;

		/* ignore UV planes */
		rec->stride_UV = 0;
		rec->offset_U = 0;
@@ -1029,11 +1031,13 @@ static int check_overlay_src(struct drm_device *dev,
		if (rec->offset_Y % depth)
			return -EINVAL;
		break;

	case I915_OVERLAY_YUV_PLANAR:
		if (uv_vscale < 0 || uv_hscale < 0)
			return -EINVAL;
		/* no offset restrictions for planar formats */
		break;

	default:
		return -EINVAL;
	}
@@ -1053,8 +1057,8 @@ static int check_overlay_src(struct drm_device *dev,
		return -EINVAL;

	tmp = (rec->flags & I915_OVERLAY_TYPE_MASK) == I915_OVERLAY_YUV_PLANAR ?
		4 : 8;
	if (rec->stride_Y > tmp*1024 || rec->stride_UV > 2*1024)
		4096 : 8192;
	if (rec->stride_Y > tmp || rec->stride_UV > 2*1024)
		return -EINVAL;

	/* check buffer dimensions */
@@ -1079,8 +1083,8 @@ static int check_overlay_src(struct drm_device *dev,
		tmp = rec->stride_Y * rec->src_height;
		if (rec->offset_Y + tmp > new_bo->size)
			return -EINVAL;
		tmp = rec->stride_UV*rec->src_height;
		tmp /= uv_vscale;

		tmp = rec->stride_UV * (rec->src_height / uv_vscale);
		if (rec->offset_U + tmp > new_bo->size ||
		    rec->offset_V + tmp > new_bo->size)
			return -EINVAL;