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