vmwgfx: Be more strict with fb depths when using screen objects
authorJakob Bornecrantz <jakob@vmware.com>
Tue, 4 Oct 2011 18:13:34 +0000 (20:13 +0200)
committerDave Airlie <airlied@redhat.com>
Wed, 5 Oct 2011 09:17:33 +0000 (10:17 +0100)
Signed-off-by: Jakob Bornecrantz <jakob@vmware.com>
Reviewed-by: Thomas Hellstrom <thellstrom@vmware.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
drivers/gpu/drm/vmwgfx/vmwgfx_kms.c

index b4b9aa9..0921cce 100644 (file)
@@ -776,6 +776,33 @@ static int vmw_kms_new_framebuffer_dmabuf(struct vmw_private *dev_priv,
                return -EINVAL;
        }
 
+       /* Limited framebuffer color depth support for screen objects */
+       if (dev_priv->sou_priv) {
+               switch (mode_cmd->depth) {
+               case 32:
+               case 24:
+                       /* Only support 32 bpp for 32 and 24 depth fbs */
+                       if (mode_cmd->bpp == 32)
+                               break;
+
+                       DRM_ERROR("Invalid color depth/bbp: %d %d\n",
+                                 mode_cmd->depth, mode_cmd->bpp);
+                       return -EINVAL;
+               case 16:
+               case 15:
+                       /* Only support 16 bpp for 16 and 15 depth fbs */
+                       if (mode_cmd->bpp == 16)
+                               break;
+
+                       DRM_ERROR("Invalid color depth/bbp: %d %d\n",
+                                 mode_cmd->depth, mode_cmd->bpp);
+                       return -EINVAL;
+               default:
+                       DRM_ERROR("Invalid color depth: %d\n", mode_cmd->depth);
+                       return -EINVAL;
+               }
+       }
+
        vfbd = kzalloc(sizeof(*vfbd), GFP_KERNEL);
        if (!vfbd) {
                ret = -ENOMEM;