]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
drm/omap: add omap_gem_validate_flags()
authorTomi Valkeinen <tomi.valkeinen@ti.com>
Thu, 10 Oct 2019 11:59:59 +0000 (13:59 +0200)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Fri, 11 Oct 2019 14:02:40 +0000 (17:02 +0300)
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
drivers/gpu/drm/omapdrm/omap_gem.c

index 27e0a2f8508a1a9402714a0e71ed9effb50e2aa8..e518d93ca6df27fa0ec8028ccf5b7a28f6632443 100644 (file)
@@ -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.