summaryrefslogtreecommitdiffstats
path: root/arch/riscv/include/asm
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2018-04-27 08:43:14 +0200
committerChristoph Hellwig <hch@lst.de>2018-05-19 08:46:26 +0200
commit10314e09d044296bc50dec831aa85b3ae1acedf0 (patch)
tree2d6dd79cb00f3797e5f92afd90589803b64b1842 /arch/riscv/include/asm
parentf1306f0423ec02a1da31bab34006323fcadf2e06 (diff)
downloadlinux-stable-10314e09d044296bc50dec831aa85b3ae1acedf0.tar.gz
linux-stable-10314e09d044296bc50dec831aa85b3ae1acedf0.tar.bz2
linux-stable-10314e09d044296bc50dec831aa85b3ae1acedf0.zip
riscv: add swiotlb support
All RISC-V platforms today lack an IOMMU. However, legacy PCI devices sometimes require DMA-memory to be in the low 32 bits. To make this work, we enable the software-based bounce buffers from swiotlb. They only impose overhead when the device in question cannot address the full 64-bit address space, so a perfect fit. This patch assumes that DMA is coherent with the processor and the PCI bus. It also assumes that the processor and devices share a common address space. This is true for all RISC-V platforms so far. [changelog stolen from an earlier patch by Palmer Dabbelt that did the more complicated swiotlb wireup before the recent consolidation] Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Palmer Dabbelt <palmer@sifive.com>
Diffstat (limited to 'arch/riscv/include/asm')
-rw-r--r--arch/riscv/include/asm/dma-mapping.h15
1 files changed, 15 insertions, 0 deletions
diff --git a/arch/riscv/include/asm/dma-mapping.h b/arch/riscv/include/asm/dma-mapping.h
new file mode 100644
index 000000000000..8facc1c8fa05
--- /dev/null
+++ b/arch/riscv/include/asm/dma-mapping.h
@@ -0,0 +1,15 @@
+// SPDX-License-Identifier: GPL-2.0
+#ifndef _RISCV_ASM_DMA_MAPPING_H
+#define _RISCV_ASM_DMA_MAPPING_H 1
+
+#ifdef CONFIG_SWIOTLB
+#include <linux/swiotlb.h>
+static inline const struct dma_map_ops *get_arch_dma_ops(struct bus_type *bus)
+{
+ return &swiotlb_dma_ops;
+}
+#else
+#include <asm-generic/dma-mapping.h>
+#endif /* CONFIG_SWIOTLB */
+
+#endif /* _RISCV_ASM_DMA_MAPPING_H */