aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/radeon
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/radeon')
-rw-r--r--drivers/gpu/drm/radeon/radeon_fence.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_fence.c b/drivers/gpu/drm/radeon/radeon_fence.c
index be4e4f390e89..a194a142f898 100644
--- a/drivers/gpu/drm/radeon/radeon_fence.c
+++ b/drivers/gpu/drm/radeon/radeon_fence.c
@@ -42,21 +42,23 @@
42 42
43static void radeon_fence_write(struct radeon_device *rdev, u32 seq, int ring) 43static void radeon_fence_write(struct radeon_device *rdev, u32 seq, int ring)
44{ 44{
45 if (rdev->wb.enabled) { 45 struct radeon_fence_driver *drv = &rdev->fence_drv[ring];
46 *rdev->fence_drv[ring].cpu_addr = cpu_to_le32(seq); 46 if (likely(rdev->wb.enabled || !drv->scratch_reg)) {
47 *drv->cpu_addr = cpu_to_le32(seq);
47 } else { 48 } else {
48 WREG32(rdev->fence_drv[ring].scratch_reg, seq); 49 WREG32(drv->scratch_reg, seq);
49 } 50 }
50} 51}
51 52
52static u32 radeon_fence_read(struct radeon_device *rdev, int ring) 53static u32 radeon_fence_read(struct radeon_device *rdev, int ring)
53{ 54{
55 struct radeon_fence_driver *drv = &rdev->fence_drv[ring];
54 u32 seq = 0; 56 u32 seq = 0;
55 57
56 if (rdev->wb.enabled) { 58 if (likely(rdev->wb.enabled || !drv->scratch_reg)) {
57 seq = le32_to_cpu(*rdev->fence_drv[ring].cpu_addr); 59 seq = le32_to_cpu(*drv->cpu_addr);
58 } else { 60 } else {
59 seq = RREG32(rdev->fence_drv[ring].scratch_reg); 61 seq = RREG32(drv->scratch_reg);
60 } 62 }
61 return seq; 63 return seq;
62} 64}