diff options
author | Tushar Dave <tushar.n.dave@oracle.com> | 2016-10-28 13:12:45 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2016-11-18 14:17:00 -0500 |
commit | d30a6b84df00128e03588564925dc828a53e6865 (patch) | |
tree | 9aa3298173c5cc35683d8e01259e856e1ae84921 | |
parent | f08978b0fdbf37d3c91efb60a20bdee3ba8f59c6 (diff) |
sparc64: Enable 64-bit DMA
ATU 64bit addressing allows PCIe devices with 64bit DMA capabilities
to use ATU for 64bit DMA.
Signed-off-by: Tushar Dave <tushar.n.dave@oracle.com>
Reviewed-by: chris hyser <chris.hyser@oracle.com>
Acked-by: Sowmini Varadhan <sowmini.varadhan@oracle.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | arch/sparc/Kconfig | 4 | ||||
-rw-r--r-- | arch/sparc/kernel/iommu.c | 8 |
2 files changed, 10 insertions, 2 deletions
diff --git a/arch/sparc/Kconfig b/arch/sparc/Kconfig index 5202eb4ba2db..60145c9b9f84 100644 --- a/arch/sparc/Kconfig +++ b/arch/sparc/Kconfig | |||
@@ -93,6 +93,10 @@ config ARCH_ATU | |||
93 | bool | 93 | bool |
94 | default y if SPARC64 | 94 | default y if SPARC64 |
95 | 95 | ||
96 | config ARCH_DMA_ADDR_T_64BIT | ||
97 | bool | ||
98 | default y if ARCH_ATU | ||
99 | |||
96 | config IOMMU_HELPER | 100 | config IOMMU_HELPER |
97 | bool | 101 | bool |
98 | default y if SPARC64 | 102 | default y if SPARC64 |
diff --git a/arch/sparc/kernel/iommu.c b/arch/sparc/kernel/iommu.c index 5c615abff030..852a3291db96 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) | |||
760 | struct iommu *iommu = dev->archdata.iommu; | 760 | struct iommu *iommu = dev->archdata.iommu; |
761 | u64 dma_addr_mask = iommu->dma_addr_mask; | 761 | u64 dma_addr_mask = iommu->dma_addr_mask; |
762 | 762 | ||
763 | if (device_mask >= (1UL << 32UL)) | 763 | if (device_mask > DMA_BIT_MASK(32)) { |
764 | return 0; | 764 | if (iommu->atu) |
765 | dma_addr_mask = iommu->atu->dma_addr_mask; | ||
766 | else | ||
767 | return 0; | ||
768 | } | ||
765 | 769 | ||
766 | if ((device_mask & dma_addr_mask) == dma_addr_mask) | 770 | if ((device_mask & dma_addr_mask) == dma_addr_mask) |
767 | return 1; | 771 | return 1; |