aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/radeon/r100.c
diff options
context:
space:
mode:
authorAlex Deucher <alexander.deucher@amd.com>2012-07-17 14:02:32 -0400
committerChristian König <deathsimple@vodafone.de>2012-07-18 07:53:32 -0400
commitc7eff978e0868ccad1ecbefcc342f6709f9f4789 (patch)
tree18d46fc75600c3d247005ca1c1f699798193bd94 /drivers/gpu/drm/radeon/r100.c
parent89d35807fb0fe53b84e88e759cc39107a6195e5f (diff)
drm/radeon: add rptr save support for r1xx-r5xx
Signed-off-by: Alex Deucher <alexander.deucher@amd.com> Reviewed-by: Christian König <christian.koenig@amd.com>
Diffstat (limited to 'drivers/gpu/drm/radeon/r100.c')
-rw-r--r--drivers/gpu/drm/radeon/r100.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/drivers/gpu/drm/radeon/r100.c b/drivers/gpu/drm/radeon/r100.c
index 4ee5a74dac22..2e0a60328bd4 100644
--- a/drivers/gpu/drm/radeon/r100.c
+++ b/drivers/gpu/drm/radeon/r100.c
@@ -1060,6 +1060,14 @@ int r100_cp_init(struct radeon_device *rdev, unsigned ring_size)
1060 } 1060 }
1061 ring->ready = true; 1061 ring->ready = true;
1062 radeon_ttm_set_active_vram_size(rdev, rdev->mc.real_vram_size); 1062 radeon_ttm_set_active_vram_size(rdev, rdev->mc.real_vram_size);
1063
1064 if (radeon_ring_supports_scratch_reg(rdev, ring)) {
1065 r = radeon_scratch_get(rdev, &ring->rptr_save_reg);
1066 if (r) {
1067 DRM_ERROR("failed to get scratch reg for rptr save (%d).\n", r);
1068 ring->rptr_save_reg = 0;
1069 }
1070 }
1063 return 0; 1071 return 0;
1064} 1072}
1065 1073
@@ -1070,6 +1078,7 @@ void r100_cp_fini(struct radeon_device *rdev)
1070 } 1078 }
1071 /* Disable ring */ 1079 /* Disable ring */
1072 r100_cp_disable(rdev); 1080 r100_cp_disable(rdev);
1081 radeon_scratch_free(rdev, rdev->ring[RADEON_RING_TYPE_GFX_INDEX].rptr_save_reg);
1073 radeon_ring_fini(rdev, &rdev->ring[RADEON_RING_TYPE_GFX_INDEX]); 1082 radeon_ring_fini(rdev, &rdev->ring[RADEON_RING_TYPE_GFX_INDEX]);
1074 DRM_INFO("radeon: cp finalized\n"); 1083 DRM_INFO("radeon: cp finalized\n");
1075} 1084}
@@ -3661,6 +3670,12 @@ void r100_ring_ib_execute(struct radeon_device *rdev, struct radeon_ib *ib)
3661{ 3670{
3662 struct radeon_ring *ring = &rdev->ring[RADEON_RING_TYPE_GFX_INDEX]; 3671 struct radeon_ring *ring = &rdev->ring[RADEON_RING_TYPE_GFX_INDEX];
3663 3672
3673 if (ring->rptr_save_reg) {
3674 u32 next_rptr = ring->wptr + 2 + 3;
3675 radeon_ring_write(ring, PACKET0(ring->rptr_save_reg, 0));
3676 radeon_ring_write(ring, next_rptr);
3677 }
3678
3664 radeon_ring_write(ring, PACKET0(RADEON_CP_IB_BASE, 1)); 3679 radeon_ring_write(ring, PACKET0(RADEON_CP_IB_BASE, 1));
3665 radeon_ring_write(ring, ib->gpu_addr); 3680 radeon_ring_write(ring, ib->gpu_addr);
3666 radeon_ring_write(ring, ib->length_dw); 3681 radeon_ring_write(ring, ib->length_dw);