diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/r100.c')
-rw-r--r-- | drivers/gpu/drm/radeon/r100.c | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/drivers/gpu/drm/radeon/r100.c b/drivers/gpu/drm/radeon/r100.c index e108f265882a..8f8b8fa14357 100644 --- a/drivers/gpu/drm/radeon/r100.c +++ b/drivers/gpu/drm/radeon/r100.c | |||
@@ -826,11 +826,11 @@ void r100_fence_ring_emit(struct radeon_device *rdev, | |||
826 | int r100_copy_blit(struct radeon_device *rdev, | 826 | int r100_copy_blit(struct radeon_device *rdev, |
827 | uint64_t src_offset, | 827 | uint64_t src_offset, |
828 | uint64_t dst_offset, | 828 | uint64_t dst_offset, |
829 | unsigned num_pages, | 829 | unsigned num_gpu_pages, |
830 | struct radeon_fence *fence) | 830 | struct radeon_fence *fence) |
831 | { | 831 | { |
832 | uint32_t cur_pages; | 832 | uint32_t cur_pages; |
833 | uint32_t stride_bytes = PAGE_SIZE; | 833 | uint32_t stride_bytes = RADEON_GPU_PAGE_SIZE; |
834 | uint32_t pitch; | 834 | uint32_t pitch; |
835 | uint32_t stride_pixels; | 835 | uint32_t stride_pixels; |
836 | unsigned ndw; | 836 | unsigned ndw; |
@@ -842,7 +842,7 @@ int r100_copy_blit(struct radeon_device *rdev, | |||
842 | /* radeon pitch is /64 */ | 842 | /* radeon pitch is /64 */ |
843 | pitch = stride_bytes / 64; | 843 | pitch = stride_bytes / 64; |
844 | stride_pixels = stride_bytes / 4; | 844 | stride_pixels = stride_bytes / 4; |
845 | num_loops = DIV_ROUND_UP(num_pages, 8191); | 845 | num_loops = DIV_ROUND_UP(num_gpu_pages, 8191); |
846 | 846 | ||
847 | /* Ask for enough room for blit + flush + fence */ | 847 | /* Ask for enough room for blit + flush + fence */ |
848 | ndw = 64 + (10 * num_loops); | 848 | ndw = 64 + (10 * num_loops); |
@@ -851,12 +851,12 @@ int r100_copy_blit(struct radeon_device *rdev, | |||
851 | DRM_ERROR("radeon: moving bo (%d) asking for %u dw.\n", r, ndw); | 851 | DRM_ERROR("radeon: moving bo (%d) asking for %u dw.\n", r, ndw); |
852 | return -EINVAL; | 852 | return -EINVAL; |
853 | } | 853 | } |
854 | while (num_pages > 0) { | 854 | while (num_gpu_pages > 0) { |
855 | cur_pages = num_pages; | 855 | cur_pages = num_gpu_pages; |
856 | if (cur_pages > 8191) { | 856 | if (cur_pages > 8191) { |
857 | cur_pages = 8191; | 857 | cur_pages = 8191; |
858 | } | 858 | } |
859 | num_pages -= cur_pages; | 859 | num_gpu_pages -= cur_pages; |
860 | 860 | ||
861 | /* pages are in Y direction - height | 861 | /* pages are in Y direction - height |
862 | page width in X direction - width */ | 862 | page width in X direction - width */ |
@@ -878,8 +878,8 @@ int r100_copy_blit(struct radeon_device *rdev, | |||
878 | radeon_ring_write(rdev, (0x1fff) | (0x1fff << 16)); | 878 | radeon_ring_write(rdev, (0x1fff) | (0x1fff << 16)); |
879 | radeon_ring_write(rdev, 0); | 879 | radeon_ring_write(rdev, 0); |
880 | radeon_ring_write(rdev, (0x1fff) | (0x1fff << 16)); | 880 | radeon_ring_write(rdev, (0x1fff) | (0x1fff << 16)); |
881 | radeon_ring_write(rdev, num_pages); | 881 | radeon_ring_write(rdev, num_gpu_pages); |
882 | radeon_ring_write(rdev, num_pages); | 882 | radeon_ring_write(rdev, num_gpu_pages); |
883 | radeon_ring_write(rdev, cur_pages | (stride_pixels << 16)); | 883 | radeon_ring_write(rdev, cur_pages | (stride_pixels << 16)); |
884 | } | 884 | } |
885 | radeon_ring_write(rdev, PACKET0(RADEON_DSTCACHE_CTLSTAT, 0)); | 885 | radeon_ring_write(rdev, PACKET0(RADEON_DSTCACHE_CTLSTAT, 0)); |
@@ -1095,7 +1095,8 @@ int r100_cp_init(struct radeon_device *rdev, unsigned ring_size) | |||
1095 | /* Force read & write ptr to 0 */ | 1095 | /* Force read & write ptr to 0 */ |
1096 | WREG32(RADEON_CP_RB_CNTL, tmp | RADEON_RB_RPTR_WR_ENA | RADEON_RB_NO_UPDATE); | 1096 | WREG32(RADEON_CP_RB_CNTL, tmp | RADEON_RB_RPTR_WR_ENA | RADEON_RB_NO_UPDATE); |
1097 | WREG32(RADEON_CP_RB_RPTR_WR, 0); | 1097 | WREG32(RADEON_CP_RB_RPTR_WR, 0); |
1098 | WREG32(RADEON_CP_RB_WPTR, 0); | 1098 | rdev->cp.wptr = 0; |
1099 | WREG32(RADEON_CP_RB_WPTR, rdev->cp.wptr); | ||
1099 | 1100 | ||
1100 | /* set the wb address whether it's enabled or not */ | 1101 | /* set the wb address whether it's enabled or not */ |
1101 | WREG32(R_00070C_CP_RB_RPTR_ADDR, | 1102 | WREG32(R_00070C_CP_RB_RPTR_ADDR, |
@@ -1112,9 +1113,6 @@ int r100_cp_init(struct radeon_device *rdev, unsigned ring_size) | |||
1112 | WREG32(RADEON_CP_RB_CNTL, tmp); | 1113 | WREG32(RADEON_CP_RB_CNTL, tmp); |
1113 | udelay(10); | 1114 | udelay(10); |
1114 | rdev->cp.rptr = RREG32(RADEON_CP_RB_RPTR); | 1115 | rdev->cp.rptr = RREG32(RADEON_CP_RB_RPTR); |
1115 | rdev->cp.wptr = RREG32(RADEON_CP_RB_WPTR); | ||
1116 | /* protect against crazy HW on resume */ | ||
1117 | rdev->cp.wptr &= rdev->cp.ptr_mask; | ||
1118 | /* Set cp mode to bus mastering & enable cp*/ | 1116 | /* Set cp mode to bus mastering & enable cp*/ |
1119 | WREG32(RADEON_CP_CSQ_MODE, | 1117 | WREG32(RADEON_CP_CSQ_MODE, |
1120 | REG_SET(RADEON_INDIRECT2_START, indirect2_start) | | 1118 | REG_SET(RADEON_INDIRECT2_START, indirect2_start) | |