On Mon, Oct 28, 2019 at 04:49:21PM +0100, Thomas Zimmermann wrote: > Each video mode's primary plane requires a minimum amount of video > memory. For double buffering, this is at most half the available > VRAM. Check this constraint. Acked-by: Gerd Hoffmann <kraxel@xxxxxxxxxx> > > Signed-off-by: Thomas Zimmermann <tzimmermann@xxxxxxx> > --- > drivers/gpu/drm/ast/ast_main.c | 25 ++++++++++++++++++++++++- > 1 file changed, 24 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/ast/ast_main.c b/drivers/gpu/drm/ast/ast_main.c > index 3a9b4cb73f2f..48d57ab42955 100644 > --- a/drivers/gpu/drm/ast/ast_main.c > +++ b/drivers/gpu/drm/ast/ast_main.c > @@ -387,8 +387,31 @@ static int ast_get_dram_info(struct drm_device *dev) > return 0; > } > > +enum drm_mode_status ast_mode_config_mode_valid(struct drm_device *dev, > + const struct drm_display_mode *mode) > +{ > + static const unsigned long max_bpp = 4; /* DRM_FORMAT_XRGBA8888 */ > + > + struct ast_private *ast = dev->dev_private; > + unsigned long fbsize, fbpages, max_fbpages; > + > + /* To support double buffering, a framebuffer may not > + * consume more than half of the available VRAM. > + */ > + max_fbpages = (ast->vram_size / 2) >> PAGE_SHIFT; > + > + fbsize = mode->hdisplay * mode->vdisplay * max_bpp; > + fbpages = DIV_ROUND_UP(fbsize, PAGE_SIZE); > + > + if (fbpages > max_fbpages) > + return MODE_MEM; > + > + return MODE_OK; > +} > + > static const struct drm_mode_config_funcs ast_mode_funcs = { > - .fb_create = drm_gem_fb_create > + .fb_create = drm_gem_fb_create, > + .mode_valid = ast_mode_config_mode_valid, > }; > > static u32 ast_get_vram_info(struct drm_device *dev) > -- > 2.23.0 > _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel