All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH libdrm v3 1/2] etnaviv: sync uapi header
@ 2017-04-10  9:15 Philipp Zabel
  2017-04-10  9:15 ` [PATCH libdrm v3 2/2] etnaviv: add fence fd support Philipp Zabel
  2017-04-12 10:08 ` [PATCH libdrm v3 1/2] etnaviv: sync uapi header Lucas Stach
  0 siblings, 2 replies; 4+ messages in thread
From: Philipp Zabel @ 2017-04-10  9:15 UTC (permalink / raw)
  To: dri-devel, etnaviv; +Cc: Emil Velikov

Import the etnaviv header changes from kernel commits 9ad59fea162c
("drm/etnaviv: submit support for in-fences") and 78ec187f64fa
("drm/etnaviv: submit support for out-fences") for fence fd support.

The drm_etnaviv_gem_submit structure was extended to include a flags
field, new flags for in-fence and out-fence fds and an input/output
fence fd field.

This is one-way backwards compatible because old userspace code passing
a short structure not including the flags field to new kernels will
cause the remaining fields to be zero-filled. New userspace code must
make sure to only pass the short structure to old kernels, though.

Not generated using make headers_install, since the drm/etnaviv_drm.h
uapi header is not installed yet by the kernel.
Copied from the airlied/drm-next commit 78ec187f64fa.

v2: improved commit message

Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
Reviewed-by: Christian Gmeiner <christian.gmeiner@gmail.com>
---
 etnaviv/etnaviv_drm.h | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/etnaviv/etnaviv_drm.h b/etnaviv/etnaviv_drm.h
index 2584c1cc..76f6f78a 100644
--- a/etnaviv/etnaviv_drm.h
+++ b/etnaviv/etnaviv_drm.h
@@ -154,6 +154,12 @@ struct drm_etnaviv_gem_submit_bo {
  * one or more cmdstream buffers.  This allows for conditional execution
  * (context-restore), and IB buffers needed for per tile/bin draw cmds.
  */
+#define ETNA_SUBMIT_NO_IMPLICIT         0x0001
+#define ETNA_SUBMIT_FENCE_FD_IN         0x0002
+#define ETNA_SUBMIT_FENCE_FD_OUT        0x0004
+#define ETNA_SUBMIT_FLAGS		(ETNA_SUBMIT_NO_IMPLICIT | \
+					 ETNA_SUBMIT_FENCE_FD_IN | \
+					 ETNA_SUBMIT_FENCE_FD_OUT)
 #define ETNA_PIPE_3D      0x00
 #define ETNA_PIPE_2D      0x01
 #define ETNA_PIPE_VG      0x02
@@ -167,6 +173,8 @@ 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 */
+	__u32 flags;          /* in, mask of ETNA_SUBMIT_x */
+	__s32 fence_fd;       /* in/out, fence fd (see ETNA_SUBMIT_FENCE_FD_x) */
 };
 
 /* The normal way to synchronize with the GPU is just to CPU_PREP on
-- 
2.11.0

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH libdrm v3 2/2] etnaviv: add fence fd support
  2017-04-10  9:15 [PATCH libdrm v3 1/2] etnaviv: sync uapi header Philipp Zabel
@ 2017-04-10  9:15 ` Philipp Zabel
  2017-04-12 10:08 ` [PATCH libdrm v3 1/2] etnaviv: sync uapi header Lucas Stach
  1 sibling, 0 replies; 4+ messages in thread
From: Philipp Zabel @ 2017-04-10  9:15 UTC (permalink / raw)
  To: dri-devel, etnaviv; +Cc: Emil Velikov

Add etna_cmd_stream_flush2 with in-fence fd and out-fence fd support for
explicit fencing.

v3: added etna_cmd_stream_flush2 to etnaviv/etnaviv-symbol-check

v2: renamed etna_cmd_stream_flush_explicit to etna_cmd_stream_flush2

Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
Reviewed-by: Eric Engestrom <eric.engestrom@imgtec.com>
Reviewed-by: Christian Gmeiner <christian.gmeiner@gmail.com>
---
 etnaviv/etnaviv-symbol-check |  1 +
 etnaviv/etnaviv_cmd_stream.c | 33 +++++++++++++++++++++++++++++----
 etnaviv/etnaviv_drmif.h      |  2 ++
 3 files changed, 32 insertions(+), 4 deletions(-)

diff --git a/etnaviv/etnaviv-symbol-check b/etnaviv/etnaviv-symbol-check
index 22afd168..0e2030e4 100755
--- a/etnaviv/etnaviv-symbol-check
+++ b/etnaviv/etnaviv-symbol-check
@@ -39,6 +39,7 @@ etna_cmd_stream_new
 etna_cmd_stream_del
 etna_cmd_stream_timestamp
 etna_cmd_stream_flush
+etna_cmd_stream_flush2
 etna_cmd_stream_finish
 etna_cmd_stream_reloc
 EOF
diff --git a/etnaviv/etnaviv_cmd_stream.c b/etnaviv/etnaviv_cmd_stream.c
index 9ce3f363..3c7b0ed6 100644
--- a/etnaviv/etnaviv_cmd_stream.c
+++ b/etnaviv/etnaviv_cmd_stream.c
@@ -177,7 +177,8 @@ static uint32_t bo2idx(struct etna_cmd_stream *stream, struct etna_bo *bo,
 	return idx;
 }
 
-static void flush(struct etna_cmd_stream *stream)
+static void flush(struct etna_cmd_stream *stream, int in_fence_fd,
+		  int *out_fence_fd)
 {
 	struct etna_cmd_stream_priv *priv = etna_cmd_stream_priv(stream);
 	int ret, id = priv->pipe->id;
@@ -194,8 +195,22 @@ static void flush(struct etna_cmd_stream *stream)
 		.stream_size = stream->offset * 4, /* in bytes */
 	};
 
