162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0+ 262306a36Sopenharmony_ci/* Copyright (C) 2017-2018 Broadcom */ 362306a36Sopenharmony_ci 462306a36Sopenharmony_ci#include "v3d_drv.h" 562306a36Sopenharmony_ci 662306a36Sopenharmony_cistruct dma_fence *v3d_fence_create(struct v3d_dev *v3d, enum v3d_queue queue) 762306a36Sopenharmony_ci{ 862306a36Sopenharmony_ci struct v3d_fence *fence; 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci fence = kzalloc(sizeof(*fence), GFP_KERNEL); 1162306a36Sopenharmony_ci if (!fence) 1262306a36Sopenharmony_ci return ERR_PTR(-ENOMEM); 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci fence->dev = &v3d->drm; 1562306a36Sopenharmony_ci fence->queue = queue; 1662306a36Sopenharmony_ci fence->seqno = ++v3d->queue[queue].emit_seqno; 1762306a36Sopenharmony_ci dma_fence_init(&fence->base, &v3d_fence_ops, &v3d->job_lock, 1862306a36Sopenharmony_ci v3d->queue[queue].fence_context, fence->seqno); 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci return &fence->base; 2162306a36Sopenharmony_ci} 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_cistatic const char *v3d_fence_get_driver_name(struct dma_fence *fence) 2462306a36Sopenharmony_ci{ 2562306a36Sopenharmony_ci return "v3d"; 2662306a36Sopenharmony_ci} 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_cistatic const char *v3d_fence_get_timeline_name(struct dma_fence *fence) 2962306a36Sopenharmony_ci{ 3062306a36Sopenharmony_ci struct v3d_fence *f = to_v3d_fence(fence); 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_ci switch (f->queue) { 3362306a36Sopenharmony_ci case V3D_BIN: 3462306a36Sopenharmony_ci return "v3d-bin"; 3562306a36Sopenharmony_ci case V3D_RENDER: 3662306a36Sopenharmony_ci return "v3d-render"; 3762306a36Sopenharmony_ci case V3D_TFU: 3862306a36Sopenharmony_ci return "v3d-tfu"; 3962306a36Sopenharmony_ci case V3D_CSD: 4062306a36Sopenharmony_ci return "v3d-csd"; 4162306a36Sopenharmony_ci default: 4262306a36Sopenharmony_ci return NULL; 4362306a36Sopenharmony_ci } 4462306a36Sopenharmony_ci} 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_ciconst struct dma_fence_ops v3d_fence_ops = { 4762306a36Sopenharmony_ci .get_driver_name = v3d_fence_get_driver_name, 4862306a36Sopenharmony_ci .get_timeline_name = v3d_fence_get_timeline_name, 4962306a36Sopenharmony_ci}; 50