All of lore.kernel.org
 help / color / mirror / Atom feed
From: Takashi Iwai <tiwai@suse.de>
To: dri-devel@lists.freedesktop.org
Cc: Egbert Eich <eich@suse.de>, Dave Airlie <airlied@redhat.com>,
	Mathieu Larouche <mathieu.larouche@matrox.com>,
	Daniel Vetter <daniel.vetter@ffwll.ch>
Subject: [PATCH 11/14] drm/mgag200: Consolidate depth/bpp handling
Date: Tue, 18 Jul 2017 16:43:17 +0200	[thread overview]
Message-ID: <20170718144320.8354-12-tiwai@suse.de> (raw)
In-Reply-To: <20170718144320.8354-1-tiwai@suse.de>

From: Egbert Eich <eich@suse.de>

The depth/bpp handling for chips with limited memory in commit
918be888d613 ("drm/mgag200: on cards with < 2MB VRAM default to
16-bit") was incomplete: the bpp limits were applied to mode
validation.

This consolidates dpeth/bpp handling, adds it to mode validation
and moves the code which reads the command line specified depth
into the correct location.

Fixes: 918be888d613 ("drm/mgag200: on cards with < 2MB VRAM default to 16-bit")
Signed-off-by: Egbert Eich <eich@suse.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
---
 drivers/gpu/drm/mgag200/mgag200_drv.h  |  2 ++
 drivers/gpu/drm/mgag200/mgag200_fb.c   |  7 +------
 drivers/gpu/drm/mgag200/mgag200_main.c |  9 ++++++---
 drivers/gpu/drm/mgag200/mgag200_mode.c | 14 +++++++-------
 4 files changed, 16 insertions(+), 16 deletions(-)

diff --git a/drivers/gpu/drm/mgag200/mgag200_drv.h b/drivers/gpu/drm/mgag200/mgag200_drv.h
index 1ba559c93b8f..9d7ae61ce915 100644
--- a/drivers/gpu/drm/mgag200/mgag200_drv.h
+++ b/drivers/gpu/drm/mgag200/mgag200_drv.h
@@ -209,6 +209,8 @@ struct mga_device {
 	int				has_sdram;
 	struct drm_display_mode		mode;
 
+	int preferred_bpp;
+
 	int bpp_shifts[4];
 
 	int fb_mtrr;
diff --git a/drivers/gpu/drm/mgag200/mgag200_fb.c b/drivers/gpu/drm/mgag200/mgag200_fb.c
index bb9a4c409dc0..173aed918183 100644
--- a/drivers/gpu/drm/mgag200/mgag200_fb.c
+++ b/drivers/gpu/drm/mgag200/mgag200_fb.c
@@ -267,11 +267,6 @@ 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)
@@ -294,7 +289,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);
 
-	ret = drm_fb_helper_initial_config(&mfbdev->helper, bpp_sel);
+	ret = drm_fb_helper_initial_config(&mfbdev->helper, mdev->preferred_bpp);
 	if (ret)
 		goto err_fb_setup;
 
diff --git a/drivers/gpu/drm/mgag200/mgag200_main.c b/drivers/gpu/drm/mgag200/mgag200_main.c
index 73614154a5ef..2ec76d6615a8 100644
--- a/drivers/gpu/drm/mgag200/mgag200_main.c
+++ b/drivers/gpu/drm/mgag200/mgag200_main.c
@@ -339,10 +339,13 @@ int mgag200_driver_load(struct drm_device *dev, unsigned long flags)
 
 	drm_mode_config_init(dev);
 	dev->mode_config.funcs = (void *)&mga_mode_funcs;
-	if (IS_G200_SE(mdev) && mdev->mc.vram_size < (2048*1024))
-		dev->mode_config.preferred_depth = 16;
-	else
+	if (IS_G200_SE(mdev) && mdev->mc.vram_size < (2048*1024)) {
+		/* prefer 16bpp on low end gpus with limited VRAM */
+		mdev->preferred_bpp = dev->mode_config.preferred_depth = 16;
+	} else {
+		mdev->preferred_bpp = 32;
 		dev->mode_config.preferred_depth = 24;
+	}
 	dev->mode_config.prefer_shadow = 1;
 
 	r = mgag200_modeset_init(mdev);
