Linux-libre 5.3.12-gnu
[librecmc/linux-libre.git] / drivers / gpu / drm / v3d / v3d_fence.c
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 queue)
7 {
8         struct v3d_fence *fence;
9
10         fence = kzalloc(sizeof(*fence), GFP_KERNEL);
11         if (!fence)
12                 return ERR_PTR(-ENOMEM);
13
14         fence->dev = &v3d->drm;
15         fence->queue = queue;
16         fence->seqno = ++v3d->queue[queue].emit_seqno;
17         dma_fence_init(&fence->base, &v3d_fence_ops, &v3d->job_lock,
18                        v3d->queue[queue].fence_context, fence->seqno);
19
20         return &fence->base;
21 }
22
23 static const char *v3d_fence_get_driver_name(struct dma_fence *fence)
24 {
25         return "v3d";
26 }
27
28 static const char *v3d_fence_get_timeline_name(struct dma_fence *fence)
29 {
30         struct v3d_fence *f = to_v3d_fence(fence);
31
32         switch (f->queue) {
33         case V3D_BIN:
34                 return "v3d-bin";
35         case V3D_RENDER:
36                 return "v3d-render";
37         case V3D_TFU:
38                 return "v3d-tfu";
39         case V3D_CSD:
40                 return "v3d-csd";
41         default:
42                 return NULL;
43         }
44 }
45
46 const struct dma_fence_ops v3d_fence_ops = {
47         .get_driver_name = v3d_fence_get_driver_name,
48         .get_timeline_name = v3d_fence_get_timeline_name,
49 };