aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/char/drm/drm_bufs.c
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2007-11-22 01:55:15 -0500
committerDave Airlie <airlied@redhat.com>2008-02-07 00:09:38 -0500
commit47a184a80800dd69abd1206eea1b961070ce2ca3 (patch)
tree8153346752a78eb81749478bfae3088dfc7d2144 /drivers/char/drm/drm_bufs.c
parentba8bbcf6ff4650712f64c0ef61139c73898e2165 (diff)
drm: fd.o bug #11895: Only add the AGP base to map offset if the caller didn't.
The i830 and newer intel 2D code adds the AGP base to map offsets already, because it wasn't doing the AGP enable which used to set dev->agp->base. Credit goes to Zhenyu for finding the issue. Signed-off-by: Dave Airlie <airlied@linux.ie>
Diffstat (limited to 'drivers/char/drm/drm_bufs.c')
-rw-r--r--drivers/char/drm/drm_bufs.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/drivers/char/drm/drm_bufs.c b/drivers/char/drm/drm_bufs.c
index 07b774fa3f38..bde64b84166e 100644
--- a/drivers/char/drm/drm_bufs.c
+++ b/drivers/char/drm/drm_bufs.c
@@ -229,11 +229,17 @@ static int drm_addmap_core(struct drm_device * dev, unsigned int offset,
229#ifdef __alpha__ 229#ifdef __alpha__
230 map->offset += dev->hose->mem_space->start; 230 map->offset += dev->hose->mem_space->start;
231#endif 231#endif
232 /* Note: dev->agp->base may actually be 0 when the DRM 232 /* In some cases (i810 driver), user space may have already
233 * is not in control of AGP space. But if user space is 233 * added the AGP base itself, because dev->agp->base previously
234 * it should already have added the AGP base itself. 234 * only got set during AGP enable. So, only add the base
235 * address if the map's offset isn't already within the
236 * aperture.
235 */ 237 */
236 map->offset += dev->agp->base; 238 if (map->offset < dev->agp->base ||
239 map->offset > dev->agp->base +
240 dev->agp->agp_info.aper_size * 1024 * 1024 - 1) {
241 map->offset += dev->agp->base;
242 }
237 map->mtrr = dev->agp->agp_mtrr; /* for getmap */ 243 map->mtrr = dev->agp->agp_mtrr; /* for getmap */
238 244
239 /* This assumes the DRM is in total control of AGP space. 245 /* This assumes the DRM is in total control of AGP space.