From: Thomas Zimmermann <tzimmermann@suse.de>
To: Chen-Yu Tsai <wenst@chromium.org>,
Matthias Brugger <matthias.bgg@gmail.com>,
AngeloGioacchino Del Regno
<angelogioacchino.delregno@collabora.com>,
Chun-Kuang Hu <chunkuang.hu@kernel.org>,
Philipp Zabel <p.zabel@pengutronix.de>,
Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
Maxime Ripard <mripard@kernel.org>,
Chen-Yu Tsai <wens@kernel.org>,
Jernej Skrabec <jernej@kernel.org>,
Samuel Holland <samuel@sholland.org>,
David Airlie <airlied@gmail.com>, Simona Vetter <simona@ffwll.ch>
Cc: linux-sunxi@lists.linux.dev,
Paul Kocialkowski <paulk@sys-base.io>,
linux-mediatek@lists.infradead.org,
dri-devel@lists.freedesktop.org,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH RESEND 2/4] drm/gem-dma: Support dedicated DMA device for allocation and mapping
Date: Tue, 10 Mar 2026 09:02:57 +0100 [thread overview]
Message-ID: <c6d68974-fd3e-42a6-bdff-35f15d2a1a24@suse.de> (raw)
In-Reply-To: <20260310032511.2545500-3-wenst@chromium.org>
Am 10.03.26 um 04:25 schrieb Chen-Yu Tsai:
> Support for a dedicated DMA device for prime imports was added in commit
> 143ec8d3f939 ("drm/prime: Support dedicated DMA device for dma-buf imports").
> This allowed the DRM driver to provide a dedicated DMA device when its
> own underlying device was not capable of DMA, for example when it is a
> USB device (the original target) or a virtual device. The latter case is
> common on embedded SoCs, on which the display pipeline is composed of
> various fixed function blocks, and the DRM device is simply a made-up
> device, an address space managing the routing between the blocks, or
> whichever block the implementor thought made sense at the time. The
> point is that the chosen device is often not the actual device doing
> the DMA. Various drivers have used workarounds or reimplemented the
> GEM DMA helpers to get the DMA addresses and IOMMUs to work correctly.
>
> Add support for the dedicated DMA device to the GEM DMA helpers.
>
> No existing driver currently uses the GEM DMA helpers and calls
> drm_dev_set_dma_dev() to set a dedicated DMA device, so no existing
> users should be affected.
In these patches (or at least the series' cover letter) you should
mention that drm_dev_dma_dev() returns the regular device if no DMA
device has been set.
>
> Signed-off-by: Chen-Yu Tsai <wenst@chromium.org>
Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
> ---
> drivers/gpu/drm/drm_gem_dma_helper.c | 21 ++++++++++++---------
> 1 file changed, 12 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_gem_dma_helper.c b/drivers/gpu/drm/drm_gem_dma_helper.c
> index ecb9746f4da8..70f83e464476 100644
> --- a/drivers/gpu/drm/drm_gem_dma_helper.c
> +++ b/drivers/gpu/drm/drm_gem_dma_helper.c
> @@ -146,12 +146,13 @@ struct drm_gem_dma_object *drm_gem_dma_create(struct drm_device *drm,
> return dma_obj;
>
> if (dma_obj->map_noncoherent) {
> - dma_obj->vaddr = dma_alloc_noncoherent(drm->dev, size,
> + dma_obj->vaddr = dma_alloc_noncoherent(drm_dev_dma_dev(drm),
> + size,
> &dma_obj->dma_addr,
> DMA_TO_DEVICE,
> GFP_KERNEL | __GFP_NOWARN);
> } else {
> - dma_obj->vaddr = dma_alloc_wc(drm->dev, size,
> + dma_obj->vaddr = dma_alloc_wc(drm_dev_dma_dev(drm), size,
> &dma_obj->dma_addr,
> GFP_KERNEL | __GFP_NOWARN);
> }
> @@ -236,12 +237,14 @@ void drm_gem_dma_free(struct drm_gem_dma_object *dma_obj)
> drm_prime_gem_destroy(gem_obj, dma_obj->sgt);
> } else if (dma_obj->vaddr) {
> if (dma_obj->map_noncoherent)
> - dma_free_noncoherent(gem_obj->dev->dev, dma_obj->base.size,
> + dma_free_noncoherent(drm_dev_dma_dev(gem_obj->dev),
> + dma_obj->base.size,
> dma_obj->vaddr, dma_obj->dma_addr,
> DMA_TO_DEVICE);
> else
> - dma_free_wc(gem_obj->dev->dev, dma_obj->base.size,
> - dma_obj->vaddr, dma_obj->dma_addr);
> + dma_free_wc(drm_dev_dma_dev(gem_obj->dev),
> + dma_obj->base.size, dma_obj->vaddr,
> + dma_obj->dma_addr);
> }
>
> drm_gem_object_release(gem_obj);
> @@ -432,7 +435,7 @@ struct sg_table *drm_gem_dma_get_sg_table(struct drm_gem_dma_object *dma_obj)
> if (!sgt)
> return ERR_PTR(-ENOMEM);
>
> - ret = dma_get_sgtable(obj->dev->dev, sgt, dma_obj->vaddr,
> + ret = dma_get_sgtable(drm_dev_dma_dev(obj->dev), sgt, dma_obj->vaddr,
> dma_obj->dma_addr, obj->size);
> if (ret < 0)
> goto out;
> @@ -539,12 +542,12 @@ int drm_gem_dma_mmap(struct drm_gem_dma_object *dma_obj, struct vm_area_struct *
> if (dma_obj->map_noncoherent) {
> vma->vm_page_prot = vm_get_page_prot(vma->vm_flags);
>
> - ret = dma_mmap_pages(dma_obj->base.dev->dev,
> + ret = dma_mmap_pages(drm_dev_dma_dev(dma_obj->base.dev),
> vma, vma->vm_end - vma->vm_start,
> virt_to_page(dma_obj->vaddr));
> } else {
> - ret = dma_mmap_wc(dma_obj->base.dev->dev, vma, dma_obj->vaddr,
> - dma_obj->dma_addr,
> + ret = dma_mmap_wc(drm_dev_dma_dev(dma_obj->base.dev), vma,
> + dma_obj->vaddr, dma_obj->dma_addr,
> vma->vm_end - vma->vm_start);
> }
> if (ret)
--
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstr. 146, 90461 Nürnberg, Germany, www.suse.com
GF: Jochen Jaser, Andrew McDonald, Werner Knoblich, (HRB 36809, AG Nürnberg)
next prev parent reply other threads:[~2026-03-10 8:03 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-10 3:25 [PATCH RESEND 0/4] drm/gem-dma: Support dedicated DMA device for allocation Chen-Yu Tsai
2026-03-10 3:25 ` [PATCH RESEND 1/4] drm/prime: Limit scatter list size with dedicated DMA device Chen-Yu Tsai
2026-03-10 8:00 ` Thomas Zimmermann
2026-03-11 3:45 ` Claude review: " Claude Code Review Bot
2026-03-10 3:25 ` [PATCH RESEND 2/4] drm/gem-dma: Support dedicated DMA device for allocation and mapping Chen-Yu Tsai
2026-03-10 8:02 ` Thomas Zimmermann [this message]
2026-03-11 3:45 ` Claude review: " Claude Code Review Bot
2026-03-10 3:25 ` [PATCH RESEND 3/4] drm/mediatek: Set dedicated DMA device and drop custom GEM callbacks Chen-Yu Tsai
2026-03-10 8:21 ` Thomas Zimmermann
2026-03-11 3:45 ` Claude review: " Claude Code Review Bot
2026-03-10 3:25 ` [PATCH RESEND 4/4] drm/sun4i: Use backend/mixer as dedicated DMA device Chen-Yu Tsai
2026-03-11 3:45 ` Claude review: " Claude Code Review Bot
2026-03-10 7:56 ` [PATCH RESEND 0/4] drm/gem-dma: Support dedicated DMA device for allocation Thomas Zimmermann
2026-03-11 3:45 ` Claude review: " Claude Code Review Bot
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=c6d68974-fd3e-42a6-bdff-35f15d2a1a24@suse.de \
--to=tzimmermann@suse.de \
--cc=airlied@gmail.com \
--cc=angelogioacchino.delregno@collabora.com \
--cc=chunkuang.hu@kernel.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=jernej@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mediatek@lists.infradead.org \
--cc=linux-sunxi@lists.linux.dev \
--cc=maarten.lankhorst@linux.intel.com \
--cc=matthias.bgg@gmail.com \
--cc=mripard@kernel.org \
--cc=p.zabel@pengutronix.de \
--cc=paulk@sys-base.io \
--cc=samuel@sholland.org \
--cc=simona@ffwll.ch \
--cc=wens@kernel.org \
--cc=wenst@chromium.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