dri-devel Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Thomas Zimmermann <tzimmermann@suse.de>
To: maarten.lankhorst@linux.intel.com, mripard@kernel.org,
	airlied@gmail.com, daniel@ffwll.ch,
	laurent.pinchart@ideasonboard.com,
	kieran.bingham+renesas@ideasonboard.com, hjc@rock-chips.com,
	heiko@sntech.de
Cc: linux-renesas-soc@vger.kernel.org,
	linux-rockchip@lists.infradead.org,
	linux-arm-kernel@lists.infradead.org,
	dri-devel@lists.freedesktop.org,
	Thomas Zimmermann <tzimmermann@suse.de>
Subject: [PATCH 1/3] drm/rcar-du: Import buffers with GEM DMA's helpers
Date: Tue, 20 Jun 2023 14:03:21 +0200	[thread overview]
Message-ID: <20230620121202.28263-2-tzimmermann@suse.de> (raw)
In-Reply-To: <20230620121202.28263-1-tzimmermann@suse.de>

Call __drm_gem_dma_create() to create an object for imported buffers,
instead of reimplementing the function within the driver. Reduces
code duplication and will later allow to un-export a number of symbols
from the GEM DMA helpers.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
 drivers/gpu/drm/drm_gem_dma_helper.c          |  5 +--
 drivers/gpu/drm/renesas/rcar-du/rcar_du_kms.c | 33 +++----------------
 include/drm/drm_gem_dma_helper.h              |  3 ++
 3 files changed, 10 insertions(+), 31 deletions(-)

