Commit 57b54ea6 authored by Michel Dänzer's avatar Michel Dänzer Committed by Dave Airlie

drm/radeon: R300 AD only has one quad pipe.

Gleaned from the Mesa code.

Fixes https://bugs.freedesktop.org/show_bug.cgi?id=27355 .
Signed-off-by: default avatarMichel Dänzer <daenzer@vmware.com>
Cc: stable@kernel.org
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
parent d668046c
...@@ -324,11 +324,12 @@ void r300_gpu_init(struct radeon_device *rdev) ...@@ -324,11 +324,12 @@ void r300_gpu_init(struct radeon_device *rdev)
r100_hdp_reset(rdev); r100_hdp_reset(rdev);
/* FIXME: rv380 one pipes ? */ /* 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 */ /* r300,r350 */
rdev->num_gb_pipes = 2; rdev->num_gb_pipes = 2;
} else { } else {
/* rv350,rv370,rv380 */ /* rv350,rv370,rv380,r300 AD */
rdev->num_gb_pipes = 1; rdev->num_gb_pipes = 1;
} }
rdev->num_z_pipes = 1; rdev->num_z_pipes = 1;
......
...@@ -417,8 +417,9 @@ static int radeon_do_wait_for_idle(drm_radeon_private_t * dev_priv) ...@@ -417,8 +417,9 @@ static int radeon_do_wait_for_idle(drm_radeon_private_t * dev_priv)
return -EBUSY; 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; uint32_t gb_tile_config, gb_pipe_sel = 0;
if ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV530) { if ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV530) {
...@@ -436,11 +437,12 @@ static void radeon_init_pipes(drm_radeon_private_t *dev_priv) ...@@ -436,11 +437,12 @@ static void radeon_init_pipes(drm_radeon_private_t *dev_priv)
dev_priv->num_gb_pipes = ((gb_pipe_sel >> 12) & 0x3) + 1; dev_priv->num_gb_pipes = ((gb_pipe_sel >> 12) & 0x3) + 1;
} else { } else {
/* R3xx */ /* 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->flags & RADEON_FAMILY_MASK) == CHIP_R350)) {
dev_priv->num_gb_pipes = 2; dev_priv->num_gb_pipes = 2;
} else { } else {
/* R3Vxx */ /* RV3xx/R300 AD */
dev_priv->num_gb_pipes = 1; dev_priv->num_gb_pipes = 1;
} }
} }
...@@ -736,7 +738,7 @@ static int radeon_do_engine_reset(struct drm_device * dev) ...@@ -736,7 +738,7 @@ static int radeon_do_engine_reset(struct drm_device * dev)
/* setup the raster pipes */ /* setup the raster pipes */
if ((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_R300) if ((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_R300)
radeon_init_pipes(dev_priv); radeon_init_pipes(dev);
/* Reset the CP ring */ /* Reset the CP ring */
radeon_do_cp_reset(dev_priv); radeon_do_cp_reset(dev_priv);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment