xref: /linux/drivers/gpu/drm/v3d/v3d_fence.c (revision 07fdad3a93756b872da7b53647715c48d0f4a2d0)
1 // SPDX-License-Identifier: GPL-2.0+
2 /* Copyright (C) 2017-2018 Broadcom */
3 
4 #include "v3d_drv.h"
5 
6 struct dma_fence *v3d_fence_create(struct v3d_dev *v3d, enum v3d_queue q)
7 {
8 	struct v3d_queue_state *queue = &v3d->queue[q];
9 	struct v3d_fence *fence;
10 
11 	fence = kzalloc(sizeof(*fence), GFP_KERNEL);
12 	if (!fence)
13 		return ERR_PTR(-ENOMEM);
14 
15 	fence->dev = &v3d->drm;
16 	fence->queue = q;
17 	fence->seqno = ++queue->emit_seqno;
18 	dma_fence_init(&fence->base, &v3d_fence_ops, &queue->queue_lock,
19 		       queue->fence_context, fence->seqno);
20 
21 	return &fence->base;
22 }
23 
24 static const char *v3d_fence_get_driver_name(struct dma_fence *fence)
25 {
26 	return "v3d";
27 }
28 
29 static const char *v3d_fence_get_timeline_name(struct dma_fence *fence)
30 {
31 	struct v3d_fence *f = to_v3d_fence(fence);
32 
33 	switch (f->queue) {
34 	case V3D_BIN:
35 		return "v3d-bin";
36 	case V3D_RENDER:
37 		return "v3d-render";
38 	case V3D_TFU:
39 		return "v3d-tfu";
40 	case V3D_CSD:
41 		return "v3d-csd";
42 	default:
43 		return NULL;
44 	}
45 }
46 
47 const struct dma_fence_ops v3d_fence_ops = {
48 	.get_driver_name = v3d_fence_get_driver_name,
49 	.get_timeline_name = v3d_fence_get_timeline_name,
50 };
51