dma-coherent: remove the DMA_MEMORY_MAP and DMA_MEMORY_IO flags
authorChristoph Hellwig <hch@lst.de>
Fri, 25 Aug 2017 15:13:09 +0000 (17:13 +0200)
committerChristoph Hellwig <hch@lst.de>
Fri, 1 Sep 2017 09:59:17 +0000 (11:59 +0200)
DMA_MEMORY_IO was never used in the tree, so remove it.  That means there is
no need for the DMA_MEMORY_MAP flag either now, so remove it as well and
change dma_declare_coherent_memory to return a normal errno value.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Marek Szyprowski <m.szyprowski@samsung.com>
Documentation/DMA-API.txt
arch/arm/mach-imx/mach-imx27_visstrim_m10.c
arch/arm/mach-imx/mach-mx31moboard.c
arch/sh/drivers/pci/fixups-dreamcast.c
drivers/base/dma-coherent.c
drivers/base/dma-mapping.c
drivers/media/platform/soc_camera/sh_mobile_ceu_camera.c
drivers/scsi/NCR_Q720.c
drivers/usb/host/ohci-sm501.c
drivers/usb/host/ohci-tmio.c
include/linux/dma-mapping.h

index dddf52e768d6f6b6f7a1a00b317c1ce354e27fd5..ac66ae2509a91c50174f4e21091d025529cfe7fd 100644 (file)
@@ -592,30 +592,11 @@ size is the size of the area (must be multiples of PAGE_SIZE).
 
 flags can be ORed together and are:
 
-- DMA_MEMORY_MAP - request that the memory returned from
-  dma_alloc_coherent() be directly writable.
-
-- DMA_MEMORY_IO - request that the memory returned from
-  dma_alloc_coherent() be addressable using read()/write()/memcpy_toio() etc.
-
-One or both of these flags must be present.
-
 - DMA_MEMORY_EXCLUSIVE - only allocate memory from the declared regions.
   Do not allow dma_alloc_coherent() to fall back to system memory when
   it's out of memory in the declared region.
 
-The return value will be either DMA_MEMORY_MAP or DMA_MEMORY_IO and
-must correspond to a passed in flag (i.e. no returning DMA_MEMORY_IO
-if only DMA_MEMORY_MAP were passed in) for success or zero for
-failure.
-
-Note, for DMA_MEMORY_IO returns, all subsequent memory returned by
-dma_alloc_coherent() may no longer be accessed directly, but instead
-must be accessed using the correct bus functions.  If your driver
-isn't prepared to handle this contingency, it should not specify
-DMA_MEMORY_IO in the input flags.
-
-As a simplification for the platforms, only **one** such region of
+As a simplification for the platforms, only *one* such region of
 memory may be declared per device.
 
 For reasons of efficiency, most platforms choose to track the declared
index dd75a4756761f347a60fc6107cb9a198db9174e2..5169dfba97185b5037743d2d277d8bb74e063dfa 100644 (file)
@@ -245,7 +245,6 @@ static phys_addr_t mx2_camera_base __initdata;
 static void __init visstrim_analog_camera_init(void)
 {
        struct platform_device *pdev;
-       int dma;
 
        gpio_set_value(TVP5150_PWDN, 1);
        ndelay(1);
@@ -258,12 +257,9 @@ static void __init visstrim_analog_camera_init(void)
        if (IS_ERR(pdev))
                return;
 
-       dma = dma_declare_coherent_memory(&pdev->dev,
-                               mx2_camera_base, mx2_camera_base,
-                               MX2_CAMERA_BUF_SIZE,
-                               DMA_MEMORY_MAP | DMA_MEMORY_EXCLUSIVE);
-       if (!(dma & DMA_MEMORY_MAP))
-               return;
+       dma_declare_coherent_memory(&pdev->dev, mx2_camera_base,
+                                   mx2_camera_base, MX2_CAMERA_BUF_SIZE,
+                                   DMA_MEMORY_EXCLUSIVE);
 }
 
 static void __init visstrim_reserve(void)
