aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/radeon/r600.c
diff options
context:
space:
mode:
authorAlex Deucher <alexander.deucher@amd.com>2013-12-09 19:44:30 -0500
committerAlex Deucher <alexander.deucher@amd.com>2013-12-24 18:01:10 -0500
commitea31bf697d27270188a93cd78cf9de4bc968aca3 (patch)
treea77d4b86d59b55824e01d73a617f62aa6e28d6c1 /drivers/gpu/drm/radeon/r600.c
parente308b1d375d2fa5389316683ff52f3d9043bf1b8 (diff)
drm/radeon: remove generic rptr/wptr functions (v2)
Fill in asic family specific versions rather than using the generic version. This lets us handle asic specific differences more easily. In this case, we disable sw swapping of the rtpr writeback value on r6xx+ since the hw does it for us. Fixes bogus rptr readback on BE systems. v2: remove missed cpu_to_le32(), add comments Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/radeon/r600.c')
-rw-r--r--drivers/gpu/drm/radeon/r600.c32
1 files changed, 30 insertions, 2 deletions
diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
index d05611aba134..bf0792cf0729 100644
--- a/drivers/gpu/drm/radeon/r600.c
+++ b/drivers/gpu/drm/radeon/r600.c
@@ -2382,6 +2382,36 @@ out:
2382 return err; 2382 return err;
2383} 2383}
2384 2384
2385u32 r600_gfx_get_rptr(struct radeon_device *rdev,
2386 struct radeon_ring *ring)
2387{
2388 u32 rptr;
2389
2390 if (rdev->wb.enabled)
2391 rptr = rdev->wb.wb[ring->rptr_offs/4];
2392 else
2393 rptr = RREG32(R600_CP_RB_RPTR);
2394
2395 return rptr;
2396}
2397
2398u32 r600_gfx_get_wptr(struct radeon_device *rdev,
2399 struct radeon_ring *ring)
2400{
2401 u32 wptr;
2402
2403 wptr = RREG32(R600_CP_RB_WPTR);
2404
2405 return wptr;
2406}
2407
2408void r600_gfx_set_wptr(struct radeon_device *rdev,
2409 struct radeon_ring *ring)
2410{
2411 WREG32(R600_CP_RB_WPTR, ring->wptr);
2412 (void)RREG32(R600_CP_RB_WPTR);
2413}
2414
2385static int r600_cp_load_microcode(struct radeon_device *rdev) 2415static int r600_cp_load_microcode(struct radeon_device *rdev)
2386{ 2416{
2387 const __be32 *fw_data; 2417 const __be32 *fw_data;
@@ -2818,14 +2848,12 @@ static int r600_startup(struct radeon_device *rdev)
2818 2848
2819 ring = &rdev->ring[RADEON_RING_TYPE_GFX_INDEX]; 2849 ring = &rdev->ring[RADEON_RING_TYPE_GFX_INDEX];
2820 r = radeon_ring_init(rdev, ring, ring->ring_size, RADEON_WB_CP_RPTR_OFFSET, 2850 r = radeon_ring_init(rdev, ring, ring->ring_size, RADEON_WB_CP_RPTR_OFFSET,
2821 R600_CP_RB_RPTR, R600_CP_RB_WPTR,
2822 RADEON_CP_PACKET2); 2851 RADEON_CP_PACKET2);
2823 if (r) 2852 if (r)
2824 return r; 2853 return r;
2825 2854
2826 ring = &rdev->ring[R600_RING_TYPE_DMA_INDEX]; 2855 ring = &rdev->ring[R600_RING_TYPE_DMA_INDEX];
2827 r = radeon_ring_init(rdev, ring, ring->ring_size, R600_WB_DMA_RPTR_OFFSET, 2856 r = radeon_ring_init(rdev, ring, ring->ring_size, R600_WB_DMA_RPTR_OFFSET,
2828 DMA_RB_RPTR, DMA_RB_WPTR,
2829 DMA_PACKET(DMA_PACKET_NOP, 0, 0, 0)); 2857 DMA_PACKET(DMA_PACKET_NOP, 0, 0, 0));
2830 if (r) 2858 if (r)
2831 return r; 2859 return r;