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(size: sizeof(*fence), GFP_KERNEL); |
11 | if (!fence) |
12 | return ERR_PTR(error: -ENOMEM); |
13 | |
14 | fence->dev = &v3d->drm; |
15 | fence->queue = queue; |
16 | fence->seqno = ++v3d->queue[queue].emit_seqno; |
17 | dma_fence_init(fence: &fence->base, ops: &v3d_fence_ops, lock: &v3d->job_lock, |
18 | context: v3d->queue[queue].fence_context, seqno: 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 | }; |
50 |