Browse Source

drm/radeon/kms: rs6xx/rs740: clamp vram to aperture size

Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
Cc: stable@kernel.org
Signed-off-by: Dave Airlie <airlied@redhat.com>
Alex Deucher 15 years ago
parent
commit
0088dbdb80
2 changed files with 14 additions and 4 deletions
  1. 6 3
      drivers/gpu/drm/radeon/rs600.c
  2. 8 1
      drivers/gpu/drm/radeon/rs690.c

+ 6 - 3
drivers/gpu/drm/radeon/rs600.c

@@ -306,9 +306,7 @@ int rs600_mc_wait_for_idle(struct radeon_device *rdev)
 
 
 void rs600_gpu_init(struct radeon_device *rdev)
 void rs600_gpu_init(struct radeon_device *rdev)
 {
 {
-	/* FIXME: HDP same place on rs600 ? */
 	r100_hdp_reset(rdev);
 	r100_hdp_reset(rdev);
-	/* FIXME: is this correct ? */
 	r420_pipes_init(rdev);
 	r420_pipes_init(rdev);
 	/* Wait for mc idle */
 	/* Wait for mc idle */
 	if (rs600_mc_wait_for_idle(rdev))
 	if (rs600_mc_wait_for_idle(rdev))
@@ -317,7 +315,6 @@ void rs600_gpu_init(struct radeon_device *rdev)
 
 
 void rs600_vram_info(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_is_ddr = true;
 	rdev->mc.vram_width = 128;
 	rdev->mc.vram_width = 128;
 
 
@@ -326,6 +323,12 @@ void rs600_vram_info(struct radeon_device *rdev)
 
 
 	rdev->mc.aper_base = drm_get_resource_start(rdev->ddev, 0);
 	rdev->mc.aper_base = drm_get_resource_start(rdev->ddev, 0);
 	rdev->mc.aper_size = drm_get_resource_len(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)
 void rs600_bandwidth_update(struct radeon_device *rdev)

+ 8 - 1
drivers/gpu/drm/radeon/rs690.c

@@ -134,7 +134,7 @@ void rs690_vram_info(struct radeon_device *rdev)
 	fixed20_12 a;
 	fixed20_12 a;
 
 
 	rs400_gart_adjust_size(rdev);
 	rs400_gart_adjust_size(rdev);
-	/* DDR for all card after R300 & IGP */
+
 	rdev->mc.vram_is_ddr = true;
 	rdev->mc.vram_is_ddr = true;
 	rdev->mc.vram_width = 128;
 	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_base = drm_get_resource_start(rdev->ddev, 0);
 	rdev->mc.aper_size = drm_get_resource_len(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);
 	rs690_pm_info(rdev);
 	/* FIXME: we should enforce default clock in case GPU is not in
 	/* FIXME: we should enforce default clock in case GPU is not in
 	 * default setup
 	 * default setup