drm/omap: verify that fb plane pitches are the same
authorTomi Valkeinen <tomi.valkeinen@ti.com>
Fri, 8 Jan 2016 13:51:02 +0000 (15:51 +0200)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Thu, 3 Mar 2016 15:36:43 +0000 (17:36 +0200)
The DSS hardware uses the same ROW_INC value for both Y and UV planes
for NV12 format. This means that the pitches of the Y and UV planes have
to match. omapdrm doesn't check this at the moment, and this can lead
into a broken NV12 fb on the screen.

This patch adds the check.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
drivers/gpu/drm/omapdrm/omap_fb.c

index ad202dfc1a49f5759f4983cd3c119ba7ce67b143..481512db265688ea8362179677c2ab2f6c012e7c 100644 (file)
@@ -449,6 +449,14 @@ struct drm_framebuffer *omap_framebuffer_init(struct drm_device *dev,
                        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]);
+                       ret = -EINVAL;
+                       goto fail;
+               }
+
                plane->bo     = bos[i];
                plane->offset = mode_cmd->offsets[i];
                plane->pitch  = pitch;