Checks can be simplified based on the requirement that pitches must be
identical for all planes.

Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
---
 drivers/gpu/drm/omapdrm/omap_fb.c | 51 ++++++++++++++++++++-------------------
 1 file changed, 26 insertions(+), 25 deletions(-)

diff --git a/drivers/gpu/drm/omapdrm/omap_fb.c 
b/drivers/gpu/drm/omapdrm/omap_fb.c
index 015b6a50c581..8629ba6ff9d7 100644
--- a/drivers/gpu/drm/omapdrm/omap_fb.c
+++ b/drivers/gpu/drm/omapdrm/omap_fb.c
@@ -407,6 +407,7 @@ struct drm_framebuffer *omap_framebuffer_init(struct 
drm_device *dev,
        struct omap_framebuffer *omap_fb = NULL;
        struct drm_framebuffer *fb = NULL;
        const struct format *format = NULL;
+       unsigned int pitch = mode_cmd->pitches[0];
        int ret, i;

        DBG("create framebuffer: dev=%p, mode_cmd=%p (%dx%d@%4.4s)",
@@ -437,38 +438,38 @@ struct drm_framebuffer *omap_framebuffer_init(struct 
drm_device *dev,
        omap_fb->format = format;
        mutex_init(&omap_fb->lock);

-       for (i = 0; i < format->num_planes; i++) {
-               struct plane *plane = &omap_fb->planes[i];
-               int size, pitch = mode_cmd->pitches[i];
+       if (format->num_planes == 2 && pitch != mode_cmd->pitches[1]) {
+               dev_err(dev->dev, "pitches differ between planes 0 and 1\n");
+               ret = -EINVAL;
+               goto fail;
+       }

-               if (pitch < (mode_cmd->width * format->stride_bpp)) {
-                       dev_err(dev->dev, "provided buffer pitch is too small! 
%d < %d\n",
-                                       pitch, mode_cmd->width * 
format->stride_bpp);
-                       ret = -EINVAL;
-                       goto fail;
-               }
+       if (pitch < mode_cmd->width * format->stride_bpp) {
+               dev_err(dev->dev,
+                       "provided buffer pitch is too small! %u < %u\n",
+                       pitch, mode_cmd->width * format->stride_bpp);
+               ret = -EINVAL;
+               goto fail;
+       }

-               if (pitch % format->stride_bpp != 0) {
-                       dev_err(dev->dev,
-                               "buffer pitch (%d bytes) is not a multiple of 
pixel size (%d bytes)\n",
-                               pitch, format->stride_bpp);
-                       ret = -EINVAL;
-                       goto fail;
-               }
+       if (pitch % format->stride_bpp != 0) {
+               dev_err(dev->dev,
+                       "buffer pitch (%u bytes) is not a multiple of pixel 
size (%u bytes)\n",
+                       pitch, format->stride_bpp);
+               ret = -EINVAL;
+               goto fail;
+       }
+
+       for (i = 0; i < format->num_planes; i++) {
+               struct plane *plane = &omap_fb->planes[i];
+               unsigned int size;

                size = pitch * mode_cmd->height / format->sub_y[i];

                if (size > (omap_gem_mmap_size(bos[i]) - mode_cmd->offsets[i])) 
{
-                       dev_err(dev->dev, "provided buffer object is too small! 
%d < %d\n",
-                                       bos[i]->size - mode_cmd->offsets[i], 
size);
-                       ret = -EINVAL;
-                       goto fail;
-               }
-
-               if (i > 0 && pitch != mode_cmd->pitches[i - 1]) {
                        dev_err(dev->dev,
-                               "pitches are not the same between framebuffer 
planes %d != %d\n",
-                               pitch, mode_cmd->pitches[i - 1]);
+                               "provided buffer object is too small! %d < 
%d\n",
+                               bos[i]->size - mode_cmd->offsets[i], size);
                        ret = -EINVAL;
                        goto fail;
                }
-- 
2.7.3

Reply via email to