dma-mapping: fix the prototype of dma_unmap_single() 54/268154/2
authorMasahiro Yamada <yamada.masahiro@socionext.com>
Fri, 14 Feb 2020 07:40:18 +0000 (16:40 +0900)
committerMarek Szyprowski <m.szyprowski@samsung.com>
Thu, 16 Dec 2021 16:18:05 +0000 (17:18 +0100)
dma_unmap_single() takes the dma address, not virtual address.

Change-Id: I90d611e4236b4d9089236019bb319cc4f7685a4f
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
arch/arm/include/asm/dma-mapping.h
arch/nds32/include/asm/dma-mapping.h
arch/riscv/include/asm/dma-mapping.h
arch/x86/include/asm/dma-mapping.h
drivers/mmc/tmio-common.c
drivers/mtd/nand/raw/denali.c
drivers/net/macb.c
drivers/usb/dwc3/core.c
drivers/usb/gadget/udc/udc-core.c

index fc5b8f634d546dcc26503169a648d31127a95bb6..895b24701f7739bf73e55c5fe1c4973e8d389016 100644 (file)
@@ -28,9 +28,13 @@ static inline unsigned long dma_map_single(volatile void *vaddr, size_t len,
        return (unsigned long)vaddr;
 }
 
-static inline void dma_unmap_single(volatile void *vaddr, size_t len,
-                                   unsigned long paddr)
+static inline void dma_unmap_single(dma_addr_t addr, size_t len,
+                                   enum dma_data_direction dir)
 {
+       len = ALIGN(len, ARCH_DMA_MINALIGN);
+
+       if (dir != DMA_TO_DEVICE)
+               invalidate_dcache_range(addr, addr + len);
 }
 
 #endif /* __ASM_ARM_DMA_MAPPING_H */
index e6808dc84089da299d537578302db38230671835..ae6f1ad42fc696054b435c259a1d57f017aaf82b 100644 (file)
@@ -20,9 +20,13 @@ static inline unsigned long dma_map_single(volatile void *vaddr, size_t len,
        return (unsigned long)vaddr;
 }
 
-static inline void dma_unmap_single(volatile void *vaddr, size_t len,
-                                   unsigned long paddr)
+static inline void dma_unmap_single(dma_addr_t addr, size_t len,
+                                   enum dma_data_direction dir)
 {
+       len = ALIGN(len, ARCH_DMA_MINALIGN);
+
+       if (dir != DMA_TO_DEVICE)
+               invalidate_dcache_range(addr, addr + len);
 }
 
 #endif /* __ASM_NDS_DMA_MAPPING_H */
index 3d930c90eceb3fb8f99ee756dcb47f235f39bc34..8bbf0f984880f0d2c8e4e4b0bf3f62af0e6d4862 100644 (file)
@@ -30,9 +30,13 @@ static inline unsigned long dma_map_single(volatile void *vaddr, size_t len,
        return (unsigned long)vaddr;
 }
 
-static inline void dma_unmap_single(volatile void *vaddr, size_t len,
-                                   unsigned long paddr)
+static inline void dma_unmap_single(dma_addr_t addr, size_t len,
+                                   enum dma_data_direction dir)
 {
+       len = ALIGN(len, ARCH_DMA_MINALIGN);
+
+       if (dir != DMA_TO_DEVICE)
+               invalidate_dcache_range(addr, addr + len);
 }
 
 #endif /* __ASM_RISCV_DMA_MAPPING_H */
index b353ff0bef5926ec382c726ec422537fa3325ca2..d83cf8ec5b905f78259c2a5a8e8d883b0423ecf3 100644 (file)
@@ -28,9 +28,13 @@ static inline unsigned long dma_map_single(volatile void *vaddr, size_t len,
        return (unsigned long)vaddr;
 }
 
