diff options
author | Alex Deucher <alexdeucher@gmail.com> | 2010-12-15 11:04:10 -0500 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2010-12-15 23:55:45 -0500 |
commit | b4183e301ac1dfaf93e3e92fd70a0c3203c5a27d (patch) | |
tree | 377d9567ac04f79717fc9b58cdfd84b5f0bc21fa | |
parent | ca9693a17368041dd5416b0f1f93daaf7a5a5308 (diff) |
drm/radeon/kms: fix vram start calculation on ontario (v2)
Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
-rw-r--r-- | drivers/gpu/drm/radeon/evergreen.c | 6 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/evergreend.h | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/rv770.c | 13 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/rv770d.h | 1 |
4 files changed, 8 insertions, 13 deletions
diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c index 522d29b37007..f7d7477daffb 100644 --- a/drivers/gpu/drm/radeon/evergreen.c +++ b/drivers/gpu/drm/radeon/evergreen.c | |||
@@ -1134,6 +1134,12 @@ static void evergreen_mc_program(struct radeon_device *rdev) | |||
1134 | rdev->mc.vram_end >> 12); | 1134 | rdev->mc.vram_end >> 12); |
1135 | } | 1135 | } |
1136 | WREG32(MC_VM_SYSTEM_APERTURE_DEFAULT_ADDR, 0); | 1136 | WREG32(MC_VM_SYSTEM_APERTURE_DEFAULT_ADDR, 0); |
1137 | if (rdev->flags & RADEON_IS_IGP) { | ||
1138 | tmp = RREG32(MC_FUS_VM_FB_OFFSET) & 0x000FFFFF; | ||
1139 | tmp |= ((rdev->mc.vram_end >> 20) & 0xF) << 24; | ||
1140 | tmp |= ((rdev->mc.vram_start >> 20) & 0xF) << 20; | ||
1141 | WREG32(MC_FUS_VM_FB_OFFSET, tmp); | ||
1142 | } | ||
1137 | tmp = ((rdev->mc.vram_end >> 24) & 0xFFFF) << 16; | 1143 | tmp = ((rdev->mc.vram_end >> 24) & 0xFFFF) << 16; |
1138 | tmp |= ((rdev->mc.vram_start >> 24) & 0xFFFF); | 1144 | tmp |= ((rdev->mc.vram_start >> 24) & 0xFFFF); |
1139 | WREG32(MC_VM_FB_LOCATION, tmp); | 1145 | WREG32(MC_VM_FB_LOCATION, tmp); |
diff --git a/drivers/gpu/drm/radeon/evergreend.h b/drivers/gpu/drm/radeon/evergreend.h index 87fcaba76695..5b869ce86917 100644 --- a/drivers/gpu/drm/radeon/evergreend.h +++ b/drivers/gpu/drm/radeon/evergreend.h | |||
@@ -202,6 +202,7 @@ | |||
202 | #define MC_VM_AGP_BOT 0x202C | 202 | #define MC_VM_AGP_BOT 0x202C |
203 | #define MC_VM_AGP_BASE 0x2030 | 203 | #define MC_VM_AGP_BASE 0x2030 |
204 | #define MC_VM_FB_LOCATION 0x2024 | 204 | #define MC_VM_FB_LOCATION 0x2024 |
205 | #define MC_FUS_VM_FB_OFFSET 0x2898 | ||
205 | #define MC_VM_MB_L1_TLB0_CNTL 0x2234 | 206 | #define MC_VM_MB_L1_TLB0_CNTL 0x2234 |
206 | #define MC_VM_MB_L1_TLB1_CNTL 0x2238 | 207 | #define MC_VM_MB_L1_TLB1_CNTL 0x2238 |
207 | #define MC_VM_MB_L1_TLB2_CNTL 0x223C | 208 | #define MC_VM_MB_L1_TLB2_CNTL 0x223C |
diff --git a/drivers/gpu/drm/radeon/rv770.c b/drivers/gpu/drm/radeon/rv770.c index 7c2e0b19a558..645aa1fd7611 100644 --- a/drivers/gpu/drm/radeon/rv770.c +++ b/drivers/gpu/drm/radeon/rv770.c | |||
@@ -271,12 +271,6 @@ static void rv770_mc_program(struct radeon_device *rdev) | |||
271 | rdev->mc.vram_end >> 12); | 271 | rdev->mc.vram_end >> 12); |
272 | } | 272 | } |
273 | WREG32(MC_VM_SYSTEM_APERTURE_DEFAULT_ADDR, 0); | 273 | WREG32(MC_VM_SYSTEM_APERTURE_DEFAULT_ADDR, 0); |
274 | if (rdev->flags & RADEON_IS_IGP) { | ||
275 | tmp = RREG32(MC_FUS_VM_FB_OFFSET) & 0x000FFFFF; | ||
276 | tmp |= ((rdev->mc.vram_end >> 20) & 0xF) << 24; | ||
277 | tmp |= ((rdev->mc.vram_start >> 20) & 0xF) << 20; | ||
278 | WREG32(MC_FUS_VM_FB_OFFSET, tmp); | ||
279 | } | ||
280 | tmp = ((rdev->mc.vram_end >> 24) & 0xFFFF) << 16; | 274 | tmp = ((rdev->mc.vram_end >> 24) & 0xFFFF) << 16; |
281 | tmp |= ((rdev->mc.vram_start >> 24) & 0xFFFF); | 275 | tmp |= ((rdev->mc.vram_start >> 24) & 0xFFFF); |
282 | WREG32(MC_VM_FB_LOCATION, tmp); | 276 | WREG32(MC_VM_FB_LOCATION, tmp); |
@@ -1074,12 +1068,7 @@ void r700_vram_gtt_location(struct radeon_device *rdev, struct radeon_mc *mc) | |||
1074 | mc->mc_vram_size >> 20, mc->vram_start, | 1068 | mc->mc_vram_size >> 20, mc->vram_start, |
1075 | mc->vram_end, mc->real_vram_size >> 20); | 1069 | mc->vram_end, mc->real_vram_size >> 20); |
1076 | } else { | 1070 | } else { |
1077 | u64 base = 0; | 1071 | radeon_vram_location(rdev, &rdev->mc, 0); |
1078 | if (rdev->flags & RADEON_IS_IGP) { | ||
1079 | base = (RREG32(MC_VM_FB_LOCATION) & 0xFFFF) << 24; | ||
1080 | base |= RREG32(MC_FUS_VM_FB_OFFSET) & 0x00F00000; | ||
1081 | } | ||
1082 | radeon_vram_location(rdev, &rdev->mc, base); | ||
1083 | rdev->mc.gtt_base_align = 0; | 1072 | rdev->mc.gtt_base_align = 0; |
1084 | radeon_gtt_location(rdev, mc); | 1073 | radeon_gtt_location(rdev, mc); |
1085 | } | 1074 | } |
diff --git a/drivers/gpu/drm/radeon/rv770d.h b/drivers/gpu/drm/radeon/rv770d.h index 98f9ad256d3d..fc77e1e1a179 100644 --- a/drivers/gpu/drm/radeon/rv770d.h +++ b/drivers/gpu/drm/radeon/rv770d.h | |||
@@ -158,7 +158,6 @@ | |||
158 | #define MC_VM_AGP_BOT 0x202C | 158 | #define MC_VM_AGP_BOT 0x202C |
159 | #define MC_VM_AGP_BASE 0x2030 | 159 | #define MC_VM_AGP_BASE 0x2030 |
160 | #define MC_VM_FB_LOCATION 0x2024 | 160 | #define MC_VM_FB_LOCATION 0x2024 |
161 | #define MC_FUS_VM_FB_OFFSET 0x2898 | ||
162 | #define MC_VM_MB_L1_TLB0_CNTL 0x2234 | 161 | #define MC_VM_MB_L1_TLB0_CNTL 0x2234 |
163 | #define MC_VM_MB_L1_TLB1_CNTL 0x2238 | 162 | #define MC_VM_MB_L1_TLB1_CNTL 0x2238 |
164 | #define MC_VM_MB_L1_TLB2_CNTL 0x223C | 163 | #define MC_VM_MB_L1_TLB2_CNTL 0x223C |