@@ -444,16 +440,13 @@ static const struct imx_ssi_platform_data visstrim_m10_ssi_pdata __initconst = {
 static void __init visstrim_coda_init(void)
 {
        struct platform_device *pdev;
-       int dma;
 
        pdev = imx27_add_coda();
-       dma = dma_declare_coherent_memory(&pdev->dev,
-                                         mx2_camera_base + MX2_CAMERA_BUF_SIZE,
-                                         mx2_camera_base + MX2_CAMERA_BUF_SIZE,
-                                         MX2_CAMERA_BUF_SIZE,
-                                         DMA_MEMORY_MAP | DMA_MEMORY_EXCLUSIVE);
-       if (!(dma & DMA_MEMORY_MAP))
-               return;
+       dma_declare_coherent_memory(&pdev->dev,
+                                   mx2_camera_base + MX2_CAMERA_BUF_SIZE,
+                                   mx2_camera_base + MX2_CAMERA_BUF_SIZE,
+                                   MX2_CAMERA_BUF_SIZE,
+                                   DMA_MEMORY_EXCLUSIVE);
 }
 
 /* DMA deinterlace */
@@ -466,24 +459,21 @@ static void __init visstrim_deinterlace_init(void)
 {
        int ret = -ENOMEM;
        struct platform_device *pdev = &visstrim_deinterlace;
-       int dma;
 
        ret = platform_device_register(pdev);
 
-       dma = dma_declare_coherent_memory(&pdev->dev,
-                                         mx2_camera_base + 2 * MX2_CAMERA_BUF_SIZE,
-                                         mx2_camera_base + 2 * MX2_CAMERA_BUF_SIZE,
-                                         MX2_CAMERA_BUF_SIZE,
-                                         DMA_MEMORY_MAP | DMA_MEMORY_EXCLUSIVE);
-       if (!(dma & DMA_MEMORY_MAP))
-               return;
+       dma_declare_coherent_memory(&pdev->dev,
+                                   mx2_camera_base + 2 * MX2_CAMERA_BUF_SIZE,
+                                   mx2_camera_base + 2 * MX2_CAMERA_BUF_SIZE,
+                                   MX2_CAMERA_BUF_SIZE,
+                                   DMA_MEMORY_EXCLUSIVE);
 }
 
 /* Emma-PrP for format conversion */
 static void __init visstrim_emmaprp_init(void)
 {
        struct platform_device *pdev;
-       int dma;
+       int ret;
 
        pdev = imx27_add_mx2_emmaprp();
        if (IS_ERR(pdev))
@@ -493,11 +483,11 @@ static void __init visstrim_emmaprp_init(void)
         * Use the same memory area as the analog camera since both
         * devices are, by nature, exclusive.
         */
-       dma = dma_declare_coherent_memory(&pdev->dev,
+       ret = dma_declare_coherent_memory(&pdev->dev,
                                mx2_camera_base, mx2_camera_base,
                                MX2_CAMERA_BUF_SIZE,
-                               DMA_MEMORY_MAP | DMA_MEMORY_EXCLUSIVE);
-       if (!(dma & DMA_MEMORY_MAP))
+                               DMA_MEMORY_EXCLUSIVE);
+       if (ret)
                pr_err("Failed to declare memory for emmaprp\n");
 }
 
index bde9a9af67142ad2c3867b998aaee5d0426fda4e..3cd030960c9810d9ac3a1d179ec47f8002fcf85f 100644 (file)
@@ -475,7 +475,7 @@ static phys_addr_t mx3_camera_base __initdata;
 
 static int __init mx31moboard_init_cam(void)
 {
-       int dma, ret = -ENOMEM;
+       int dma, ret;
        struct platform_device *pdev;
 
        imx31_add_ipu_core();
@@ -484,11 +484,11 @@ static int __init mx31moboard_init_cam(void)
        if (IS_ERR(pdev))
                return PTR_ERR(pdev);
 
-       dma = dma_declare_coherent_memory(&pdev->dev,
-                                       mx3_camera_base, mx3_camera_base,
-                                       MX3_CAMERA_BUF_SIZE,
-                                       DMA_MEMORY_MAP | DMA_MEMORY_EXCLUSIVE);
-       if (!(dma & DMA_MEMORY_MAP))
+       ret = dma_declare_coherent_memory(&pdev->dev,
+                                         mx3_camera_base, mx3_camera_base,
+                                         MX3_CAMERA_BUF_SIZE,
+                                         DMA_MEMORY_EXCLUSIVE);
+       if (ret)
                goto err;
 
        ret = platform_device_add(pdev);
index 1d1c5a227e509e50e865011b7e9912c8db109196..c931d5872ffeeac4b922aaafa18485cb345ca79a 100644 (file)
@@ -63,11 +63,10 @@ static void gapspci_fixup_resources(struct pci_dev *dev)
                res.end = GAPSPCI_DMA_BASE + GAPSPCI_DMA_SIZE - 1;
                res.flags = IORESOURCE_MEM;
                pcibios_resource_to_bus(dev->bus, &region, &res);
-               BUG_ON(!dma_declare_coherent_memory(&dev->dev,
+               BUG_ON(dma_declare_coherent_memory(&dev->dev,
                                                res.start,
                                                region.start,
                                                resource_size(&res),
-                                               DMA_MEMORY_MAP |
                                                DMA_MEMORY_EXCLUSIVE));
                break;
        default:
index 6f6dc4d41788bcb827fdf310aebc96711f477146..b275eeb739f1001b405f5b667150e5d55caca510 100644 (file)
@@ -46,15 +46,10 @@ static bool dma_init_coherent_memory(
        int pages = size >> PAGE_SHIFT;
        int bitmap_size = BITS_TO_LONGS(pages) * sizeof(long);
 
-       if ((flags & (DMA_MEMORY_MAP | DMA_MEMORY_IO)) == 0)
-               goto out;
        if (!size)
                goto out;
 
-       if (flags & DMA_MEMORY_MAP)
-               mem_base = memremap(phys_addr, size, MEMREMAP_WC);
-       else
-               mem_base = ioremap(phys_addr, size);
+       mem_base = memremap(phys_addr, size, MEMREMAP_WC);
        if (!mem_base)
                goto out;
 
@@ -77,12 +72,8 @@ static bool dma_init_coherent_memory(
 
 out:
        kfree(dma_mem);
-       if (mem_base) {
-               if (flags & DMA_MEMORY_MAP)
-                       memunmap(mem_base);
-               else
-                       iounmap(mem_base);
-       }
+       if (mem_base)
+               memunmap(mem_base);
        return false;
 }
 
@@ -91,10 +82,7 @@ static void dma_release_coherent_memory(struct dma_coherent_mem *mem)
        if (!mem)
                return;
 
-       if (mem->flags & DMA_MEMORY_MAP)
-               memunmap(mem->virt_base);
-       else
-               iounmap(mem->virt_base);
+       memunmap(mem->virt_base);
        kfree(mem->bitmap);
        kfree(mem);
 }
@@ -116,16 +104,16 @@ int dma_declare_coherent_memory(struct device *dev, phys_addr_t phys_addr,
                                dma_addr_t device_addr, size_t size, int flags)
 {
        struct dma_coherent_mem *mem;
+       int ret;
 
-       if (!dma_init_coherent_memory(phys_addr, device_addr, size, flags,
-                                     &mem))
-               return 0;
-
-       if (dma_assign_coherent_memory(dev, mem) == 0)
-               return flags & DMA_MEMORY_MAP ? DMA_MEMORY_MAP : DMA_MEMORY_IO;
+       ret = dma_init_coherent_memory(phys_addr, device_addr, size, flags, &mem);
+       if (ret)
+               return ret;
 
-       dma_release_coherent_memory(mem);
-       return 0;
+       ret = dma_assign_coherent_memory(dev, mem);
+       if (ret)
+               dma_release_coherent_memory(mem);
+       return ret;
 }
 EXPORT_SYMBOL(dma_declare_coherent_memory);
 
@@ -186,15 +174,9 @@ static void *__dma_alloc_from_coherent(struct dma_coherent_mem *mem,
         */
        *dma_handle = mem->device_base + (pageno << PAGE_SHIFT);
        ret = mem->virt_base + (pageno << PAGE_SHIFT);
-       dma_memory_map = (mem->flags & DMA_MEMORY_MAP);
        spin_unlock_irqrestore(&mem->spinlock, flags);
-       if (dma_memory_map)
-               memset(ret, 0, size);
-       else
-               memset_io(ret, 0, size);
-
+       memset(ret, 0, size);
        return ret;
-
 err:
        spin_unlock_irqrestore(&mem->spinlock, flags);
        return NULL;
@@ -360,7 +342,7 @@ static int rmem_dma_device_init(struct reserved_mem *rmem, struct device *dev)
 
        if (!mem &&
            !dma_init_coherent_memory(rmem->base, rmem->base, rmem->size,
-                                     DMA_MEMORY_MAP | DMA_MEMORY_EXCLUSIVE,
+                                     DMA_MEMORY_EXCLUSIVE,
                                      &mem)) {
                pr_err("Reserved memory: failed to init DMA memory pool at %pa, size %ld MiB\n",
                        &rmem->base, (unsigned long)rmem->size / SZ_1M);
index b555ff9dd8fceb176af2f567157165726e9ab314..e584eddef0a72814e1ebe0ff40866619525d21ef 100644 (file)
@@ -176,13 +176,10 @@ int dmam_declare_coherent_memory(struct device *dev, phys_addr_t phys_addr,
 
        rc = dma_declare_coherent_memory(dev, phys_addr, device_addr, size,
                                         flags);
-       if (rc) {
+       if (!rc)
                devres_add(dev, res);
-               rc = 0;
-       } else {
+       else
                devres_free(res);
-               rc = -ENOMEM;
-       }
 
        return rc;
 }
index 96dc01750bc0192e0e9c597ce9b352518a31cea1..36762ec954e7e3f3f00d1f9bacd807294edecd84 100644 (file)
@@ -1708,11 +1708,10 @@ static int sh_mobile_ceu_probe(struct platform_device *pdev)
                err = dma_declare_coherent_memory(&pdev->dev, res->start,
                                                  res->start,
                                                  resource_size(res),
-                                                 DMA_MEMORY_MAP |
                                                  DMA_MEMORY_EXCLUSIVE);
-               if (!err) {
+               if (err) {
                        dev_err(&pdev->dev, "Unable to declare CEU memory.\n");
-                       return -ENXIO;
+                       return err;
                }
 
                pcdev->video_limit = resource_size(res);
index 05835bf1bf9cf271bdb1190a411b1d3378f08e80..54e7d26908ee482a4dfd4077e379f18dede4d562 100644 (file)
@@ -217,8 +217,7 @@ NCR_Q720_probe(struct device *dev)
        }
        
        if (dma_declare_coherent_memory(dev, base_addr, base_addr,
-                                       mem_size, DMA_MEMORY_MAP)
-           != DMA_MEMORY_MAP) {
+                                       mem_size, 0)) {
                printk(KERN_ERR "NCR_Q720: DMA declare memory failed\n");
                goto out_release_region;
        }
index a8b8d8b8d9f39dcf28db1bf35da543245fe3d332..d4e0f7cd96fa4454276dbb55f71aa6b051691220 100644 (file)
@@ -123,13 +123,12 @@ static int ohci_hcd_sm501_drv_probe(struct platform_device *pdev)
         * regular memory. The HCD_LOCAL_MEM flag does just that.
         */
 
-       if (!dma_declare_coherent_memory(dev, mem->start,
+       retval = dma_declare_coherent_memory(dev, mem->start,
                                         mem->start - mem->parent->start,
                                         resource_size(mem),
-                                        DMA_MEMORY_MAP |
-                                        DMA_MEMORY_EXCLUSIVE)) {
+                                        DMA_MEMORY_EXCLUSIVE);
+       if (retval) {
                dev_err(dev, "cannot declare coherent memory\n");
-               retval = -ENXIO;
                goto err1;
        }
 
index cfcfadfc94fc25b8e10d788e59514c146d32ccc1..16d081a093bb0d628e943144d61821b5db7defec 100644 (file)
@@ -227,13 +227,10 @@ static int ohci_hcd_tmio_drv_probe(struct platform_device *dev)
                goto err_ioremap_regs;
        }
 
-       if (!dma_declare_coherent_memory(&dev->dev, sram->start,
-                               sram->start,
-                               resource_size(sram),
-                               DMA_MEMORY_MAP | DMA_MEMORY_EXCLUSIVE)) {
-               ret = -EBUSY;
+       ret = dma_declare_coherent_memory(&dev->dev, sram->start, sram->start,
+                               resource_size(sram), DMA_MEMORY_EXCLUSIVE);
+       if (ret)
                goto err_dma_declare;
-       }
 
        if (cell->enable) {
                ret = cell->enable(dev);
index abf369b11f5467b9bbe4782594b792099967ba88..b7dd11c02a459e46b59036d23331fef230adeb05 100644 (file)
@@ -694,9 +694,7 @@ static inline int dma_get_cache_alignment(void)
 #endif
 
 /* flags for the coherent memory api */
-#define        DMA_MEMORY_MAP                  0x01
-#define DMA_MEMORY_IO                  0x02
-#define DMA_MEMORY_EXCLUSIVE           0x04
+#define DMA_MEMORY_EXCLUSIVE           0x01
 
 #ifdef CONFIG_HAVE_GENERIC_DMA_COHERENT
 int dma_declare_coherent_memory(struct device *dev, phys_addr_t phys_addr,
@@ -709,7 +707,7 @@ static inline int
 dma_declare_coherent_memory(struct device *dev, phys_addr_t phys_addr,
                            dma_addr_t device_addr, size_t size, int flags)
 {
-       return 0;
+       return -ENOSYS;
 }
 
 static inline void