]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - drivers/gpu/drm/radeon/radeon_fence.c
drm/radeon: add initial tracepoint support.
[mv-sheeva.git] / drivers / gpu / drm / radeon / radeon_fence.c
index 698a7ed3a6a14840a8404204f8bf2f9de12f2c99..171b0b2e3a644303d54797a2c2bafa91f3cf155a 100644 (file)
@@ -38,6 +38,7 @@
 #include "drm.h"
 #include "radeon_reg.h"
 #include "radeon.h"
+#include "radeon_trace.h"
 
 int radeon_fence_emit(struct radeon_device *rdev, struct radeon_fence *fence)
 {
@@ -57,6 +58,7 @@ int radeon_fence_emit(struct radeon_device *rdev, struct radeon_fence *fence)
        } else
                radeon_fence_ring_emit(rdev, fence);
 
+       trace_radeon_fence_emit(rdev->ddev, fence->seq);
        fence->emited = true;
        list_del(&fence->list);
        list_add_tail(&fence->list, &rdev->fence_drv.emited);
@@ -73,7 +75,11 @@ static bool radeon_fence_poll_locked(struct radeon_device *rdev)
        unsigned long cjiffies;
 
        if (rdev->wb.enabled) {
-               u32 scratch_index = RADEON_WB_SCRATCH_OFFSET + rdev->fence_drv.scratch_reg - rdev->scratch.reg_base;
+               u32 scratch_index;
+               if (rdev->wb.use_event)
+                       scratch_index = R600_WB_EVENT_OFFSET + rdev->fence_drv.scratch_reg - rdev->scratch.reg_base;
+               else
+                       scratch_index = RADEON_WB_SCRATCH_OFFSET + rdev->fence_drv.scratch_reg - rdev->scratch.reg_base;
                seq = rdev->wb.wb[scratch_index/4];
        } else
                seq = RREG32(rdev->fence_drv.scratch_reg);
@@ -209,6 +215,7 @@ int radeon_fence_wait(struct radeon_fence *fence, bool intr)
 retry:
        /* save current sequence used to check for GPU lockup */
        seq = rdev->fence_drv.last_seq;
+       trace_radeon_fence_wait_begin(rdev->ddev, seq);
        if (intr) {
                radeon_irq_kms_sw_irq_get(rdev);
                r = wait_event_interruptible_timeout(rdev->fence_drv.queue,
@@ -223,6 +230,7 @@ retry:
                         radeon_fence_signaled(fence), timeout);
                radeon_irq_kms_sw_irq_put(rdev);
        }
+       trace_radeon_fence_wait_end(rdev->ddev, seq);
        if (unlikely(!radeon_fence_signaled(fence))) {
                /* we were interrupted for some reason and fence isn't
                 * isn't signaled yet, resume wait
@@ -236,7 +244,8 @@ retry:
                 */
                if (seq == rdev->fence_drv.last_seq && radeon_gpu_is_lockup(rdev)) {
                        /* good news we believe it's a lockup */
-                       WARN(1, "GPU lockup (waiting for 0x%08X last fence id 0x%08X)\n", fence->seq, seq);
+                       WARN(1, "GPU lockup (waiting for 0x%08X last fence id 0x%08X)\n",
+                            fence->seq, seq);
                        /* FIXME: what should we do ? marking everyone
                         * as signaled for now
                         */