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. 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