+	if (in_fence_fd != -1) {
+		req.flags |= ETNA_SUBMIT_FENCE_FD_IN | ETNA_SUBMIT_NO_IMPLICIT;
+		req.fence_fd = in_fence_fd;
+	}
+
+	if (out_fence_fd)
+		req.flags |= ETNA_SUBMIT_FENCE_FD_OUT;
+
+	/*
+	 * Pass the complete submit structure only if flags are set. Otherwise,
+	 * only pass the fields up to, but not including the flags field for
+	 * backwards compatiblity with older kernels.
+	 */
 	ret = drmCommandWriteRead(gpu->dev->fd, DRM_ETNAVIV_GEM_SUBMIT,
-			&req, sizeof(req));
+			&req, req.flags ? sizeof(req) :
+			offsetof(struct drm_etnaviv_gem_submit, flags));
 
 	if (ret)
 		ERROR_MSG("submit failed: %d (%s)", ret, strerror(errno));
@@ -208,11 +223,21 @@ static void flush(struct etna_cmd_stream *stream)
 		bo->current_stream = NULL;
 		etna_bo_del(bo);
 	}
+
+	if (out_fence_fd)
+		*out_fence_fd = req.fence_fd;
 }
 
 void etna_cmd_stream_flush(struct etna_cmd_stream *stream)
 {
-	flush(stream);
+	flush(stream, -1, NULL);
+	reset_buffer(stream);
+}
+
+void etna_cmd_stream_flush2(struct etna_cmd_stream *stream, int in_fence_fd,
+			    int *out_fence_fd)
+{
+	flush(stream, in_fence_fd, out_fence_fd);
 	reset_buffer(stream);
 }
 
@@ -220,7 +245,7 @@ void etna_cmd_stream_finish(struct etna_cmd_stream *stream)
 {
 	struct etna_cmd_stream_priv *priv = etna_cmd_stream_priv(stream);
 
-	flush(stream);
+	flush(stream, -1, NULL);
 	etna_pipe_wait(priv->pipe, priv->last_timestamp, 5000);
 	reset_buffer(stream);
 }
