We need to readout some registers _after_ the submited command
buffer got executed in order to support perf counters.
There is no way to read register via command stream - even the
Vivante kernel driver does it via a special ioctl.

Signed-off-by: Christian Gmeiner <christian.gmeiner at gmail.com>
---
 include/uapi/drm/etnaviv_drm.h | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/include/uapi/drm/etnaviv_drm.h b/include/uapi/drm/etnaviv_drm.h
index 2584c1c..0d30604 100644
--- a/include/uapi/drm/etnaviv_drm.h
+++ b/include/uapi/drm/etnaviv_drm.h
@@ -150,6 +150,13 @@ struct drm_etnaviv_gem_submit_bo {
        __u64 presumed;       /* in/out, presumed buffer address */
 };

+struct drm_etnaviv_gem_submit_readback {
+       __u32 readback_offset;/* in, offset from readback_bo */
+       __u32 readback_idx;   /* in, index of readback_bo buffer */
+       __u32 reg;            /* in, register to read */
+       __u32 flags;          /* in, needs to be 0 */
+};
+
 /* Each cmdstream submit consists of a table of buffers involved, and
  * one or more cmdstream buffers.  This allows for conditional execution
  * (context-restore), and IB buffers needed for per tile/bin draw cmds.
@@ -167,6 +174,9 @@ struct drm_etnaviv_gem_submit {
        __u64 bos;            /* in, ptr to array of submit_bo's */
        __u64 relocs;         /* in, ptr to array of submit_reloc's */
        __u64 stream;         /* in, ptr to cmdstream */
+       __u64 readbacks;      /* in, ptr to array of submit_readback's */
+       __u32 nr_readbacks;   /* in, number of submit_readback's */
+       __u32 padding;
 };

 /* The normal way to synchronize with the GPU is just to CPU_PREP on
-- 
2.9.3

Reply via email to