[PATCH 2/9] drm/ast: Check video-mode requirements against VRAM size

Gerd Hoffmann kraxel at redhat.com
Tue Nov 5 09:42:43 UTC 2019


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 at redhat.com>

> 
> Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de>
> ---
>  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
> 



More information about the dri-devel mailing list