drm/mgag200: on cards with < 2MB VRAM default to 16-bit
authorDave Airlie <airlied@redhat.com>
Tue, 21 Jan 2014 06:47:46 +0000 (01:47 -0500)
committerDave Airlie <airlied@redhat.com>
Thu, 23 Jan 2014 01:01:35 +0000 (11:01 +1000)
This aligns with what the userspace -mga driver does in
the same situation.

Signed-off-by: Dave Airlie <airlied@redhat.com>
drivers/gpu/drm/mgag200/mgag200_fb.c
drivers/gpu/drm/mgag200/mgag200_main.c

index 964f58cee5ea67b37f02e680b0f1ab7ebb3e5ed3..005b60aa2a004c45317002a2dcf509e567206622 100644 (file)
@@ -282,6 +282,11 @@ int mgag200_fbdev_init(struct mga_device *mdev)
 {
        struct mga_fbdev *mfbdev;
        int ret;
+       int bpp_sel = 32;
+
+       /* prefer 16bpp on low end gpus with limited VRAM */
+       if (IS_G200_SE(mdev) && mdev->mc.vram_size < (2048*1024))
+               bpp_sel = 16;
 
        mfbdev = devm_kzalloc(mdev->dev->dev, sizeof(struct mga_fbdev), GFP_KERNEL);
        if (!mfbdev)
@@ -301,7 +306,7 @@ int mgag200_fbdev_init(struct mga_device *mdev)
        /* disable all the possible outputs/crtcs before entering KMS mode */
        drm_helper_disable_unused_functions(mdev->dev);
 
-       drm_fb_helper_initial_config(&mfbdev->helper, 32);
+       drm_fb_helper_initial_config(&mfbdev->helper, bpp_sel);
 
        return 0;
 }
index a1bfe72583647a7091e17aa37bbcbbe871782fec..26868e5c55b076352188d34962b928a87a64d1a9 100644 (file)
@@ -217,7 +217,10 @@ int mgag200_driver_load(struct drm_device *dev, unsigned long flags)
 
        drm_mode_config_init(dev);
        dev->mode_config.funcs = (void *)&mga_mode_funcs;
-       dev->mode_config.preferred_depth = 24;
+       if (IS_G200_SE(mdev) && mdev->mc.vram_size < (2048*1024))
+               dev->mode_config.preferred_depth = 16;
+       else
+               dev->mode_config.preferred_depth = 24;
        dev->mode_config.prefer_shadow = 1;
 
        r = mgag200_modeset_init(mdev);