[PATCH v2 0/5] drm: Provide a dedicated DMA device for PRIME import
Simona Vetter
simona.vetter at ffwll.ch
Fri Mar 7 13:32:18 UTC 2025
On Fri, Mar 07, 2025 at 09:03:58AM +0100, Thomas Zimmermann wrote:
> Importing dma-bufs via PRIME requires a DMA-capable hardware device.
> This is not the case for USB, where DMA is performed entirely by the
> USB controller instead of the USB devices.
>
> Drivers for USB-based hardware maintain their own workarounds for this
> problem. The original idea to resolve this was to provide different
> PRIME helpers for such devices, but the dma-buf code internally assumes
> DMA functionality as well. So that ideas is not realistic.
So dma-buf without dma is doable, but you have to avoid dma_buf_attach.
And that is a lot of surgery in the current prime helpers, since those
assume that an attachment always exists. But dma-buf itself is entirely
fine with cpu-only access through either userspace mmap or kernel vmap.
I think as an interim step this is still good, since it makes the current
hacks easier to find because at least it's all common now.
-Sima
> Let's instead turn the current workaround into a feature. Patch 1 adds a
> dma_dev field to struct drm_device and makes the PRIME code use it. Patches
> 2 to 5 replace related driver code.
>
> It will also be useful in other code. The exynos and mediatek drivers
> already maintain a dedicated DMA device for non-PRIME code. They could
> likely use dma_dev as well. GEM-DMA helpers currently allocate DMA
> memory with the regular parent device. They should support the dma_dev
> settings as well.
>
> Tested with udl.
>
> v2:
> - maintain reference on dma_dev (Jani)
> - improve docs (Maxime)
> - update appletbdrm
>
> Thomas Zimmermann (5):
> drm/prime: Support dedicated DMA device for dma-buf imports
> drm/appletbdrm: Set struct drm_device.dma_dev
> drm/gm12u320: Set struct drm_device.dma_dev
> drm/gud: Set struct drm_device.dma_dev
> drm/udl: Set struct drm_device.dma_dev
>
> drivers/gpu/drm/drm_drv.c | 21 ++++++++++++++
> drivers/gpu/drm/drm_prime.c | 2 +-
> drivers/gpu/drm/gud/gud_drv.c | 33 ++++++---------------
> drivers/gpu/drm/gud/gud_internal.h | 1 -
> drivers/gpu/drm/tiny/appletbdrm.c | 27 +++++++-----------
> drivers/gpu/drm/tiny/gm12u320.c | 46 +++++++++---------------------
> drivers/gpu/drm/udl/udl_drv.c | 17 -----------
> drivers/gpu/drm/udl/udl_drv.h | 1 -
> drivers/gpu/drm/udl/udl_main.c | 14 ++++-----
> include/drm/drm_device.h | 41 ++++++++++++++++++++++++++
> 10 files changed, 102 insertions(+), 101 deletions(-)
>
> --
> 2.48.1
>
--
Simona Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
More information about the dri-devel
mailing list