dma-direct: unify the dma_capable definitions
authorChristoph Hellwig <hch@lst.de>
Tue, 12 Nov 2019 16:06:04 +0000 (17:06 +0100)
committerChristoph Hellwig <hch@lst.de>
Wed, 20 Nov 2019 19:31:40 +0000 (20:31 +0100)
Currently each architectures that wants to override dma_to_phys and
phys_to_dma also has to provide dma_capable.  But there isn't really
any good reason for that.  powerpc and mips just have copies of the
generic one minus the latests fix, and the arm one was the inspiration
for said fix, but misses the bus_dma_mask handling.
Make all architectures use the generic version instead.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Acked-by: Michael Ellerman <mpe@ellerman.id.au> (powerpc)
Reviewed-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
arch/arm/include/asm/dma-direct.h
arch/mips/include/asm/dma-direct.h
arch/powerpc/include/asm/dma-direct.h
include/linux/dma-direct.h

index b67e5fc1fe436135e933a76faa393117d604ba80..7c3001a6a775bf93a49a7e7f09cc4e96b5b4d760 100644 (file)
@@ -14,23 +14,4 @@ static inline phys_addr_t __dma_to_phys(struct device *dev, dma_addr_t dev_addr)
        return __pfn_to_phys(dma_to_pfn(dev, dev_addr)) + offset;
 }
 
-static inline bool dma_capable(struct device *dev, dma_addr_t addr, size_t size)
-{
-       u64 limit, mask;
-
-       if (!dev->dma_mask)
-               return 0;
-
-       mask = *dev->dma_mask;
-
-       limit = (mask + 1) & ~mask;
-       if (limit && size > limit)
-               return 0;
-
-       if ((addr | (addr + size - 1)) & ~mask)
-               return 0;
-
-       return 1;
-}
-
 #endif /* ASM_ARM_DMA_DIRECT_H */
index b5c240806e1bb72b4b1b35d2d8ed13ac3e562f64..14e352651ce946745609dd2687eeb72d6fd49d75 100644 (file)
@@ -2,14 +2,6 @@
 #ifndef _MIPS_DMA_DIRECT_H
 #define _MIPS_DMA_DIRECT_H 1
 
-static inline bool dma_capable(struct device *dev, dma_addr_t addr, size_t size)
-{
-       if (!dev->dma_mask)
-               return false;
-
-       return addr + size - 1 <= *dev->dma_mask;
-}
-
 dma_addr_t __phys_to_dma(struct device *dev, phys_addr_t paddr);
 phys_addr_t __dma_to_phys(struct device *dev, dma_addr_t daddr);
 
index a2912b47102cf3a1f410726e116d060c739f44d7..e29e8a236b8dff399fac84e9293fd0ac6169b4de 100644 (file)
@@ -2,15 +2,6 @@
 #ifndef ASM_POWERPC_DMA_DIRECT_H
 #define ASM_POWERPC_DMA_DIRECT_H 1
 
-static inline bool dma_capable(struct device *dev, dma_addr_t addr, size_t size)
-{
-       if (!dev->dma_mask)
-               return false;
-
-       return addr + size - 1 <=
-               min_not_zero(*dev->dma_mask, dev->bus_dma_mask);
-}
-
 static inline dma_addr_t __phys_to_dma(struct device *dev, phys_addr_t paddr)
 {
        if (!dev)
index 6db863c3eb9388b8eb315ed919edcc0d01f7e905..991f8aa2676eae043200b1079d8637b7d39e5e25 100644 (file)
@@ -24,6 +24,7 @@ static inline phys_addr_t __dma_to_phys(struct device *dev, dma_addr_t dev_addr)
 
        return paddr + ((phys_addr_t)dev->dma_pfn_offset << PAGE_SHIFT);
 }
+#endif /* !CONFIG_ARCH_HAS_PHYS_TO_DMA */
 
 static inline bool dma_capable(struct device *dev, dma_addr_t addr, size_t size)
 {
@@ -38,7 +39,6 @@ static inline bool dma_capable(struct device *dev, dma_addr_t addr, size_t size)
 
        return end <= min_not_zero(*dev->dma_mask, dev->bus_dma_mask);
 }
-#endif /* !CONFIG_ARCH_HAS_PHYS_TO_DMA */
 
 #ifdef CONFIG_ARCH_HAS_FORCE_DMA_UNENCRYPTED
 bool force_dma_unencrypted(struct device *dev);