[PATCH v4 09/14] drm: gma500: Replace drm_fb_get_bpp_depth() with drm_format_info()

Daniel Vetter daniel at ffwll.ch
Wed Sep 21 07:35:54 UTC 2016


On Thu, Sep 08, 2016 at 05:44:23PM +0300, Laurent Pinchart wrote:
> The driver uses drm_fb_get_bpp_depth() to check whether it can support
> the format requested by userspace when creating a framebuffer. This
> isn't the right API, as it doesn't differentiate between RGB formats
> other than on a depth and bpp basis.
> 
> Fixing this requires non trivial changes to the drivers internals. As a
> first step, replace usage of the drm_fb_get_bpp_depth() function with an
> equivalent check based on drm_format_info(). This is part of a wider
> effort to remove usage of the drm_fb_get_bpp_depth() function in
> drivers.
> 
> Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>

The real problem is that legady set_config doesn't check the plane format
lists, because that's a more recent invention ...

Reviewed-by: Daniel Vetter <daniel.vetter at ffwll.ch>

> ---
>  drivers/gpu/drm/gma500/framebuffer.c | 20 +++++++++-----------
>  1 file changed, 9 insertions(+), 11 deletions(-)
> 
> Cc: Patrik Jakobsson <patrik.r.jakobsson at gmail.com>
> 
> diff --git a/drivers/gpu/drm/gma500/framebuffer.c b/drivers/gpu/drm/gma500/framebuffer.c
> index 3a44e705db53..6cb92cc0bef8 100644
> --- a/drivers/gpu/drm/gma500/framebuffer.c
> +++ b/drivers/gpu/drm/gma500/framebuffer.c
> @@ -236,22 +236,20 @@ static int psb_framebuffer_init(struct drm_device *dev,
>  					const struct drm_mode_fb_cmd2 *mode_cmd,
>  					struct gtt_range *gt)
>  {
> -	u32 bpp, depth;
> +	const struct drm_format_info *info;
>  	int ret;
>  
> -	drm_fb_get_bpp_depth(mode_cmd->pixel_format, &depth, &bpp);
> +	/*
> +	 * Reject unknown formats, YUV formats, and formats with more than
> +	 * 4 bytes per pixel.
> +	 */
> +	info = drm_format_info(mode_cmd->pixel_format);
> +	if (!info || !info->depth || info->cpp[0] > 4)
> +		return -EINVAL;
>  
>  	if (mode_cmd->pitches[0] & 63)
>  		return -EINVAL;
> -	switch (bpp) {
> -	case 8:
> -	case 16:
> -	case 24:
> -	case 32:
> -		break;
> -	default:
> -		return -EINVAL;
> -	}
> +
>  	drm_helper_mode_fill_fb_struct(&fb->base, mode_cmd);
>  	fb->gtt = gt;
>  	ret = drm_framebuffer_init(dev, &fb->base, &psb_fb_funcs);
> -- 
> Regards,
> 
> Laurent Pinchart
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch


More information about the dri-devel mailing list