drm/radeon/kms: rs6xx/rs740: clamp vram to aperture size
authorAlex Deucher <alexdeucher@gmail.com>
Thu, 3 Dec 2009 21:28:02 +0000 (16:28 -0500)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 18 Dec 2009 22:04:38 +0000 (14:04 -0800)
commit 0088dbdb809e8799cb8f26da5ac64b15201fa99d upstream.

Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/gpu/drm/radeon/rs600.c
drivers/gpu/drm/radeon/rs690.c

index c8d987d4d84e612c48182ce84cbd3edd605b7493..4444f48c496eb0d4f6bf88405a3700470874e527 100644 (file)
@@ -301,9 +301,7 @@ int rs600_mc_wait_for_idle(struct radeon_device *rdev)
 
 void rs600_gpu_init(struct radeon_device *rdev)
 {
-       /* FIXME: HDP same place on rs600 ? */
        r100_hdp_reset(rdev);
-       /* FIXME: is this correct ? */
        r420_pipes_init(rdev);
        /* Wait for mc idle */
        if (rs600_mc_wait_for_idle(rdev))
@@ -312,7 +310,6 @@ void rs600_gpu_init(struct radeon_device *rdev)
 
 void rs600_vram_info(struct radeon_device *rdev)
 {
-       /* FIXME: to do or is these values sane ? */
        rdev->mc.vram_is_ddr = true;
        rdev->mc.vram_width = 128;
 
@@ -321,6 +318,12 @@ void rs600_vram_info(struct radeon_device *rdev)
 
        rdev->mc.aper_base = drm_get_resource_start(rdev->ddev, 0);
        rdev->mc.aper_size = drm_get_resource_len(rdev->ddev, 0);
+
+       if (rdev->mc.mc_vram_size > rdev->mc.aper_size)
+               rdev->mc.mc_vram_size = rdev->mc.aper_size;
+
+       if (rdev->mc.real_vram_size > rdev->mc.aper_size)
+               rdev->mc.real_vram_size = rdev->mc.aper_size;
 }
 
 void rs600_bandwidth_update(struct radeon_device *rdev)
index 787584f55034bf24c2013098f0ac9bcda7cdaf02..b12ff76c19d395ab06bdc81dd6edf92782439c61 100644 (file)
@@ -134,7 +134,7 @@ void rs690_vram_info(struct radeon_device *rdev)
        fixed20_12 a;
 
        rs400_gart_adjust_size(rdev);
-       /* DDR for all card after R300 & IGP */
+
        rdev->mc.vram_is_ddr = true;
        rdev->mc.vram_width = 128;
 
@@ -143,6 +143,13 @@ void rs690_vram_info(struct radeon_device *rdev)
 
        rdev->mc.aper_base = drm_get_resource_start(rdev->ddev, 0);
        rdev->mc.aper_size = drm_get_resource_len(rdev->ddev, 0);
+
+       if (rdev->mc.mc_vram_size > rdev->mc.aper_size)
+               rdev->mc.mc_vram_size = rdev->mc.aper_size;
+
+       if (rdev->mc.real_vram_size > rdev->mc.aper_size)
+               rdev->mc.real_vram_size = rdev->mc.aper_size;
+
        rs690_pm_info(rdev);
        /* FIXME: we should enforce default clock in case GPU is not in
         * default setup