|
@@ -409,35 +409,29 @@ int r600_mc_init(struct radeon_device *rdev)
|
|
|
rdev->mc.gtt_location = rdev->mc.mc_vram_size;
|
|
|
}
|
|
|
} else {
|
|
|
- if (rdev->family == CHIP_RS780 || rdev->family == CHIP_RS880) {
|
|
|
- rdev->mc.vram_location = (RREG32(MC_VM_FB_LOCATION) &
|
|
|
- 0xFFFF) << 24;
|
|
|
- rdev->mc.gtt_size = radeon_gart_size * 1024 * 1024;
|
|
|
- tmp = rdev->mc.vram_location + rdev->mc.mc_vram_size;
|
|
|
- if ((0xFFFFFFFFUL - tmp) >= rdev->mc.gtt_size) {
|
|
|
- /* Enough place after vram */
|
|
|
- rdev->mc.gtt_location = tmp;
|
|
|
- } else if (rdev->mc.vram_location >= rdev->mc.gtt_size) {
|
|
|
- /* Enough place before vram */
|
|
|
+ rdev->mc.gtt_size = radeon_gart_size * 1024 * 1024;
|
|
|
+ rdev->mc.vram_location = (RREG32(MC_VM_FB_LOCATION) &
|
|
|
+ 0xFFFF) << 24;
|
|
|
+ tmp = rdev->mc.vram_location + rdev->mc.mc_vram_size;
|
|
|
+ if ((0xFFFFFFFFUL - tmp) >= rdev->mc.gtt_size) {
|
|
|
+ /* Enough place after vram */
|
|
|
+ rdev->mc.gtt_location = tmp;
|
|
|
+ } else if (rdev->mc.vram_location >= rdev->mc.gtt_size) {
|
|
|
+ /* Enough place before vram */
|
|
|
+ rdev->mc.gtt_location = 0;
|
|
|
+ } else {
|
|
|
+ /* Not enough place after or before shrink
|
|
|
+ * gart size
|
|
|
+ */
|
|
|
+ if (rdev->mc.vram_location > (0xFFFFFFFFUL - tmp)) {
|
|
|
rdev->mc.gtt_location = 0;
|
|
|
+ rdev->mc.gtt_size = rdev->mc.vram_location;
|
|
|
} else {
|
|
|
- /* Not enough place after or before shrink
|
|
|
- * gart size
|
|
|
- */
|
|
|
- if (rdev->mc.vram_location > (0xFFFFFFFFUL - tmp)) {
|
|
|
- rdev->mc.gtt_location = 0;
|
|
|
- rdev->mc.gtt_size = rdev->mc.vram_location;
|
|
|
- } else {
|
|
|
- rdev->mc.gtt_location = tmp;
|
|
|
- rdev->mc.gtt_size = 0xFFFFFFFFUL - tmp;
|
|
|
- }
|
|
|
+ rdev->mc.gtt_location = tmp;
|
|
|
+ rdev->mc.gtt_size = 0xFFFFFFFFUL - tmp;
|
|
|
}
|
|
|
- rdev->mc.gtt_location = rdev->mc.mc_vram_size;
|
|
|
- } else {
|
|
|
- rdev->mc.vram_location = 0x00000000UL;
|
|
|
- rdev->mc.gtt_location = rdev->mc.mc_vram_size;
|
|
|
- rdev->mc.gtt_size = radeon_gart_size * 1024 * 1024;
|
|
|
}
|
|
|
+ rdev->mc.gtt_location = rdev->mc.mc_vram_size;
|
|
|
}
|
|
|
rdev->mc.vram_start = rdev->mc.vram_location;
|
|
|
rdev->mc.vram_end = rdev->mc.vram_location + rdev->mc.mc_vram_size - 1;
|
|
@@ -1272,19 +1266,17 @@ int r600_cp_resume(struct radeon_device *rdev)
|
|
|
|
|
|
/* Set ring buffer size */
|
|
|
rb_bufsz = drm_order(rdev->cp.ring_size / 8);
|
|
|
+ tmp = RB_NO_UPDATE | (drm_order(RADEON_GPU_PAGE_SIZE/8) << 8) | rb_bufsz;
|
|
|
#ifdef __BIG_ENDIAN
|
|
|
- WREG32(CP_RB_CNTL, BUF_SWAP_32BIT | RB_NO_UPDATE |
|
|
|
- (drm_order(RADEON_GPU_PAGE_SIZE/8) << 8) | rb_bufsz);
|
|
|
-#else
|
|
|
- WREG32(CP_RB_CNTL, RB_NO_UPDATE | (drm_order(RADEON_GPU_PAGE_SIZE/8) << 8) | rb_bufsz);
|
|
|
+ tmp |= BUF_SWAP_32BIT;
|
|
|
#endif
|
|
|
+ WREG32(CP_RB_CNTL, tmp);
|
|
|
WREG32(CP_SEM_WAIT_TIMER, 0x4);
|
|
|
|
|
|
/* Set the write pointer delay */
|
|
|
WREG32(CP_RB_WPTR_DELAY, 0);
|
|
|
|
|
|
/* Initialize the ring buffer's read and write pointers */
|
|
|
- tmp = RREG32(CP_RB_CNTL);
|
|
|
WREG32(CP_RB_CNTL, tmp | RB_RPTR_WR_ENA);
|
|
|
WREG32(CP_RB_RPTR_WR, 0);
|
|
|
WREG32(CP_RB_WPTR, 0);
|