-static inline void dma_unmap_single(volatile void *vaddr, size_t len,
-                                   unsigned long paddr)
+static inline void dma_unmap_single(dma_addr_t addr, size_t len,
+                                   enum dma_data_direction dir)
 {
+       len = ALIGN(len, ARCH_DMA_MINALIGN);
+
+       if (dir != DMA_TO_DEVICE)
+               invalidate_dcache_range(addr, addr + len);
 }
 
 #endif /* __ASM_X86_DMA_MAPPING_H */
index 812205a21f6a0731e51be595d95ac77489cf5060..e25b95f4246d88a40aee4d7f3517460df7f3e0d4 100644 (file)
@@ -370,7 +370,7 @@ static int tmio_sd_dma_xfer(struct udevice *dev, struct mmc_data *data)
        if (poll_flag == TMIO_SD_DMA_INFO1_END_RD)
                udelay(1);
 
-       __dma_unmap_single(dma_addr, len, dir);
+       dma_unmap_single(dma_addr, len, dir);
 
        return ret;
 }
index e0eb1339ecd2b079b3a7fe36f1ed3374d97f02f3..78204da7cac4a853a545dd6ed44012ece43dade4 100644 (file)
@@ -605,7 +605,7 @@ static int denali_dma_xfer(struct denali_nand_info *denali, void *buf,
 
        iowrite32(0, denali->reg + DMA_ENABLE);
 
-       dma_unmap_single(denali->dev, dma_addr, size, dir);
+       dma_unmap_single(dma_addr, size, dir);
 
        if (irq_status & INTR__ERASED_PAGE)
                memset(buf, 0xff, size);
index 377188e361c4f9fe98f423f64018b9945f94c7fe..245a546cae5edfe41fceb9270ea5f442b2043300 100644 (file)
@@ -348,7 +348,7 @@ static int _macb_send(struct macb_device *macb, const char *name, void *packet,
                udelay(1);
        }
 
-       dma_unmap_single(packet, length, paddr);
+       dma_unmap_single(paddr, length, DMA_TO_DEVICE);
 
        if (i <= MACB_TX_TIMEOUT) {
                if (ctrl & MACB_BIT(TX_UNDERRUN))
index 56e2a046bf060177a7751aef31011f52f8a0c14f..2d64e991a9c2625d13764305f26fbfa478c19773 100644 (file)
@@ -284,8 +284,8 @@ static int dwc3_setup_scratch_buffers(struct dwc3 *dwc)
        return 0;
 
 err1:
-       dma_unmap_single((void *)(uintptr_t)dwc->scratch_addr, dwc->nr_scratch *
-                        DWC3_SCRATCHBUF_SIZE, DMA_BIDIRECTIONAL);
+       dma_unmap_single(scratch_addr, dwc->nr_scratch * DWC3_SCRATCHBUF_SIZE,
+                        DMA_BIDIRECTIONAL);
 
 err0:
        return ret;
@@ -299,7 +299,7 @@ static void dwc3_free_scratch_buffers(struct dwc3 *dwc)
        if (!dwc->nr_scratch)
                return;
 
-       dma_unmap_single((void *)(uintptr_t)dwc->scratch_addr, dwc->nr_scratch *
+       dma_unmap_single(dwc->scratch_addr, dwc->nr_scratch *
                         DWC3_SCRATCHBUF_SIZE, DMA_BIDIRECTIONAL);
        kfree(dwc->scratchbuf);
 }
index 62b47781ddcc51a6f19638a17b26e1e7b326f098..06b18507caa213dbfa71afac31204dbf1ab746f0 100644 (file)
@@ -65,7 +65,7 @@ void usb_gadget_unmap_request(struct usb_gadget *gadget,
        if (req->length == 0)
                return;
 
-       dma_unmap_single((void *)(uintptr_t)req->dma, req->length,
+       dma_unmap_single(req->dma, req->length,
                         is_in ? DMA_TO_DEVICE : DMA_FROM_DEVICE);
 }
 EXPORT_SYMBOL_GPL(usb_gadget_unmap_request);