diff --git a/drivers/gpu/drm/mgag200/mgag200_mode.c b/drivers/gpu/drm/mgag200/mgag200_mode.c
index a07f67ed6e4a..77b8efcd3c65 100644
--- a/drivers/gpu/drm/mgag200/mgag200_mode.c
+++ b/drivers/gpu/drm/mgag200/mgag200_mode.c
@@ -1705,9 +1705,15 @@ static int mga_vga_mode_valid(struct drm_connector *connector,
 {
 	struct drm_device *dev = connector->dev;
 	struct mga_device *mdev = (struct mga_device*)dev->dev_private;
-	int bpp = 32;
+	int bpp;
 	int lace;
 
+	bpp = mdev->preferred_bpp;
+	/* Validate the mode input by the user */
+	if (connector->cmdline_mode.specified &&
+	    connector->cmdline_mode.bpp_specified)
+		bpp = connector->cmdline_mode.bpp;
+
 	lace = (mode->flags & DRM_MODE_FLAG_INTERLACE) ? 2 : 1;
 	if (IS_G200_SE(mdev)) {
 		if (mdev->unique_rev_id == 0x01) {
@@ -1767,12 +1773,6 @@ static int mga_vga_mode_valid(struct drm_connector *connector,
 		return MODE_BAD;
 	}
 
-	/* Validate the mode input by the user */
-	if (connector->cmdline_mode.specified) {
-		if (connector->cmdline_mode.bpp_specified)
-			bpp = connector->cmdline_mode.bpp;
-	}
-
 	if ((mode->hdisplay * mode->vdisplay * (bpp/8)) > mdev->mc.vram_size) {
 		if (connector->cmdline_mode.specified)
 			connector->cmdline_mode.specified = false;
-- 
2.13.2

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

  parent reply	other threads:[~2017-07-18 14:43 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-07-18 14:43 [PATCH 00/14] mgag200 fixes Takashi Iwai
2017-07-18 14:43 ` [PATCH 01/14] drm/mgag200: Add doublescan and interlace support Takashi Iwai
2017-07-18 14:43 ` [PATCH 02/14] drm/mgag200: Add additional limits for certain G200 variants Takashi Iwai
2017-07-18 14:43 ` [PATCH 03/14] drm/mgag200: Fix memleak in error path in mgag200_bo_create() Takashi Iwai
2017-07-18 14:43 ` [PATCH 04/14] drm/mgag200: Free container instead of member in mga_user_framebuffer_destroy() Takashi Iwai
2017-07-18 14:43 ` [PATCH 05/14] drm/mgag200: Initialize data needed to map fbdev memory Takashi Iwai
2017-07-18 14:43 ` [PATCH 06/14] drm/mgag200: Simplify function mgag200_ttm_placement() Takashi Iwai
2017-07-18 14:43 ` [PATCH 07/14] drm/mgag200: Add support for MATROX PCI device IDs 0x520 and 0x521 Takashi Iwai
2017-07-20  4:17   ` Dave Airlie
2017-07-20  9:47     ` Takashi Iwai
2017-07-20 15:05       ` Egbert Eich
2017-07-18 14:43 ` [PATCH 08/14] drm/mgag200: Cleanup cursor BOs properly Takashi Iwai
2017-07-18 14:43 ` [PATCH 09/14] drm/mgag200: Add missing drm_connector_unregister() Takashi Iwai
2017-07-19  8:44   ` Takashi Iwai
2017-07-20  8:15     ` Daniel Vetter
2017-07-18 14:43 ` [PATCH 10/14] drm/mgag200: Don't use crtc_* parameters for validation Takashi Iwai
2017-07-19  6:38   ` Daniel Vetter
2017-07-18 14:43 ` Takashi Iwai [this message]
2017-07-20 11:58   ` [PATCH 11/14] drm/mgag200: Consolidate depth/bpp handling Paul Menzel
2017-07-20 12:08     ` Takashi Iwai
2017-07-18 14:43 ` [PATCH 12/14] drm/mgag200: Add command line option to specify preferred depth Takashi Iwai
2017-07-18 14:43 ` [PATCH 13/14] drm/mgag200: Add mode validation debugging code Takashi Iwai
2017-07-18 14:43 ` [PATCH 14/14] drm/mgag200: Implement basic PM support Takashi Iwai
2017-08-01 19:25 ` [PATCH 00/14] mgag200 fixes Mathieu Larouche
2017-08-01 21:18   ` Takashi Iwai

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170718144320.8354-12-tiwai@suse.de \
    --to=tiwai@suse.de \
    --cc=airlied@redhat.com \
    --cc=daniel.vetter@ffwll.ch \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=eich@suse.de \
    --cc=mathieu.larouche@matrox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.