From: Tushar Dave Date: Fri, 6 May 2016 23:51:04 +0000 (-0700) Subject: sparc64: Enable 64-bit DMA X-Git-Tag: v4.1.12-106.0.20170720_1900~82 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=2d314d314bf2d47c119e17803f5046b95ba4992b;p=users%2Fjedix%2Flinux-maple.git sparc64: Enable 64-bit DMA ATU 64bit addressing allows PCIe devices with 64bit DMA capabilities to use ATU for 64bit DMA. Orabug: 23239179 Reviewed-by: chris hyser Signed-off-by: Tushar Dave Signed-off-by: Allen Pais --- diff --git a/arch/sparc/Kconfig b/arch/sparc/Kconfig index 0f3ee99317c8..6d8defe19062 100644 --- a/arch/sparc/Kconfig +++ b/arch/sparc/Kconfig @@ -101,6 +101,10 @@ config ARCH_ATU bool default y if SPARC64 +config ARCH_DMA_ADDR_T_64BIT + bool + default y if ARCH_ATU + config IOMMU_HELPER bool default y if SPARC64 diff --git a/arch/sparc/kernel/iommu.c b/arch/sparc/kernel/iommu.c index 37686828c3d9..3c752f454e79 100644 --- a/arch/sparc/kernel/iommu.c +++ b/arch/sparc/kernel/iommu.c @@ -760,8 +760,12 @@ int dma_supported(struct device *dev, u64 device_mask) struct iommu *iommu = dev->archdata.iommu; u64 dma_addr_mask = iommu->dma_addr_mask; - if (device_mask >= (1UL << 32UL)) - return 0; + if (device_mask > DMA_BIT_MASK(32)) { + if (iommu->atu) + dma_addr_mask = iommu->atu->dma_addr_mask; + else + return 0; + } if ((device_mask & dma_addr_mask) == dma_addr_mask) return 1;