aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>2005-12-26 20:49:33 -0500
committerLinus Torvalds <torvalds@g5.osdl.org>2005-12-27 22:57:52 -0500
commit67dbb4ea33731415fe09c62149a34f472719ac1d (patch)
tree5d417d821fb181ce683c60dabcfa33d8c6f65fb8
parent5ab4a6c81eb3dbe32361791d1535f9153f79b0ed (diff)
[PATCH] Fix more radeon GART start calculation cases
As reported by Jules Villard <jvillard@ens-lyon.fr> and some others, the recent GART aperture start reconfiguration causes problems on some setups. What I _think_ might be happening is that the X server is also trying to muck around with the card memory map and is forcing it back into a wrong setting that also happens to no longer match what the DRM wants to do and blows up. There are bugs all over the place in that code (and still some bugs in the DRM as well anyway). This patch attempts to avoid that by using the largest of the 2 values, which I think will cause it to behave as it used to for you and will still fix the problem with machines that have an aperture size smaller than the video memory. Acked-by: Jules Villard <jvillard@ens-lyon.fr> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r--drivers/char/drm/radeon_cp.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/char/drm/radeon_cp.c b/drivers/char/drm/radeon_cp.c
index 501e557cbc86..b517ae515801 100644
--- a/drivers/char/drm/radeon_cp.c
+++ b/drivers/char/drm/radeon_cp.c
@@ -1312,7 +1312,7 @@ static void radeon_set_pcigart(drm_radeon_private_t * dev_priv, int on)
1312static int radeon_do_init_cp(drm_device_t * dev, drm_radeon_init_t * init) 1312static int radeon_do_init_cp(drm_device_t * dev, drm_radeon_init_t * init)
1313{ 1313{
1314 drm_radeon_private_t *dev_priv = dev->dev_private; 1314 drm_radeon_private_t *dev_priv = dev->dev_private;
1315 unsigned int mem_size; 1315 unsigned int mem_size, aper_size;
1316 1316
1317 DRM_DEBUG("\n"); 1317 DRM_DEBUG("\n");
1318 1318
@@ -1527,7 +1527,9 @@ static int radeon_do_init_cp(drm_device_t * dev, drm_radeon_init_t * init)
1527 mem_size = RADEON_READ(RADEON_CONFIG_MEMSIZE); 1527 mem_size = RADEON_READ(RADEON_CONFIG_MEMSIZE);
1528 if (mem_size == 0) 1528 if (mem_size == 0)
1529 mem_size = 0x800000; 1529 mem_size = 0x800000;
1530 dev_priv->gart_vm_start = dev_priv->fb_location + mem_size; 1530 aper_size = max(RADEON_READ(RADEON_CONFIG_APER_SIZE), mem_size);
1531
1532 dev_priv->gart_vm_start = dev_priv->fb_location + aper_size;
1531 1533
1532#if __OS_HAS_AGP 1534#if __OS_HAS_AGP
1533 if (!dev_priv->is_pci) 1535 if (!dev_priv->is_pci)