Bug#575681: xserver-xorg-video-radeon: shows severe artifacts since switching to KMS
- To: Michel Dänzer <daenzer@debian.org>
- Cc: 575681@bugs.debian.org
- Subject: Bug#575681: xserver-xorg-video-radeon: shows severe artifacts since switching to KMS
- From: Fabian Greffrath <fabian@greffrath.com>
- Date: Sat, 03 Apr 2010 16:37:28 +0200
- Message-id: <1270305448.2696.7.camel@beppo>
- Reply-to: Fabian Greffrath <fabian@greffrath.com>, 575681@bugs.debian.org
- In-reply-to: <1270119572.28518.94.camel@thor.local>
- References: <20100328095536.5222.79568.reportbug@beppo> <a728f9f91003280950l68b105a6u8c74a60c4b85efb4@mail.gmail.com> <1270035513.2411.2.camel@beppo> <1270038899.28518.28.camel@thor.local> <4BB44BFF.5090805@greffrath.com> <1270111163.28518.85.camel@thor.local> <4BB46CEC.1060805@greffrath.com> <1270118163.28518.93.camel@thor.local> <4BB47B42.8090903@greffrath.com> <1270119572.28518.94.camel@thor.local>
Dear Michel,
Am Donnerstag, den 01.04.2010, 12:59 +0200 schrieb Michel Dänzer:
> > Will try to test it within the next few days.
> Great, thanks.
I tried the patch and can confirm that it works [*] and that it solves
the actual issue: No more artifacts in X for me. Thank you very much!
dmesg now shows the following line:
$ dmesg | grep -i pipe
[ 5.466112] [drm] radeon: 1 quad pipes, 1 Z pipes initialized.
[*] That is, I don't know which version of the kernel you used to create
the patch, but I had to slightly modify it a bit. The attached version
applies perfectly against version 2.6.32-10 in Debian.
Dear Kernel team, please apply this patch. Furthermore I think it should
get integrated upstream. Thank you very much again to all involved!
Cheers,
Fabian
>From ac8c8618c625039ec29870c2a9c36733695ecd56 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michel=20D=C3=A4nzer?= <daenzer@vmware.com>
Date: Thu, 1 Apr 2010 10:18:09 +0200
Subject: [PATCH] drm/radeon: R300 AD only has one quad pipe.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Gleaned from the Mesa code.
Signed-off-by: Michel Dänzer <daenzer@vmware.com>
---
drivers/gpu/drm/radeon/r300.c | 6 +++---
drivers/gpu/drm/radeon/radeon_cp.c | 10 ++++++----
2 files changed, 9 insertions(+), 7 deletions(-)
--- linux-2.6-2.6.32.orig/drivers/gpu/drm/radeon/r300.c
+++ linux-2.6-2.6.32/drivers/gpu/drm/radeon/r300.c
@@ -345,12 +345,12 @@
uint32_t gb_tile_config, tmp;
r100_hdp_reset(rdev);
- /* FIXME: rv380 one pipes ? */
- if ((rdev->family == CHIP_R300) || (rdev->family == CHIP_R350)) {
+ if ((rdev->family == CHIP_R300 && rdev->pdev->device != 0x4144) ||
+ (rdev->family == CHIP_R350)) {
/* r300,r350 */
rdev->num_gb_pipes = 2;
} else {
- /* rv350,rv370,rv380 */
+ /* rv350,rv370,rv380,r300 AD */
rdev->num_gb_pipes = 1;
}
rdev->num_z_pipes = 1;
--- linux-2.6-2.6.32.orig/drivers/gpu/drm/radeon/radeon_cp.c
+++ linux-2.6-2.6.32/drivers/gpu/drm/radeon/radeon_cp.c
@@ -417,8 +417,9 @@
return -EBUSY;
}
-static void radeon_init_pipes(drm_radeon_private_t *dev_priv)
+static void radeon_init_pipes(struct drm_device *dev)
{
+ drm_radeon_private_t *dev_priv = dev->dev_private;
uint32_t gb_tile_config, gb_pipe_sel = 0;
if ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV530) {
@@ -436,11 +437,12 @@
dev_priv->num_gb_pipes = ((gb_pipe_sel >> 12) & 0x3) + 1;
} else {
/* R3xx */
- if (((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_R300) ||
+ if (((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_R300 &&
+ dev->pdev->device != 0x4144) ||
((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_R350)) {
dev_priv->num_gb_pipes = 2;
} else {
- /* R3Vxx */
+ /* RV3xx/R300 AD */
dev_priv->num_gb_pipes = 1;
}
}
@@ -736,7 +738,7 @@
/* setup the raster pipes */
if ((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_R300)
- radeon_init_pipes(dev_priv);
+ radeon_init_pipes(dev);
/* Reset the CP ring */
radeon_do_cp_reset(dev_priv);
Reply to: