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 f2204cb1ccdf..7fcdbbbf2979 100644 --- a/drivers/gpu/drm/radeon/r100.c +++ b/drivers/gpu/drm/radeon/r100.c | |||
@@ -721,11 +721,11 @@ void r100_fence_ring_emit(struct radeon_device *rdev, | |||
721 | int r100_copy_blit(struct radeon_device *rdev, | 721 | int r100_copy_blit(struct radeon_device *rdev, |
722 | uint64_t src_offset, | 722 | uint64_t src_offset, |
723 | uint64_t dst_offset, | 723 | uint64_t dst_offset, |
724 | unsigned num_pages, | 724 | unsigned num_gpu_pages, |
725 | struct radeon_fence *fence) | 725 | struct radeon_fence *fence) |
726 | { | 726 | { |
727 | uint32_t cur_pages; | 727 | uint32_t cur_pages; |
728 | uint32_t stride_bytes = PAGE_SIZE; | 728 | uint32_t stride_bytes = RADEON_GPU_PAGE_SIZE; |
729 | uint32_t pitch; | 729 | uint32_t pitch; |
730 | uint32_t stride_pixels; | 730 | uint32_t stride_pixels; |
731 | unsigned ndw; | 731 | unsigned ndw; |
@@ -737,7 +737,7 @@ int r100_copy_blit(struct radeon_device *rdev, | |||
737 | /* radeon pitch is /64 */ | 737 | /* radeon pitch is /64 */ |
738 | pitch = stride_bytes / 64; | 738 | pitch = stride_bytes / 64; |
739 | stride_pixels = stride_bytes / 4; | 739 | stride_pixels = stride_bytes / 4; |
740 | num_loops = DIV_ROUND_UP(num_pages, 8191); | 740 | num_loops = DIV_ROUND_UP(num_gpu_pages, 8191); |
741 | 741 | ||
742 | /* Ask for enough room for blit + flush + fence */ | 742 | /* Ask for enough room for blit + flush + fence */ |
743 | ndw = 64 + (10 * num_loops); | 743 | ndw = 64 + (10 * num_loops); |
@@ -746,12 +746,12 @@ int r100_copy_blit(struct radeon_device *rdev, | |||
746 | DRM_ERROR("radeon: moving bo (%d) asking for %u dw.\n", r, ndw); | 746 | DRM_ERROR("radeon: moving bo (%d) asking for %u dw.\n", r, ndw); |
747 | return -EINVAL; | 747 | return -EINVAL; |
748 | } | 748 | } |
749 | while (num_pages > 0) { | 749 | while (num_gpu_pages > 0) { |
750 | cur_pages = num_pages; | 750 | cur_pages = num_gpu_pages; |
751 | if (cur_pages > 8191) { | 751 | if (cur_pages > 8191) { |
752 | cur_pages = 8191; | 752 | cur_pages = 8191; |
753 | } | 753 | } |
754 | num_pages -= cur_pages; | 754 | num_gpu_pages -= cur_pages; |
755 | 755 | ||
756 | /* pages are in Y direction - height | 756 | /* pages are in Y direction - height |
757 | page width in X direction - width */ | 757 | page width in X direction - width */ |
@@ -773,8 +773,8 @@ int r100_copy_blit(struct radeon_device *rdev, | |||
773 | radeon_ring_write(rdev, (0x1fff) | (0x1fff << 16)); | 773 | radeon_ring_write(rdev, (0x1fff) | (0x1fff << 16)); |
774 | radeon_ring_write(rdev, 0); | 774 | radeon_ring_write(rdev, 0); |
775 | radeon_ring_write(rdev, (0x1fff) | (0x1fff << 16)); | 775 | radeon_ring_write(rdev, (0x1fff) | (0x1fff << 16)); |
776 | radeon_ring_write(rdev, num_pages); | 776 | radeon_ring_write(rdev, num_gpu_pages); |
777 | radeon_ring_write(rdev, num_pages); | 777 | radeon_ring_write(rdev, num_gpu_pages); |
778 | radeon_ring_write(rdev, cur_pages | (stride_pixels << 16)); | 778 | radeon_ring_write(rdev, cur_pages | (stride_pixels << 16)); |
779 | } | 779 | } |
780 | radeon_ring_write(rdev, PACKET0(RADEON_DSTCACHE_CTLSTAT, 0)); | 780 | radeon_ring_write(rdev, PACKET0(RADEON_DSTCACHE_CTLSTAT, 0)); |
@@ -990,7 +990,8 @@ int r100_cp_init(struct radeon_device *rdev, unsigned ring_size) | |||
990 | /* Force read & write ptr to 0 */ | 990 | /* Force read & write ptr to 0 */ |
991 | WREG32(RADEON_CP_RB_CNTL, tmp | RADEON_RB_RPTR_WR_ENA | RADEON_RB_NO_UPDATE); | 991 | WREG32(RADEON_CP_RB_CNTL, tmp | RADEON_RB_RPTR_WR_ENA | RADEON_RB_NO_UPDATE); |
992 | WREG32(RADEON_CP_RB_RPTR_WR, 0); | 992 | WREG32(RADEON_CP_RB_RPTR_WR, 0); |
993 | WREG32(RADEON_CP_RB_WPTR, 0); | 993 | rdev->cp.wptr = 0; |
994 | WREG32(RADEON_CP_RB_WPTR, rdev->cp.wptr); | ||
994 | 995 | ||
995 | /* set the wb address whether it's enabled or not */ | 996 | /* set the wb address whether it's enabled or not */ |
996 | WREG32(R_00070C_CP_RB_RPTR_ADDR, | 997 | WREG32(R_00070C_CP_RB_RPTR_ADDR, |
@@ -1007,9 +1008,6 @@ int r100_cp_init(struct radeon_device *rdev, unsigned ring_size) | |||
1007 | WREG32(RADEON_CP_RB_CNTL, tmp); | 1008 | WREG32(RADEON_CP_RB_CNTL, tmp); |
1008 | udelay(10); | 1009 | udelay(10); |
1009 | rdev->cp.rptr = RREG32(RADEON_CP_RB_RPTR); | 1010 | rdev->cp.rptr = RREG32(RADEON_CP_RB_RPTR); |
1010 | rdev->cp.wptr = RREG32(RADEON_CP_RB_WPTR); | ||
1011 | /* protect against crazy HW on resume */ | ||
1012 | rdev->cp.wptr &= rdev->cp.ptr_mask; | ||
1013 | /* Set cp mode to bus mastering & enable cp*/ | 1011 | /* Set cp mode to bus mastering & enable cp*/ |
1014 | WREG32(RADEON_CP_CSQ_MODE, | 1012 | WREG32(RADEON_CP_CSQ_MODE, |
1015 | REG_SET(RADEON_INDIRECT2_START, indirect2_start) | | 1013 | REG_SET(RADEON_INDIRECT2_START, indirect2_start) | |