[PATCH 09/21] drm/omap: handle mismatching color format and buffer width

Daniel Vetter daniel at ffwll.ch
Fri Feb 27 05:01:58 PST 2015


On Thu, Feb 26, 2015 at 03:20:17PM +0200, Tomi Valkeinen wrote:
> omapdrm doesn't check if the width of the framebuffer and the color
> format's bits-per-pixel match.
> 
> For example, using a display with a width of 1280, and a buffer
> allocated with using 32 bits per pixel (i.e. 1280*4 = 5120 bytes), with
> a 24 bits per pixel color format, leads to the following mismatch:
> 5120/3 = 1706.666... bytes. This causes bad colors and a tilt on the
> screen.
> 
> Add a check into omapdrm to return an error if the user tries to use
> such a combination.
> 
> 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 2975096abdf5..bf98580223d0 100644
> --- a/drivers/gpu/drm/omapdrm/omap_fb.c
> +++ b/drivers/gpu/drm/omapdrm/omap_fb.c
> @@ -463,6 +463,14 @@ struct drm_framebuffer *omap_framebuffer_init(struct drm_device *dev,
>  			goto fail;
>  		}
>  
> +		if (mode_cmd->width % format->planes[i].stride_bpp != 0) {

width is in pixels. No idea what you're trying to check here, but this
probably isn't it.

Also drm checks that things fit into the specified pitch (which is in
bytes), see the pichtes[i] < width * cpp check in framebuffer_check.

Cheers, Daniel
> +			dev_err(dev->dev,
> +				"buffer width (%d) is not a multiple of pixel width (%d)\n",
> +				mode_cmd->width, format->planes[i].stride_bpp);
> +			ret = -EINVAL;
> +			goto fail;
> +		}
> +
>  		size = pitch * mode_cmd->height / format->planes[i].sub_y;
>  
>  		if (size > (omap_gem_mmap_size(bos[i]) - mode_cmd->offsets[i])) {
> -- 
> 2.3.0
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel

-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch


More information about the dri-devel mailing list