aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2009-12-06 22:29:51 -0500
committerDave Airlie <airlied@redhat.com>2009-12-06 22:29:51 -0500
commit64bffd03756249e11b8651ccf33ac3a50a93ed4c (patch)
tree70201e8aaab4131bf94ed6d17e20a9c857c87b37 /drivers
parent4f15d24adb39803ba7b9363d0bb5dd714a6706f6 (diff)
drm/radeon/kms: fix RS600 MC setup.
Again we try to put VRAM at 0, and it didn't work on this chipset, reports of corrupt RAM appeared on irc and bugzilla. Fix the vram location according to what the BIOS setup, I'm not 100% sure we don't need the same thing on rs690/rs780/rs880, we probably should do it there just in case as its what the DDX does. Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gpu/drm/radeon/rs600.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/drivers/gpu/drm/radeon/rs600.c b/drivers/gpu/drm/radeon/rs600.c
index 11a1da0fc76b..3be456b78191 100644
--- a/drivers/gpu/drm/radeon/rs600.c
+++ b/drivers/gpu/drm/radeon/rs600.c
@@ -45,6 +45,20 @@
45void rs600_gpu_init(struct radeon_device *rdev); 45void rs600_gpu_init(struct radeon_device *rdev);
46int rs600_mc_wait_for_idle(struct radeon_device *rdev); 46int rs600_mc_wait_for_idle(struct radeon_device *rdev);
47 47
48int rs600_mc_init(struct radeon_device *rdev)
49{
50 /* read back the MC value from the hw */
51 uint32_t mc_fb_loc;
52 int r;
53
54 mc_fb_loc = RREG32_MC(R_000004_MC_FB_LOCATION);
55 rdev->mc.vram_location = G_000004_MC_FB_START(mc_fb_loc) << 16;
56 rdev->mc.gtt_location = 0xffffffffUL;
57 r = radeon_mc_setup(rdev);
58 if (r)
59 return r;
60 return 0;
61}
48/* 62/*
49 * GART. 63 * GART.
50 */ 64 */
@@ -505,7 +519,7 @@ int rs600_init(struct radeon_device *rdev)
505 /* Get vram informations */ 519 /* Get vram informations */
506 rs600_vram_info(rdev); 520 rs600_vram_info(rdev);
507 /* Initialize memory controller (also test AGP) */ 521 /* Initialize memory controller (also test AGP) */
508 r = r420_mc_init(rdev); 522 r = rs600_mc_init(rdev);
509 if (r) 523 if (r)
510 return r; 524 return r;
511 rs600_debugfs(rdev); 525 rs600_debugfs(rdev);