gfx: drv: Add command trace points to flip
authorPauli Nieminen <pauli.nieminen@linux.intel.com>
Wed, 11 Jan 2012 15:06:53 +0000 (17:06 +0200)
committerMarkus Lehtonen <markus.lehtonen@linux.intel.com>
Tue, 3 Jul 2012 09:29:33 +0000 (12:29 +0300)
To make easier to debug SGX lockups with page flip code we need command
trace to have page flip events. There already exists API to add trace
events for flip chain. We can use same API for drm mode page flips.

Signed-off-by: Pauli Nieminen <pauli.nieminen@linux.intel.com>
Reviewed-by: Imre Deak <imre.deak@intel.com>
Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
drivers/staging/mrst/drv/psb_page_flip.c

index 53f0fde..1548a02 100644 (file)
@@ -29,6 +29,7 @@
 #include "psb_intel_reg.h"
 #include "psb_page_flip.h"
 #include "psb_pvr_glue.h"
+#include "pvr_trace_cmd.h"
 
 #include "mdfld_output.h"
 #include "mdfld_dsi_output.h"
@@ -170,6 +171,7 @@ psb_intel_flip_complete(struct pending_flip *pending_flip,
                if (!failed_vblank_get)
                        drm_vblank_put(dev, pipe);
                increase_read_ops_completed(pending_flip->old_mem_info);
+               pvr_trcmd_check_syn_completions(PVR_TRCMD_FLPCOMP);
                PVRSRVScheduleDeviceCallbacks();
 
                kfree(pending_flip);
@@ -218,6 +220,7 @@ psb_intel_crtc_page_flip(struct drm_crtc *crtc,
        struct pending_flip *new_pending_flip;
        struct psb_fpriv *priv;
        unsigned long flags;
+       struct pvr_trcmd_flpreq *fltrace;
 
        if (psb_get_meminfo_by_handle(psbfb->hKernelMemInfo, &new_fb_mem_info))
                return -EINVAL;
@@ -247,6 +250,17 @@ psb_intel_crtc_page_flip(struct drm_crtc *crtc,
 
        increase_read_ops_pending(current_fb_mem_info);
 
+       fltrace = pvr_trcmd_reserve(PVR_TRCMD_FLPREQ, task_tgid_nr(current),
+                                 current->comm, sizeof(*fltrace));
+       if (current_fb_mem_info && current_fb_mem_info->psKernelSyncInfo)
+               pvr_trcmd_set_syn(&fltrace->src_syn[0],
+                               current_fb_mem_info->psKernelSyncInfo);
+       else
+               pvr_trcmd_clear_syn(&fltrace->src_syn[0]);
+       pvr_trcmd_clear_syn(&fltrace->src_syn[1]);
+       pvr_trcmd_commit(fltrace);
+
+
        PVRSRVCallbackOnSync(new_fb_mem_info->psKernelSyncInfo,
                             PVRSRV_SYNC_WRITE, sync_callback,
                             &new_pending_flip->pending_sync);