1// SPDX-License-Identifier: GPL-2.0+
2/* Copyright (C) 2017-2018 Broadcom */
3
4#include "v3d_drv.h"
5
6struct 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(error: -ENOMEM);
14
15 fence->dev = &v3d->drm;
16 fence->queue = q;
17 fence->seqno = ++queue->emit_seqno;
18 dma_fence_init(fence: &fence->base, ops: &v3d_fence_ops, lock: &queue->fence_lock,
19 context: queue->fence_context, seqno: fence->seqno);
20
21 return &fence->base;
22}
23
24static const char *v3d_fence_get_driver_name(struct dma_fence *fence)
25{
26 return "v3d";
27}
28
29static 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
47const 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

source code of linux/drivers/gpu/drm/v3d/v3d_fence.c