diff --git a/etnaviv/etnaviv_drmif.h b/etnaviv/etnaviv_drmif.h
index 8119baad..87704acd 100644
--- a/etnaviv/etnaviv_drmif.h
+++ b/etnaviv/etnaviv_drmif.h
@@ -142,6 +142,8 @@ struct etna_cmd_stream *etna_cmd_stream_new(struct etna_pipe *pipe, uint32_t siz
 void etna_cmd_stream_del(struct etna_cmd_stream *stream);
 uint32_t etna_cmd_stream_timestamp(struct etna_cmd_stream *stream);
 void etna_cmd_stream_flush(struct etna_cmd_stream *stream);
+void etna_cmd_stream_flush2(struct etna_cmd_stream *stream, int in_fence_fd,
+			    int *out_fence_fd);
 void etna_cmd_stream_finish(struct etna_cmd_stream *stream);
 
 static inline uint32_t etna_cmd_stream_avail(struct etna_cmd_stream *stream)
-- 
2.11.0

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH libdrm v3 1/2] etnaviv: sync uapi header
  2017-04-10  9:15 [PATCH libdrm v3 1/2] etnaviv: sync uapi header Philipp Zabel
  2017-04-10  9:15 ` [PATCH libdrm v3 2/2] etnaviv: add fence fd support Philipp Zabel
@ 2017-04-12 10:08 ` Lucas Stach
  2017-04-12 13:12   ` Emil Velikov
  1 sibling, 1 reply; 4+ messages in thread
From: Lucas Stach @ 2017-04-12 10:08 UTC (permalink / raw)
  To: Philipp Zabel; +Cc: Emil Velikov, etnaviv, dri-devel

Hi Philipp,

Am Montag, den 10.04.2017, 11:15 +0200 schrieb Philipp Zabel:
> Import the etnaviv header changes from kernel commits 9ad59fea162c
> ("drm/etnaviv: submit support for in-fences") and 78ec187f64fa
> ("drm/etnaviv: submit support for out-fences") for fence fd support.
> 
> The drm_etnaviv_gem_submit structure was extended to include a flags
> field, new flags for in-fence and out-fence fds and an input/output
> fence fd field.
> 
> This is one-way backwards compatible because old userspace code passing
> a short structure not including the flags field to new kernels will
> cause the remaining fields to be zero-filled. New userspace code must
> make sure to only pass the short structure to old kernels, though.
> 
> Not generated using make headers_install, since the drm/etnaviv_drm.h
> uapi header is not installed yet by the kernel.
> Copied from the airlied/drm-next commit 78ec187f64fa.
> 
> v2: improved commit message
> 
> Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
> Reviewed-by: Christian Gmeiner <christian.gmeiner@gmail.com>

I pushed those 2 patches to libdrm master.

Regards,
Lucas

> ---
>  etnaviv/etnaviv_drm.h | 8 ++++++++
>  1 file changed, 8 insertions(+)
> 
> diff --git a/etnaviv/etnaviv_drm.h b/etnaviv/etnaviv_drm.h
> index 2584c1cc..76f6f78a 100644
> --- a/etnaviv/etnaviv_drm.h
> +++ b/etnaviv/etnaviv_drm.h
> @@ -154,6 +154,12 @@ struct drm_etnaviv_gem_submit_bo {
>   * one or more cmdstream buffers.  This allows for conditional execution
>   * (context-restore), and IB buffers needed for per tile/bin draw cmds.
>   */
> +#define ETNA_SUBMIT_NO_IMPLICIT         0x0001
> +#define ETNA_SUBMIT_FENCE_FD_IN         0x0002
> +#define ETNA_SUBMIT_FENCE_FD_OUT        0x0004
> +#define ETNA_SUBMIT_FLAGS		(ETNA_SUBMIT_NO_IMPLICIT | \
> +					 ETNA_SUBMIT_FENCE_FD_IN | \
> +					 ETNA_SUBMIT_FENCE_FD_OUT)
>  #define ETNA_PIPE_3D      0x00
>  #define ETNA_PIPE_2D      0x01
>  #define ETNA_PIPE_VG      0x02
> @@ -167,6 +173,8 @@ 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 */
> +	__u32 flags;          /* in, mask of ETNA_SUBMIT_x */
> +	__s32 fence_fd;       /* in/out, fence fd (see ETNA_SUBMIT_FENCE_FD_x) */
>  };
>  
>  /* The normal way to synchronize with the GPU is just to CPU_PREP on


_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH libdrm v3 1/2] etnaviv: sync uapi header
  2017-04-12 10:08 ` [PATCH libdrm v3 1/2] etnaviv: sync uapi header Lucas Stach
@ 2017-04-12 13:12   ` Emil Velikov
  0 siblings, 0 replies; 4+ messages in thread
From: Emil Velikov @ 2017-04-12 13:12 UTC (permalink / raw)
  To: Lucas Stach; +Cc: ML dri-devel, The etnaviv authors

On 12 April 2017 at 11:08, Lucas Stach <l.stach@pengutronix.de> wrote:
> Hi Philipp,
>
> Am Montag, den 10.04.2017, 11:15 +0200 schrieb Philipp Zabel:
>> Import the etnaviv header changes from kernel commits 9ad59fea162c
>> ("drm/etnaviv: submit support for in-fences") and 78ec187f64fa
>> ("drm/etnaviv: submit support for out-fences") for fence fd support.
>>
>> The drm_etnaviv_gem_submit structure was extended to include a flags
>> field, new flags for in-fence and out-fence fds and an input/output
>> fence fd field.
>>
>> This is one-way backwards compatible because old userspace code passing
>> a short structure not including the flags field to new kernels will
>> cause the remaining fields to be zero-filled. New userspace code must
>> make sure to only pass the short structure to old kernels, though.
>>
>> Not generated using make headers_install, since the drm/etnaviv_drm.h
>> uapi header is not installed yet by the kernel.
>> Copied from the airlied/drm-next commit 78ec187f64fa.
>>
>> v2: improved commit message
>>
>> Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
>> Reviewed-by: Christian Gmeiner <christian.gmeiner@gmail.com>
>
> I pushed those 2 patches to libdrm master.
>
Perfect, thanks Lucas. Feel free to roll a release (see RELEASING) if
you guys need this work for mesa/elsewhere.

Thanks
Emil
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2017-04-12 13:12 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-04-10  9:15 [PATCH libdrm v3 1/2] etnaviv: sync uapi header Philipp Zabel
2017-04-10  9:15 ` [PATCH libdrm v3 2/2] etnaviv: add fence fd support Philipp Zabel
2017-04-12 10:08 ` [PATCH libdrm v3 1/2] etnaviv: sync uapi header Lucas Stach
2017-04-12 13:12   ` Emil Velikov

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.