[PATCH v3 05/10] ARM: dma-mapping: Bypass the legacy path for core-owned DMA API domains

From: Mikko Perttunen

Date: Mon Oct 26 2026 - 05:24:06 EST


ARM's arch_setup_dma_ops / arm_setup_iommu_dma_ops creates a custom
IOMMU domain for DMA API usage, and continues to do so when an IDENTITY
default domain type is selected.

When a DMA default domain is requested, however, the core owns the
domain and we need to skip our custom domain management. Add checks to
arm_setup/teardown_iommu_dma_ops for these cases.

Signed-off-by: Mikko Perttunen <mperttunen@xxxxxxxxxx>
---
arch/arm/mm/dma-mapping.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c
index 48b9a9f26095..b82cf58f8bc7 100644
--- a/arch/arm/mm/dma-mapping.c
+++ b/arch/arm/mm/dma-mapping.c
@@ -1788,9 +1788,12 @@ EXPORT_SYMBOL_GPL(arm_iommu_detach_device);

static void arm_setup_iommu_dma_ops(struct device *dev)
{
- struct dma_iommu_mapping *mapping;
+ struct dma_iommu_mapping *mapping = to_dma_iommu_mapping(dev);
u64 dma_base = 0, size = 1ULL << 32;

+ if (mapping)
+ return;
+
if (dev->dma_range_map) {
dma_base = dma_range_map_min(dev->dma_range_map);
size = dma_range_map_max(dev->dma_range_map) - dma_base;
@@ -1816,7 +1819,7 @@ static void arm_teardown_iommu_dma_ops(struct device *dev)
{
struct dma_iommu_mapping *mapping = to_dma_iommu_mapping(dev);

- if (!mapping)
+ if (!mapping || iommu_is_dma_domain(mapping->domain))
return;

arm_iommu_detach_device(dev);

--
2.55.0