Skip to content

Commit 5f26ad5

Browse files
Sam Protsenkojoergroedel
authored andcommitted
iommu/exynos: Set correct dma mask for SysMMU v5+
SysMMU v5+ supports 36 bit physical address space. Set corresponding DMA mask to avoid falling back to SWTLBIO usage in dma_map_single() because of failed dma_capable() check. The original code for this fix was suggested by Marek. Signed-off-by: Sam Protsenko <semen.protsenko@linaro.org> Co-developed-by: Marek Szyprowski <m.szyprowski@samsung.com> Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com> Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> Link: https://lore.kernel.org/r/20220714165550.8884-4-semen.protsenko@linaro.org Signed-off-by: Joerg Roedel <jroedel@suse.de>
1 parent fce398d commit 5f26ad5

1 file changed

Lines changed: 10 additions & 0 deletions

File tree

drivers/iommu/exynos-iommu.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -646,6 +646,14 @@ static int exynos_sysmmu_probe(struct platform_device *pdev)
646646
}
647647
}
648648

649+
if (MMU_MAJ_VER(data->version) >= 5) {
650+
ret = dma_set_mask(dev, DMA_BIT_MASK(36));
651+
if (ret) {
652+
dev_err(dev, "Unable to set DMA mask: %d\n", ret);
653+
goto err_dma_set_mask;
654+
}
655+
}
656+
649657
/*
650658
* use the first registered sysmmu device for performing
651659
* dma mapping operations on iommu page tables (cpu cache flush)
@@ -657,6 +665,8 @@ static int exynos_sysmmu_probe(struct platform_device *pdev)
657665

658666
return 0;
659667

668+
err_dma_set_mask:
669+
iommu_device_unregister(&data->iommu);
660670
err_iommu_register:
661671
iommu_device_sysfs_remove(&data->iommu);
662672
return ret;

0 commit comments

Comments
 (0)