[PATCHv5,23/34] drm/komeda: Use special helper for non-afbc size checks
diff mbox series

Message ID 20191217145020.14645-24-andrzej.p@collabora.com
State New
Headers show
Series
  • Add AFBC support for Rockchip
Related show

Commit Message

Andrzej Pietrasiewicz Dec. 17, 2019, 2:50 p.m. UTC
Use the generic helper code.

Signed-off-by: Andrzej Pietrasiewicz <andrzej.p@collabora.com>
---
 .../arm/display/komeda/komeda_framebuffer.c   | 46 +++++++++----------
 1 file changed, 21 insertions(+), 25 deletions(-)

Patch
diff mbox series

diff --git a/drivers/gpu/drm/arm/display/komeda/komeda_framebuffer.c b/drivers/gpu/drm/arm/display/komeda/komeda_framebuffer.c
index 9139fe5619be..d75176e24f24 100644
--- a/drivers/gpu/drm/arm/display/komeda/komeda_framebuffer.c
+++ b/drivers/gpu/drm/arm/display/komeda/komeda_framebuffer.c
@@ -88,42 +88,38 @@  komeda_fb_afbc_size_check(struct komeda_fb *kfb,
 }
 
 static int
-komeda_fb_none_afbc_size_check(struct komeda_dev *mdev,
+komeda_fb_none_afbc_size_check(struct drm_device *dev,
 			       const struct drm_format_info *info,
 			       struct drm_gem_object **objs,
 			       struct drm_file *file,
 			       const struct drm_mode_fb_cmd2 *mode_cmd)
 {
+	struct komeda_dev *mdev = dev->dev_private;
+	struct drm_size_check check = { 0 };
 	struct drm_gem_object *obj;
-	u32 i, block_h;
-	u64 min_size;
+	u32 i;
 
 	for (i = 0; i < info->num_planes; i++) {
 		obj = objs[i];
 
-		block_h = drm_format_info_block_height(info, i);
-		if ((mode_cmd->pitches[i] * block_h) % mdev->chip.bus_width) {
-			DRM_DEBUG_KMS("Pitch[%d]: 0x%x doesn't align to 0x%x\n",
-				      i, mode_cmd->pitches[i],
-				      mdev->chip.bus_width);
-			return -EINVAL;
-		}
-
-		min_size = komeda_fb_get_pixel_addr_nofb(info,
-							 mode_cmd->modifier[0],
-							 mode_cmd->pitches,
-							 mode_cmd->offsets,
-							 obj,
-							 0, mode_cmd->height, i)
-			 - to_drm_gem_cma_obj(obj)->paddr;
-		if (obj->size < min_size) {
-			DRM_DEBUG_KMS("The fb->obj[%d] size: 0x%zx lower than the minimum requirement: 0x%llx.\n",
-				      i, obj->size, min_size);
-			return -EINVAL;
-		}
+		check.pitch_multiplier[i] =
+			drm_format_info_block_height(info, i);
+
+		check.min_size[i] =
+			komeda_fb_get_pixel_addr_nofb(info,
+						      mode_cmd->modifier[0],
+						      mode_cmd->pitches,
+						      mode_cmd->offsets,
+						      obj,
+						      0, mode_cmd->height, i)
+			- to_drm_gem_cma_obj(obj)->paddr;
 	}
 
-	return 0;
+	check.pitch_modulo = mdev->chip.bus_width;
+	check.use_pitch_multiplier = true;
+	check.use_min_size = true;
+
+	return drm_gem_fb_size_check2(dev, mode_cmd, &check, objs);
 }
 
 struct drm_framebuffer *
@@ -172,7 +168,7 @@  komeda_fb_create(struct drm_device *dev, struct drm_file *file,
 		if (ret)
 			goto err_cleanup;
 
-		ret = komeda_fb_none_afbc_size_check(mdev, info, objs,
+		ret = komeda_fb_none_afbc_size_check(dev, info, objs,
 						     file, mode_cmd);
 	}
 	if (ret < 0)