Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1030311AbdDZVN6 (ORCPT ); Wed, 26 Apr 2017 17:13:58 -0400 Received: from mail-qk0-f174.google.com ([209.85.220.174]:34574 "EHLO mail-qk0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1030231AbdDZVMo (ORCPT ); Wed, 26 Apr 2017 17:12:44 -0400 From: Laura Abbott To: Daniel Vetter , Chris Wilson , Sean Paul Cc: Laura Abbott , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Sumit Semwal Subject: [RFC PATCHv2 2/3] drm/prime: Introduce drm_gem_prime_import_platform Date: Wed, 26 Apr 2017 14:12:29 -0700 Message-Id: <1493241150-21742-3-git-send-email-labbott@redhat.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1493241150-21742-1-git-send-email-labbott@redhat.com> References: <1493241150-21742-1-git-send-email-labbott@redhat.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2888 Lines: 82 The existing drm_gem_prime_import function uses the underlying struct device of a drm_device for attaching to a dma_buf. Some drivers (notably vgem) may not have an underlying device structure. Offer an alternate function to attach using a platform device associated with drm_device. Signed-off-by: Laura Abbott --- New approach for v2 --- drivers/gpu/drm/drm_prime.c | 23 ++++++++++++++++++++--- include/drm/drmP.h | 5 +++++ 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c index 25aa455..5486248 100644 --- a/drivers/gpu/drm/drm_prime.c +++ b/drivers/gpu/drm/drm_prime.c @@ -601,8 +601,9 @@ EXPORT_SYMBOL(drm_gem_prime_handle_to_fd); * This is the implementation of the gem_prime_import functions for GEM drivers * using the PRIME helpers. */ -struct drm_gem_object *drm_gem_prime_import(struct drm_device *dev, - struct dma_buf *dma_buf) +static struct drm_gem_object *__drm_gem_prime_import(struct drm_device *dev, + struct dma_buf *dma_buf, + struct device *attach_dev) { struct dma_buf_attachment *attach; struct sg_table *sgt; @@ -624,7 +625,7 @@ struct drm_gem_object *drm_gem_prime_import(struct drm_device *dev, if (!dev->driver->gem_prime_import_sg_table) return ERR_PTR(-EINVAL); - attach = dma_buf_attach(dma_buf, dev->dev); + attach = dma_buf_attach(dma_buf, attach_dev); if (IS_ERR(attach)) return ERR_CAST(attach); @@ -654,8 +655,24 @@ struct drm_gem_object *drm_gem_prime_import(struct drm_device *dev, return ERR_PTR(ret); } + +struct drm_gem_object *drm_gem_prime_import(struct drm_device *dev, + struct dma_buf *dma_buf) +{ + return __drm_gem_prime_import(dev, dma_buf, dev->dev); +} EXPORT_SYMBOL(drm_gem_prime_import); +struct drm_gem_object *drm_gem_prime_import_platform(struct drm_device *dev, + struct dma_buf *dma_buf) +{ + if (WARN_ON_ONCE(!dev->platformdev)) + return NULL; + + return __drm_gem_prime_import(dev, dma_buf, &dev->platformdev->dev); +} +EXPORT_SYMBOL(drm_gem_prime_import_platform); + /** * drm_gem_prime_fd_to_handle - PRIME import function for GEM drivers * @dev: dev to export the buffer from diff --git a/include/drm/drmP.h b/include/drm/drmP.h index 6105c05..f4ac30f 100644 --- a/include/drm/drmP.h +++ b/include/drm/drmP.h @@ -769,6 +769,11 @@ extern int drm_gem_prime_handle_to_fd(struct drm_device *dev, int *prime_fd); extern struct drm_gem_object *drm_gem_prime_import(struct drm_device *dev, struct dma_buf *dma_buf); + +extern struct drm_gem_object *drm_gem_prime_import_platform( + struct drm_device *dev, + struct dma_buf *dma_buf); + extern int drm_gem_prime_fd_to_handle(struct drm_device *dev, struct drm_file *file_priv, int prime_fd, uint32_t *handle); struct dma_buf *drm_gem_dmabuf_export(struct drm_device *dev, -- 2.7.4