diff options
| author | 2019-10-10 13:59:59 +0200 | |
|---|---|---|
| committer | 2019-10-11 17:02:40 +0300 | |
| commit | 4ecc5fbcc4d43e702a473f21fee045f55fc3beb5 (patch) | |
| tree | c9040160ec6b51648e735174a379e692ab35bc11 /drivers/gpu/drm/omapdrm/omap_gem.c | |
| parent | drm/omap: cleanup OMAP_BO_SCANOUT use (diff) | |
| download | wireguard-linux-4ecc5fbcc4d43e702a473f21fee045f55fc3beb5.tar.xz wireguard-linux-4ecc5fbcc4d43e702a473f21fee045f55fc3beb5.zip | |
drm/omap: add omap_gem_validate_flags()
Add a helper function omap_gem_validate_flags() which validates the
omap_bo flags passed from the userspace.
Also drop the dev_err() message, as the userspace can cause that at
will.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Reviewed-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20191010120000.1421-8-jjhiblot@ti.com
Diffstat (limited to 'drivers/gpu/drm/omapdrm/omap_gem.c')
| -rw-r--r-- | drivers/gpu/drm/omapdrm/omap_gem.c | 40 | 
1 files changed, 35 insertions, 5 deletions
| diff --git a/drivers/gpu/drm/omapdrm/omap_gem.c b/drivers/gpu/drm/omapdrm/omap_gem.c index 27e0a2f8508a..e518d93ca6df 100644 --- a/drivers/gpu/drm/omapdrm/omap_gem.c +++ b/drivers/gpu/drm/omapdrm/omap_gem.c @@ -1133,6 +1133,38 @@ void omap_gem_free_object(struct drm_gem_object *obj)  	kfree(omap_obj);  } +static bool omap_gem_validate_flags(struct drm_device *dev, u32 flags) +{ +	struct omap_drm_private *priv = dev->dev_private; + +	switch (flags & OMAP_BO_CACHE_MASK) { +	case OMAP_BO_CACHED: +	case OMAP_BO_WC: +	case OMAP_BO_CACHE_MASK: +		break; + +	default: +		return false; +	} + +	if (flags & OMAP_BO_TILED_MASK) { +		if (!priv->usergart) +			return false; + +		switch (flags & OMAP_BO_TILED_MASK) { +		case OMAP_BO_TILED_8: +		case OMAP_BO_TILED_16: +		case OMAP_BO_TILED_32: +			break; + +		default: +			return false; +		} +	} + +	return true; +} +  /* GEM buffer object constructor */  struct drm_gem_object *omap_gem_new(struct drm_device *dev,  		union omap_gem_size gsize, u32 flags) @@ -1144,13 +1176,11 @@ struct drm_gem_object *omap_gem_new(struct drm_device *dev,  	size_t size;  	int ret; +	if (!omap_gem_validate_flags(dev, flags)) +		return NULL; +  	/* Validate the flags and compute the memory and cache flags. */  	if (flags & OMAP_BO_TILED_MASK) { -		if (!priv->usergart) { -			dev_err(dev->dev, "Tiled buffers require DMM\n"); -			return NULL; -		} -  		/*  		 * Tiled buffers are always shmem paged backed. When they are  		 * scanned out, they are remapped into DMM/TILER. | 
