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 at ti.com>
---
 drivers/gpu/drm/omapdrm/omap_fb.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/drivers/gpu/drm/omapdrm/omap_fb.c 
b/drivers/gpu/drm/omapdrm/omap_fb.c
index ad202dfc1a49..481512db2656 100644
--- a/drivers/gpu/drm/omapdrm/omap_fb.c
+++ b/drivers/gpu/drm/omapdrm/omap_fb.c
@@ -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;
-- 
2.5.0

Reply via email to