diff --git a/drivers/gpu/drm/drm_gem_dma_helper.c b/drivers/gpu/drm/drm_gem_dma_helper.c
index 870b90b78bc4e..e9aa3ac140654 100644
--- a/drivers/gpu/drm/drm_gem_dma_helper.c
+++ b/drivers/gpu/drm/drm_gem_dma_helper.c
@@ -67,8 +67,8 @@ static const struct drm_gem_object_funcs drm_gem_dma_default_funcs = {
  * A struct drm_gem_dma_object * on success or an ERR_PTR()-encoded negative
  * error code on failure.
  */
-static struct drm_gem_dma_object *
-__drm_gem_dma_create(struct drm_device *drm, size_t size, bool private)
+struct drm_gem_dma_object *__drm_gem_dma_create(struct drm_device *drm,
+						size_t size, bool private)
 {
 	struct drm_gem_dma_object *dma_obj;
 	struct drm_gem_object *gem_obj;
@@ -112,6 +112,7 @@ __drm_gem_dma_create(struct drm_device *drm, size_t size, bool private)
 	kfree(dma_obj);
 	return ERR_PTR(ret);
 }
+EXPORT_SYMBOL_GPL(__drm_gem_dma_create);
 
 /**
  * drm_gem_dma_create - allocate an object with the given size
diff --git a/drivers/gpu/drm/renesas/rcar-du/rcar_du_kms.c b/drivers/gpu/drm/renesas/rcar-du/rcar_du_kms.c
index adfb36b0e8154..ea7487e270f13 100644
--- a/drivers/gpu/drm/renesas/rcar-du/rcar_du_kms.c
+++ b/drivers/gpu/drm/renesas/rcar-du/rcar_du_kms.c
@@ -356,49 +356,24 @@ const struct rcar_du_format_info *rcar_du_format_info(u32 fourcc)
  * Frame buffer
  */
 
-static const struct drm_gem_object_funcs rcar_du_gem_funcs = {
-	.free = drm_gem_dma_object_free,
-	.print_info = drm_gem_dma_object_print_info,
-	.get_sg_table = drm_gem_dma_object_get_sg_table,
-	.vmap = drm_gem_dma_object_vmap,
-	.mmap = drm_gem_dma_object_mmap,
-	.vm_ops = &drm_gem_dma_vm_ops,
-};
-
 struct drm_gem_object *rcar_du_gem_prime_import_sg_table(struct drm_device *dev,
 				struct dma_buf_attachment *attach,
 				struct sg_table *sgt)
 {
 	struct rcar_du_device *rcdu = to_rcar_du_device(dev);
 	struct drm_gem_dma_object *dma_obj;
-	struct drm_gem_object *gem_obj;
-	int ret;
 
 	if (!rcar_du_has(rcdu, RCAR_DU_FEATURE_VSP1_SOURCE))
 		return drm_gem_dma_prime_import_sg_table(dev, attach, sgt);
 
-	/* Create a DMA GEM buffer. */
-	dma_obj = kzalloc(sizeof(*dma_obj), GFP_KERNEL);
-	if (!dma_obj)
-		return ERR_PTR(-ENOMEM);
-
-	gem_obj = &dma_obj->base;
-	gem_obj->funcs = &rcar_du_gem_funcs;
-
-	drm_gem_private_object_init(dev, gem_obj, attach->dmabuf->size);
-	dma_obj->map_noncoherent = false;
-
-	ret = drm_gem_create_mmap_offset(gem_obj);
-	if (ret) {
-		drm_gem_object_release(gem_obj);
-		kfree(dma_obj);
-		return ERR_PTR(ret);
-	}
+	dma_obj = __drm_gem_dma_create(dev, attach->dmabuf->size, true);
+	if (IS_ERR(dma_obj))
+		return ERR_CAST(dma_obj);
 
 	dma_obj->dma_addr = 0;
 	dma_obj->sgt = sgt;
 
-	return gem_obj;
+	return &dma_obj->base;
 }
 
 int rcar_du_dumb_create(struct drm_file *file, struct drm_device *dev,
diff --git a/include/drm/drm_gem_dma_helper.h b/include/drm/drm_gem_dma_helper.h
index 61da596780b64..3877cbf0e927c 100644
--- a/include/drm/drm_gem_dma_helper.h
+++ b/include/drm/drm_gem_dma_helper.h
@@ -32,6 +32,9 @@ struct drm_gem_dma_object {
 #define to_drm_gem_dma_obj(gem_obj) \
 	container_of(gem_obj, struct drm_gem_dma_object, base)
 
+struct drm_gem_dma_object *__drm_gem_dma_create(struct drm_device *drm,
+						size_t size, bool private);
+
 struct drm_gem_dma_object *drm_gem_dma_create(struct drm_device *drm,
 					      size_t size);
 void drm_gem_dma_free(struct drm_gem_dma_object *dma_obj);
-- 
2.41.0


  reply	other threads:[~2023-06-20 12:12 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-06-20 12:03 [PATCH 0/3] drm/gem-dma: Remove unnecessary calls Thomas Zimmermann
2023-06-20 12:03 ` Thomas Zimmermann [this message]
2023-06-20 16:47   ` [PATCH 1/3] drm/rcar-du: Import buffers with GEM DMA's helpers Laurent Pinchart
2023-06-21  8:05     ` Thomas Zimmermann
2023-06-20 12:03 ` [PATCH 2/3] drm/rockchip: Resolve dependency in GEM DMA helpers Thomas Zimmermann
2023-06-20 13:56   ` Jonas Karlman
2023-06-20 14:40     ` Thomas Zimmermann
2023-06-20 12:03 ` [PATCH 3/3] drm/gem-dma: Unexport drm_gem_dma_vm_ops Thomas Zimmermann
2023-06-20 16:48   ` Laurent Pinchart

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230620121202.28263-2-tzimmermann@suse.de \
    --to=tzimmermann@suse.de \
    --cc=airlied@gmail.com \
    --cc=daniel@ffwll.ch \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=heiko@sntech.de \
    --cc=hjc@rock-chips.com \
    --cc=kieran.bingham+renesas@ideasonboard.com \
    --cc=laurent.pinchart@ideasonboard.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-renesas-soc@vger.kernel.org \
    --cc=linux-rockchip@lists.infradead.org \
    --cc=maarten.lankhorst@linux.intel.com \
    --cc=mripard@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox