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@xxxxxxxxxxxxxxxx> 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@xxxxxxxx> > --- > drivers/gpu/drm/gma500/framebuffer.c | 20 +++++++++----------- > 1 file changed, 9 insertions(+), 11 deletions(-) > > Cc: Patrik Jakobsson <patrik.r.jakobsson@xxxxxxxxx> > > 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@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/dri-devel -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel