All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH 0/4] dma-mapping: Add cache flush/invalidation to dma_{un}map_single
@ 2019-11-15 11:55 Vignesh Raghavendra
  2019-11-15 11:55 ` [U-Boot] [PATCH 1/4] asm: dma-mapping.h: Fix dma mapping functions Vignesh Raghavendra
                   ` (3 more replies)
  0 siblings, 4 replies; 11+ messages in thread
From: Vignesh Raghavendra @ 2019-11-15 11:55 UTC (permalink / raw)
  To: u-boot

Drivers (especially frameworks ported from Linux such as USB) expect
dma_{un}map_single() APIs to take care of cache maintenance. But this is
not the case in U-Boot and few drivers take care of flushing caches
locally. Instead add flush/invalidate calls to DMA APIs in arch specific
dma-mapping.h file so that per driver implementation of these APIs can
be avoided.

I don't have all the affected hardwares. Would greatly appreciate if
these patches work fine on the affected platforms.

Vignesh Raghavendra (4):
  asm: dma-mapping.h: Fix dma mapping functions
  mmc: tmio-common: Drop custom dma mapping functions
  mtd: denali: Drop custom dma mapping functions
  net: macb: Drop local cache flush

 arch/arm/include/asm/dma-mapping.h   | 22 ++++++++++++++++--
 arch/nds32/include/asm/dma-mapping.h | 22 ++++++++++++++++--
 arch/riscv/include/asm/dma-mapping.h | 22 ++++++++++++++++--
 arch/x86/include/asm/dma-mapping.h   | 22 ++++++++++++++++--
 drivers/mmc/tmio-common.c            | 25 +++-----------------
 drivers/mtd/nand/raw/denali.c        | 34 +++-------------------------
 drivers/net/macb.c                   |  4 +---
 7 files changed, 87 insertions(+), 64 deletions(-)

-- 
2.24.0

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH 1/4] asm: dma-mapping.h: Fix dma mapping functions
  2019-11-15 11:55 [U-Boot] [PATCH 0/4] dma-mapping: Add cache flush/invalidation to dma_{un}map_single Vignesh Raghavendra
@ 2019-11-15 11:55 ` Vignesh Raghavendra
  2019-11-15 12:19   ` Masahiro Yamada
                     ` (2 more replies)
  2019-11-15 11:55 ` [U-Boot] [PATCH 2/4] mmc: tmio-common: Drop custom " Vignesh Raghavendra
                   ` (2 subsequent siblings)
  3 siblings, 3 replies; 11+ messages in thread
From: Vignesh Raghavendra @ 2019-11-15 11:55 UTC (permalink / raw)
  To: u-boot

Subsystems such as USB expect dma_map_single() and dma_unmap_single() to
do dcache flush/invalidate operations as required. For example, see
drivers/usb/gadget/udc/udc-core.c::usb_gadget_map_request().
Currently drivers do this locally, (see drivers/usb/dwc3/ep0.c,
drivers/mtd/nand/raw/denali.c etc..)
Update arch specific dma_map_single() and dma_unmap_single() APIs to do
cache flush/invalidate  operations, so that drivers need not implement
them locally.

Signed-off-by: Vignesh Raghavendra <vigneshr@ti.com>
---
 arch/arm/include/asm/dma-mapping.h   | 22 ++++++++++++++++++++--
 arch/nds32/include/asm/dma-mapping.h | 22 ++++++++++++++++++++--
 arch/riscv/include/asm/dma-mapping.h | 22 ++++++++++++++++++++--
 arch/x86/include/asm/dma-mapping.h   | 22 ++++++++++++++++++++--
 4 files changed, 80 insertions(+), 8 deletions(-)

diff --git a/arch/arm/include/asm/dma-mapping.h b/arch/arm/include/asm/dma-mapping.h
index fc5b8f634d54..4b02320dfbd3 100644
--- a/arch/arm/include/asm/dma-mapping.h
+++ b/arch/arm/include/asm/dma-mapping.h
@@ -7,7 +7,10 @@
 #ifndef __ASM_ARM_DMA_MAPPING_H
 #define __ASM_ARM_DMA_MAPPING_H
 
+#include <common.h>
+#include <asm/cache.h>
 #include <linux/dma-direction.h>
+#include <malloc.h>
 
 #define	dma_mapping_error(x, y)	0
 
@@ -25,12 +28,27 @@ static inline void dma_free_coherent(void *addr)
 static inline unsigned long dma_map_single(volatile void *vaddr, size_t len,
 					   enum dma_data_direction dir)
 {
-	return (unsigned long)vaddr;
+	unsigned long addr = (unsigned long)vaddr;
+
+	len = ALIGN(len, ARCH_DMA_MINALIGN);
+
+	if (dir == DMA_FROM_DEVICE)
+		invalidate_dcache_range(addr, addr + len);
+	else
+		flush_dcache_range(addr, addr + len);
+
+	return addr;
 }
 
 static inline void dma_unmap_single(volatile void *vaddr, size_t len,
-				    unsigned long paddr)
+				    enum dma_data_direction dir)
 {
+	unsigned long addr = (unsigned long)vaddr;
+
+	len = ALIGN(len, ARCH_DMA_MINALIGN);
+
+	if (dir != DMA_TO_DEVICE)
+		invalidate_dcache_range(addr, addr + len);
 }
 
 #endif /* __ASM_ARM_DMA_MAPPING_H */
diff --git a/arch/nds32/include/asm/dma-mapping.h b/arch/nds32/include/asm/dma-mapping.h
index e6808dc84089..33c4582f4614 100644
--- a/arch/nds32/include/asm/dma-mapping.h
+++ b/arch/nds32/include/asm/dma-mapping.h
@@ -6,7 +6,10 @@
 #ifndef __ASM_NDS_DMA_MAPPING_H
 #define __ASM_NDS_DMA_MAPPING_H
 
+#include <common.h>
+#include <asm/cache.h>
 #include <linux/dma-direction.h>
+#include <malloc.h>
 
 static void *dma_alloc_coherent(size_t len, unsigned long *handle)
 {
@@ -17,12 +20,27 @@ static void *dma_alloc_coherent(size_t len, unsigned long *handle)
 static inline unsigned long dma_map_single(volatile void *vaddr, size_t len,
 					   enum dma_data_direction dir)
 {
-	return (unsigned long)vaddr;
+	unsigned long addr = (unsigned long)vaddr;
+
+	len = ALIGN(len, ARCH_DMA_MINALIGN);
+
+	if (dir == DMA_FROM_DEVICE)
+		invalidate_dcache_range(addr, addr + len);
+	else
+		flush_dcache_range(addr, addr + len);
+
+	return addr;
 }
 
 static inline void dma_unmap_single(volatile void *vaddr, size_t len,
-				    unsigned long paddr)
+				    enum dma_data_direction dir)
 {
+	unsigned long addr = (unsigned long)vaddr;
+
+	len = ALIGN(len, ARCH_DMA_MINALIGN);
+
+	if (dir != DMA_TO_DEVICE)
+		invalidate_dcache_range(addr, addr + len);
 }
 
 #endif /* __ASM_NDS_DMA_MAPPING_H */
diff --git a/arch/riscv/include/asm/dma-mapping.h b/arch/riscv/include/asm/dma-mapping.h
index 3d930c90eceb..01f8a9219a38 100644
--- a/arch/riscv/include/asm/dma-mapping.h
+++ b/arch/riscv/include/asm/dma-mapping.h
@@ -9,7 +9,10 @@
 #ifndef __ASM_RISCV_DMA_MAPPING_H
 #define __ASM_RISCV_DMA_MAPPING_H
 
+#include <common.h>
+#include <asm/cache.h>
 #include <linux/dma-direction.h>
+#include <malloc.h>
 
 #define dma_mapping_error(x, y)	0
 
@@ -27,12 +30,27 @@ static inline void dma_free_coherent(void *addr)
 static inline unsigned long dma_map_single(volatile void *vaddr, size_t len,
 					   enum dma_data_direction dir)
 {
-	return (unsigned long)vaddr;
+	unsigned long addr = (unsigned long)vaddr;
+
+	len = ALIGN(len, ARCH_DMA_MINALIGN);
+
+	if (dir == DMA_FROM_DEVICE)
+		invalidate_dcache_range(addr, addr + len);
+	else
+		flush_dcache_range(addr, addr + len);
+
+	return addr;
 }
 
 static inline void dma_unmap_single(volatile void *vaddr, size_t len,
-				    unsigned long paddr)
+				    enum dma_data_direction dir)
 {
+	unsigned long addr = (unsigned long)vaddr;
+
+	len = ALIGN(len, ARCH_DMA_MINALIGN);
+
+	if (dir != DMA_TO_DEVICE)
+		invalidate_dcache_range(addr, addr + len);
 }
 
 #endif /* __ASM_RISCV_DMA_MAPPING_H */
diff --git a/arch/x86/include/asm/dma-mapping.h b/arch/x86/include/asm/dma-mapping.h
index b353ff0bef59..c228f684665f 100644
--- a/arch/x86/include/asm/dma-mapping.h
+++ b/arch/x86/include/asm/dma-mapping.h
@@ -7,7 +7,10 @@
 #ifndef __ASM_X86_DMA_MAPPING_H
 #define __ASM_X86_DMA_MAPPING_H
 
+#include <common.h>
+#include <asm/cache.h>
 #include <linux/dma-direction.h>
+#include <malloc.h>
 
 #define	dma_mapping_error(x, y)	0
 
@@ -25,12 +28,27 @@ static inline void dma_free_coherent(void *addr)
 static inline unsigned long dma_map_single(volatile void *vaddr, size_t len,
 					   enum dma_data_direction dir)
 {
-	return (unsigned long)vaddr;
+	unsigned long addr = (unsigned long)vaddr;
+
+	len = ALIGN(len, ARCH_DMA_MINALIGN);
+
+	if (dir == DMA_FROM_DEVICE)
+		invalidate_dcache_range(addr, addr + len);
+	else
+		flush_dcache_range(addr, addr + len);
+
+	return addr;
 }
 
 static inline void dma_unmap_single(volatile void *vaddr, size_t len,
-				    unsigned long paddr)
+				    enum dma_data_direction dir)
 {
+	unsigned long addr = (unsigned long)vaddr;
+
+	len = ALIGN(len, ARCH_DMA_MINALIGN);
+
+	if (dir != DMA_TO_DEVICE)
+		invalidate_dcache_range(addr, addr + len);
 }
 
 #endif /* __ASM_X86_DMA_MAPPING_H */
-- 
2.24.0

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH 2/4] mmc: tmio-common: Drop custom dma mapping functions
  2019-11-15 11:55 [U-Boot] [PATCH 0/4] dma-mapping: Add cache flush/invalidation to dma_{un}map_single Vignesh Raghavendra
  2019-11-15 11:55 ` [U-Boot] [PATCH 1/4] asm: dma-mapping.h: Fix dma mapping functions Vignesh Raghavendra
@ 2019-11-15 11:55 ` Vignesh Raghavendra
  2019-11-15 12:18   ` Masahiro Yamada
  2019-11-15 11:55 ` [U-Boot] [PATCH 3/4] mtd: denali: " Vignesh Raghavendra
  2019-11-15 11:55 ` [U-Boot] [PATCH 4/4] net: macb: Drop local cache flush Vignesh Raghavendra
  3 siblings, 1 reply; 11+ messages in thread
From: Vignesh Raghavendra @ 2019-11-15 11:55 UTC (permalink / raw)
  To: u-boot

Drop local dma_map_single() and dma_unmap_single() and use arch specific
common implementation

Signed-off-by: Vignesh Raghavendra <vigneshr@ti.com>
---
 drivers/mmc/tmio-common.c | 25 +++----------------------
 1 file changed, 3 insertions(+), 22 deletions(-)

diff --git a/drivers/mmc/tmio-common.c b/drivers/mmc/tmio-common.c
index 812205a21f6a..37c2b8555150 100644
--- a/drivers/mmc/tmio-common.c
+++ b/drivers/mmc/tmio-common.c
@@ -4,6 +4,7 @@
  *   Author: Masahiro Yamada <yamada.masahiro@socionext.com>
  */
 
+#include <asm/dma-mapping.h>
 #include <common.h>
 #include <clk.h>
 #include <fdtdec.h>
@@ -75,26 +76,6 @@ void tmio_sd_writel(struct tmio_sd_priv *priv,
 		writel(val, priv->regbase + reg);
 }
 
-static dma_addr_t __dma_map_single(void *ptr, size_t size,
-				   enum dma_data_direction dir)
-{
-	unsigned long addr = (unsigned long)ptr;
-
-	if (dir == DMA_FROM_DEVICE)
-		invalidate_dcache_range(addr, addr + size);
-	else
-		flush_dcache_range(addr, addr + size);
-
-	return addr;
-}
-
-static void __dma_unmap_single(dma_addr_t addr, size_t size,
-			       enum dma_data_direction dir)
-{
-	if (dir != DMA_TO_DEVICE)
-		invalidate_dcache_range(addr, addr + size);
-}
-
 static int tmio_sd_check_error(struct udevice *dev, struct mmc_cmd *cmd)
 {
 	struct tmio_sd_priv *priv = dev_get_priv(dev);
@@ -361,7 +342,7 @@ static int tmio_sd_dma_xfer(struct udevice *dev, struct mmc_data *data)
 
 	tmio_sd_writel(priv, tmp, TMIO_SD_DMA_MODE);
 
-	dma_addr = __dma_map_single(buf, len, dir);
+	dma_addr = dma_map_single(buf, len, dir);
 
 	tmio_sd_dma_start(priv, dma_addr);
 
@@ -370,7 +351,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(buf, len, dir);
 
 	return ret;
 }
-- 
2.24.0

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH 3/4] mtd: denali: Drop custom dma mapping functions
  2019-11-15 11:55 [U-Boot] [PATCH 0/4] dma-mapping: Add cache flush/invalidation to dma_{un}map_single Vignesh Raghavendra
  2019-11-15 11:55 ` [U-Boot] [PATCH 1/4] asm: dma-mapping.h: Fix dma mapping functions Vignesh Raghavendra
  2019-11-15 11:55 ` [U-Boot] [PATCH 2/4] mmc: tmio-common: Drop custom " Vignesh Raghavendra
@ 2019-11-15 11:55 ` Vignesh Raghavendra
  2019-11-15 12:18   ` Masahiro Yamada
  2019-11-15 11:55 ` [U-Boot] [PATCH 4/4] net: macb: Drop local cache flush Vignesh Raghavendra
  3 siblings, 1 reply; 11+ messages in thread
From: Vignesh Raghavendra @ 2019-11-15 11:55 UTC (permalink / raw)
  To: u-boot

Drop local dma_map_single() and dma_unmap_single() and use arch specific
common implementation

Signed-off-by: Vignesh Raghavendra <vigneshr@ti.com>
---
 drivers/mtd/nand/raw/denali.c | 34 +++-------------------------------
 1 file changed, 3 insertions(+), 31 deletions(-)

diff --git a/drivers/mtd/nand/raw/denali.c b/drivers/mtd/nand/raw/denali.c
index e0eb1339ecd2..8537c609fb62 100644
--- a/drivers/mtd/nand/raw/denali.c
+++ b/drivers/mtd/nand/raw/denali.c
@@ -5,6 +5,7 @@
  * Copyright (C) 2009-2010, Intel Corporation and its suppliers.
  */
 
+#include <asm/dma-mapping.h>
 #include <dm.h>
 #include <nand.h>
 #include <linux/bitfield.h>
@@ -16,35 +17,6 @@
 
 #include "denali.h"
 
-static dma_addr_t dma_map_single(void *dev, void *ptr, size_t size,
-				 enum dma_data_direction dir)
-{
-	unsigned long addr = (unsigned long)ptr;
-
-	size = ALIGN(size, ARCH_DMA_MINALIGN);
-
-	if (dir == DMA_FROM_DEVICE)
-		invalidate_dcache_range(addr, addr + size);
-	else
-		flush_dcache_range(addr, addr + size);
-
-	return addr;
-}
-
-static void dma_unmap_single(void *dev, dma_addr_t addr, size_t size,
-			     enum dma_data_direction dir)
-{
-	size = ALIGN(size, ARCH_DMA_MINALIGN);
-
-	if (dir != DMA_TO_DEVICE)
-		invalidate_dcache_range(addr, addr + size);
-}
-
-static int dma_mapping_error(void *dev, dma_addr_t addr)
-{
-	return 0;
-}
-
 #define DENALI_NAND_NAME    "denali-nand"
 
 /* for Indexed Addressing */
@@ -564,7 +536,7 @@ static int denali_dma_xfer(struct denali_nand_info *denali, void *buf,
 	enum dma_data_direction dir = write ? DMA_TO_DEVICE : DMA_FROM_DEVICE;
 	int ret = 0;
 
-	dma_addr = dma_map_single(denali->dev, buf, size, dir);
+	dma_addr = dma_map_single(buf, size, dir);
 	if (dma_mapping_error(denali->dev, dma_addr)) {
 		dev_dbg(denali->dev, "Failed to DMA-map buffer. Trying PIO.\n");
 		return denali_pio_xfer(denali, buf, size, page, raw, write);
@@ -605,7 +577,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(buf, size, dir);
 
 	if (irq_status & INTR__ERASED_PAGE)
 		memset(buf, 0xff, size);
-- 
2.24.0

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH 4/4] net: macb: Drop local cache flush
  2019-11-15 11:55 [U-Boot] [PATCH 0/4] dma-mapping: Add cache flush/invalidation to dma_{un}map_single Vignesh Raghavendra
                   ` (2 preceding siblings ...)
  2019-11-15 11:55 ` [U-Boot] [PATCH 3/4] mtd: denali: " Vignesh Raghavendra
@ 2019-11-15 11:55 ` Vignesh Raghavendra
  3 siblings, 0 replies; 11+ messages in thread
From: Vignesh Raghavendra @ 2019-11-15 11:55 UTC (permalink / raw)
  To: u-boot

Now that arch specific dma mapping APIs take care of cache
flush/invalidate, drop local cache flush operation.

Signed-off-by: Vignesh Raghavendra <vigneshr@ti.com>
---
 drivers/net/macb.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/drivers/net/macb.c b/drivers/net/macb.c
index 1a532b0e5a4f..1ded76b6d7b6 100644
--- a/drivers/net/macb.c
+++ b/drivers/net/macb.c
@@ -331,8 +331,6 @@ static int _macb_send(struct macb_device *macb, const char *name, void *packet,
 	macb->tx_ring[tx_head].addr = paddr;
 	barrier();
 	macb_flush_ring_desc(macb, TX);
-	/* Do we need check paddr and length is dcache line aligned? */
-	flush_dcache_range(paddr, paddr + ALIGN(length, ARCH_DMA_MINALIGN));
 	macb_writel(macb, NCR, MACB_BIT(TE) | MACB_BIT(RE) | MACB_BIT(TSTART));
 
 	/*
@@ -348,7 +346,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(packet, length, DMA_TO_DEVICE);
 
 	if (i <= MACB_TX_TIMEOUT) {
 		if (ctrl & MACB_BIT(TX_UNDERRUN))
-- 
2.24.0

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH 3/4] mtd: denali: Drop custom dma mapping functions
  2019-11-15 11:55 ` [U-Boot] [PATCH 3/4] mtd: denali: " Vignesh Raghavendra
@ 2019-11-15 12:18   ` Masahiro Yamada
  0 siblings, 0 replies; 11+ messages in thread
From: Masahiro Yamada @ 2019-11-15 12:18 UTC (permalink / raw)
  To: u-boot

On Fri, Nov 15, 2019 at 8:56 PM Vignesh Raghavendra <vigneshr@ti.com> wrote:
>
> Drop local dma_map_single() and dma_unmap_single() and use arch specific
> common implementation
>
> Signed-off-by: Vignesh Raghavendra <vigneshr@ti.com>
> ---


Acked-by: Masahiro Yamada <yamada.masahiro@socionext.com>

>  drivers/mtd/nand/raw/denali.c | 34 +++-------------------------------
>  1 file changed, 3 insertions(+), 31 deletions(-)
>
> diff --git a/drivers/mtd/nand/raw/denali.c b/drivers/mtd/nand/raw/denali.c
> index e0eb1339ecd2..8537c609fb62 100644
> --- a/drivers/mtd/nand/raw/denali.c
> +++ b/drivers/mtd/nand/raw/denali.c
> @@ -5,6 +5,7 @@
>   * Copyright (C) 2009-2010, Intel Corporation and its suppliers.
>   */
>
> +#include <asm/dma-mapping.h>
>  #include <dm.h>
>  #include <nand.h>
>  #include <linux/bitfield.h>
> @@ -16,35 +17,6 @@
>
>  #include "denali.h"
>
> -static dma_addr_t dma_map_single(void *dev, void *ptr, size_t size,
> -                                enum dma_data_direction dir)
> -{
> -       unsigned long addr = (unsigned long)ptr;
> -
> -       size = ALIGN(size, ARCH_DMA_MINALIGN);
> -
> -       if (dir == DMA_FROM_DEVICE)
> -               invalidate_dcache_range(addr, addr + size);
> -       else
> -               flush_dcache_range(addr, addr + size);
> -
> -       return addr;
> -}
> -
> -static void dma_unmap_single(void *dev, dma_addr_t addr, size_t size,
> -                            enum dma_data_direction dir)
> -{
> -       size = ALIGN(size, ARCH_DMA_MINALIGN);
> -
> -       if (dir != DMA_TO_DEVICE)
> -               invalidate_dcache_range(addr, addr + size);
> -}
> -
> -static int dma_mapping_error(void *dev, dma_addr_t addr)
> -{
> -       return 0;
> -}
> -
>  #define DENALI_NAND_NAME    "denali-nand"
>
>  /* for Indexed Addressing */
> @@ -564,7 +536,7 @@ static int denali_dma_xfer(struct denali_nand_info *denali, void *buf,
>         enum dma_data_direction dir = write ? DMA_TO_DEVICE : DMA_FROM_DEVICE;
>         int ret = 0;
>
> -       dma_addr = dma_map_single(denali->dev, buf, size, dir);
> +       dma_addr = dma_map_single(buf, size, dir);
>         if (dma_mapping_error(denali->dev, dma_addr)) {
>                 dev_dbg(denali->dev, "Failed to DMA-map buffer. Trying PIO.\n");
>                 return denali_pio_xfer(denali, buf, size, page, raw, write);
> @@ -605,7 +577,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(buf, size, dir);
>
>         if (irq_status & INTR__ERASED_PAGE)
>                 memset(buf, 0xff, size);
> --
> 2.24.0
>
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> https://lists.denx.de/listinfo/u-boot



-- 
Best Regards
Masahiro Yamada

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH 2/4] mmc: tmio-common: Drop custom dma mapping functions
  2019-11-15 11:55 ` [U-Boot] [PATCH 2/4] mmc: tmio-common: Drop custom " Vignesh Raghavendra
@ 2019-11-15 12:18   ` Masahiro Yamada
  0 siblings, 0 replies; 11+ messages in thread
From: Masahiro Yamada @ 2019-11-15 12:18 UTC (permalink / raw)
  To: u-boot

On Fri, Nov 15, 2019 at 8:56 PM Vignesh Raghavendra <vigneshr@ti.com> wrote:
>
> Drop local dma_map_single() and dma_unmap_single() and use arch specific
> common implementation
>
> Signed-off-by: Vignesh Raghavendra <vigneshr@ti.com>
> ---

Acked-by: Masahiro Yamada <yamada.masahiro@socionext.com>


>  drivers/mmc/tmio-common.c | 25 +++----------------------
>  1 file changed, 3 insertions(+), 22 deletions(-)
>
> diff --git a/drivers/mmc/tmio-common.c b/drivers/mmc/tmio-common.c
> index 812205a21f6a..37c2b8555150 100644
> --- a/drivers/mmc/tmio-common.c
> +++ b/drivers/mmc/tmio-common.c
> @@ -4,6 +4,7 @@
>   *   Author: Masahiro Yamada <yamada.masahiro@socionext.com>
>   */
>
> +#include <asm/dma-mapping.h>
>  #include <common.h>
>  #include <clk.h>
>  #include <fdtdec.h>
> @@ -75,26 +76,6 @@ void tmio_sd_writel(struct tmio_sd_priv *priv,
>                 writel(val, priv->regbase + reg);
>  }
>
> -static dma_addr_t __dma_map_single(void *ptr, size_t size,
> -                                  enum dma_data_direction dir)
> -{
> -       unsigned long addr = (unsigned long)ptr;
> -
> -       if (dir == DMA_FROM_DEVICE)
> -               invalidate_dcache_range(addr, addr + size);
> -       else
> -               flush_dcache_range(addr, addr + size);
> -
> -       return addr;
> -}
> -
> -static void __dma_unmap_single(dma_addr_t addr, size_t size,
> -                              enum dma_data_direction dir)
> -{
> -       if (dir != DMA_TO_DEVICE)
> -               invalidate_dcache_range(addr, addr + size);
> -}
> -
>  static int tmio_sd_check_error(struct udevice *dev, struct mmc_cmd *cmd)
>  {
>         struct tmio_sd_priv *priv = dev_get_priv(dev);
> @@ -361,7 +342,7 @@ static int tmio_sd_dma_xfer(struct udevice *dev, struct mmc_data *data)
>
>         tmio_sd_writel(priv, tmp, TMIO_SD_DMA_MODE);
>
> -       dma_addr = __dma_map_single(buf, len, dir);
> +       dma_addr = dma_map_single(buf, len, dir);
>
>         tmio_sd_dma_start(priv, dma_addr);
>
> @@ -370,7 +351,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(buf, len, dir);
>
>         return ret;
>  }
> --
> 2.24.0
>
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> https://lists.denx.de/listinfo/u-boot



-- 
Best Regards
Masahiro Yamada

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH 1/4] asm: dma-mapping.h: Fix dma mapping functions
  2019-11-15 11:55 ` [U-Boot] [PATCH 1/4] asm: dma-mapping.h: Fix dma mapping functions Vignesh Raghavendra
@ 2019-11-15 12:19   ` Masahiro Yamada
       [not found]   ` <752D002CFF5D0F4FA35C0100F1D73F3FA469DB69@ATCPCS16.andestech.com>
  2020-01-15 20:47   ` Tom Rini
  2 siblings, 0 replies; 11+ messages in thread
From: Masahiro Yamada @ 2019-11-15 12:19 UTC (permalink / raw)
  To: u-boot

On Fri, Nov 15, 2019 at 8:55 PM Vignesh Raghavendra <vigneshr@ti.com> wrote:
>
> Subsystems such as USB expect dma_map_single() and dma_unmap_single() to
> do dcache flush/invalidate operations as required. For example, see
> drivers/usb/gadget/udc/udc-core.c::usb_gadget_map_request().
> Currently drivers do this locally, (see drivers/usb/dwc3/ep0.c,
> drivers/mtd/nand/raw/denali.c etc..)
> Update arch specific dma_map_single() and dma_unmap_single() APIs to do
> cache flush/invalidate  operations, so that drivers need not implement
> them locally.
>
> Signed-off-by: Vignesh Raghavendra <vigneshr@ti.com>


Reviewed-by: Masahiro Yamada <yamada.masahiro@socionext.com>


> ---
>  arch/arm/include/asm/dma-mapping.h   | 22 ++++++++++++++++++++--
>  arch/nds32/include/asm/dma-mapping.h | 22 ++++++++++++++++++++--
>  arch/riscv/include/asm/dma-mapping.h | 22 ++++++++++++++++++++--
>  arch/x86/include/asm/dma-mapping.h   | 22 ++++++++++++++++++++--
>  4 files changed, 80 insertions(+), 8 deletions(-)
>
> diff --git a/arch/arm/include/asm/dma-mapping.h b/arch/arm/include/asm/dma-mapping.h
> index fc5b8f634d54..4b02320dfbd3 100644
> --- a/arch/arm/include/asm/dma-mapping.h
> +++ b/arch/arm/include/asm/dma-mapping.h
> @@ -7,7 +7,10 @@
>  #ifndef __ASM_ARM_DMA_MAPPING_H
>  #define __ASM_ARM_DMA_MAPPING_H
>
> +#include <common.h>
> +#include <asm/cache.h>
>  #include <linux/dma-direction.h>
> +#include <malloc.h>
>
>  #define        dma_mapping_error(x, y) 0
>
> @@ -25,12 +28,27 @@ static inline void dma_free_coherent(void *addr)
>  static inline unsigned long dma_map_single(volatile void *vaddr, size_t len,
>                                            enum dma_data_direction dir)
>  {
> -       return (unsigned long)vaddr;
> +       unsigned long addr = (unsigned long)vaddr;
> +
> +       len = ALIGN(len, ARCH_DMA_MINALIGN);
> +
> +       if (dir == DMA_FROM_DEVICE)
> +               invalidate_dcache_range(addr, addr + len);
> +       else
> +               flush_dcache_range(addr, addr + len);
> +
> +       return addr;
>  }
>
>  static inline void dma_unmap_single(volatile void *vaddr, size_t len,
> -                                   unsigned long paddr)
> +                                   enum dma_data_direction dir)
>  {
> +       unsigned long addr = (unsigned long)vaddr;
> +
> +       len = ALIGN(len, ARCH_DMA_MINALIGN);
> +
> +       if (dir != DMA_TO_DEVICE)
> +               invalidate_dcache_range(addr, addr + len);
>  }
>
>  #endif /* __ASM_ARM_DMA_MAPPING_H */
> diff --git a/arch/nds32/include/asm/dma-mapping.h b/arch/nds32/include/asm/dma-mapping.h
> index e6808dc84089..33c4582f4614 100644
> --- a/arch/nds32/include/asm/dma-mapping.h
> +++ b/arch/nds32/include/asm/dma-mapping.h
> @@ -6,7 +6,10 @@
>  #ifndef __ASM_NDS_DMA_MAPPING_H
>  #define __ASM_NDS_DMA_MAPPING_H
>
> +#include <common.h>
> +#include <asm/cache.h>
>  #include <linux/dma-direction.h>
> +#include <malloc.h>
>
>  static void *dma_alloc_coherent(size_t len, unsigned long *handle)
>  {
> @@ -17,12 +20,27 @@ static void *dma_alloc_coherent(size_t len, unsigned long *handle)
>  static inline unsigned long dma_map_single(volatile void *vaddr, size_t len,
>                                            enum dma_data_direction dir)
>  {
> -       return (unsigned long)vaddr;
> +       unsigned long addr = (unsigned long)vaddr;
> +
> +       len = ALIGN(len, ARCH_DMA_MINALIGN);
> +
> +       if (dir == DMA_FROM_DEVICE)
> +               invalidate_dcache_range(addr, addr + len);
> +       else
> +               flush_dcache_range(addr, addr + len);
> +
> +       return addr;
>  }
>
>  static inline void dma_unmap_single(volatile void *vaddr, size_t len,
> -                                   unsigned long paddr)
> +                                   enum dma_data_direction dir)
>  {
> +       unsigned long addr = (unsigned long)vaddr;
> +
> +       len = ALIGN(len, ARCH_DMA_MINALIGN);
> +
> +       if (dir != DMA_TO_DEVICE)
> +               invalidate_dcache_range(addr, addr + len);
>  }
>
>  #endif /* __ASM_NDS_DMA_MAPPING_H */
> diff --git a/arch/riscv/include/asm/dma-mapping.h b/arch/riscv/include/asm/dma-mapping.h
> index 3d930c90eceb..01f8a9219a38 100644
> --- a/arch/riscv/include/asm/dma-mapping.h
> +++ b/arch/riscv/include/asm/dma-mapping.h
> @@ -9,7 +9,10 @@
>  #ifndef __ASM_RISCV_DMA_MAPPING_H
>  #define __ASM_RISCV_DMA_MAPPING_H
>
> +#include <common.h>
> +#include <asm/cache.h>
>  #include <linux/dma-direction.h>
> +#include <malloc.h>
>
>  #define dma_mapping_error(x, y)        0
>
> @@ -27,12 +30,27 @@ static inline void dma_free_coherent(void *addr)
>  static inline unsigned long dma_map_single(volatile void *vaddr, size_t len,
>                                            enum dma_data_direction dir)
>  {
> -       return (unsigned long)vaddr;
> +       unsigned long addr = (unsigned long)vaddr;
> +
> +       len = ALIGN(len, ARCH_DMA_MINALIGN);
> +
> +       if (dir == DMA_FROM_DEVICE)
> +               invalidate_dcache_range(addr, addr + len);
> +       else
> +               flush_dcache_range(addr, addr + len);
> +
> +       return addr;
>  }
>
>  static inline void dma_unmap_single(volatile void *vaddr, size_t len,
> -                                   unsigned long paddr)
> +                                   enum dma_data_direction dir)
>  {
> +       unsigned long addr = (unsigned long)vaddr;
> +
> +       len = ALIGN(len, ARCH_DMA_MINALIGN);
> +
> +       if (dir != DMA_TO_DEVICE)
> +               invalidate_dcache_range(addr, addr + len);
>  }
>
>  #endif /* __ASM_RISCV_DMA_MAPPING_H */
> diff --git a/arch/x86/include/asm/dma-mapping.h b/arch/x86/include/asm/dma-mapping.h
> index b353ff0bef59..c228f684665f 100644
> --- a/arch/x86/include/asm/dma-mapping.h
> +++ b/arch/x86/include/asm/dma-mapping.h
> @@ -7,7 +7,10 @@
>  #ifndef __ASM_X86_DMA_MAPPING_H
>  #define __ASM_X86_DMA_MAPPING_H
>
> +#include <common.h>
> +#include <asm/cache.h>
>  #include <linux/dma-direction.h>
> +#include <malloc.h>
>
>  #define        dma_mapping_error(x, y) 0
>
> @@ -25,12 +28,27 @@ static inline void dma_free_coherent(void *addr)
>  static inline unsigned long dma_map_single(volatile void *vaddr, size_t len,
>                                            enum dma_data_direction dir)
>  {
> -       return (unsigned long)vaddr;
> +       unsigned long addr = (unsigned long)vaddr;
> +
> +       len = ALIGN(len, ARCH_DMA_MINALIGN);
> +
> +       if (dir == DMA_FROM_DEVICE)
> +               invalidate_dcache_range(addr, addr + len);
> +       else
> +               flush_dcache_range(addr, addr + len);
> +
> +       return addr;
>  }
>
>  static inline void dma_unmap_single(volatile void *vaddr, size_t len,
> -                                   unsigned long paddr)
> +                                   enum dma_data_direction dir)
>  {
> +       unsigned long addr = (unsigned long)vaddr;
> +
> +       len = ALIGN(len, ARCH_DMA_MINALIGN);
> +
> +       if (dir != DMA_TO_DEVICE)
> +               invalidate_dcache_range(addr, addr + len);
>  }
>
>  #endif /* __ASM_X86_DMA_MAPPING_H */
> --
> 2.24.0
>
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> https://lists.denx.de/listinfo/u-boot



-- 
Best Regards
Masahiro Yamada

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH 1/4] asm: dma-mapping.h: Fix dma mapping functions
       [not found]   ` <752D002CFF5D0F4FA35C0100F1D73F3FA469DB69@ATCPCS16.andestech.com>
@ 2019-11-19  0:51     ` Rick Chen
  0 siblings, 0 replies; 11+ messages in thread
From: Rick Chen @ 2019-11-19  0:51 UTC (permalink / raw)
  To: u-boot

> From: Vignesh Raghavendra [mailto:vigneshr at ti.com]
> Sent: Friday, November 15, 2019 7:55 PM
> To: Rick Jian-Zhi Chen(陳建志); Simon Glass; Bin Meng; Peng Fan; Joe Hershberger
> Cc: Vignesh Raghavendra; Ye Li; Anup Patel; Alexander Graf; Lukas Auer; Masahiro Yamada; u-boot at lists.denx.de; Lokesh Vutla; Tom Rini
> Subject: [PATCH 1/4] asm: dma-mapping.h: Fix dma mapping functions
>
> Subsystems such as USB expect dma_map_single() and dma_unmap_single() to do dcache flush/invalidate operations as required. For example, see drivers/usb/gadget/udc/udc-core.c::usb_gadget_map_request().
> Currently drivers do this locally, (see drivers/usb/dwc3/ep0.c, drivers/mtd/nand/raw/denali.c etc..) Update arch specific dma_map_single() and dma_unmap_single() APIs to do cache flush/invalidate  operations, so that drivers need not implement them locally.
>
> Signed-off-by: Vignesh Raghavendra <vigneshr@ti.com>

Reviewed-by: Rick Chen <rick@andestech.com>

> ---
>  arch/arm/include/asm/dma-mapping.h   | 22 ++++++++++++++++++++--
>  arch/nds32/include/asm/dma-mapping.h | 22 ++++++++++++++++++++--  arch/riscv/include/asm/dma-mapping.h | 22 ++++++++++++++++++++--
>  arch/x86/include/asm/dma-mapping.h   | 22 ++++++++++++++++++++--
>  4 files changed, 80 insertions(+), 8 deletions(-)
>
> diff --git a/arch/arm/include/asm/dma-mapping.h b/arch/arm/include/asm/dma-mapping.h
> index fc5b8f634d54..4b02320dfbd3 100644
> --- a/arch/arm/include/asm/dma-mapping.h
> +++ b/arch/arm/include/asm/dma-mapping.h
> @@ -7,7 +7,10 @@
>  #ifndef __ASM_ARM_DMA_MAPPING_H
>  #define __ASM_ARM_DMA_MAPPING_H
>
> +#include <common.h>
> +#include <asm/cache.h>
>  #include <linux/dma-direction.h>
> +#include <malloc.h>
>
>  #define        dma_mapping_error(x, y) 0
>
> @@ -25,12 +28,27 @@ static inline void dma_free_coherent(void *addr)  static inline unsigned long dma_map_single(volatile void *vaddr, size_t len,
>                                            enum dma_data_direction dir)
>  {
> -       return (unsigned long)vaddr;
> +       unsigned long addr = (unsigned long)vaddr;
> +
> +       len = ALIGN(len, ARCH_DMA_MINALIGN);
> +
> +       if (dir == DMA_FROM_DEVICE)
> +               invalidate_dcache_range(addr, addr + len);
> +       else
> +               flush_dcache_range(addr, addr + len);
> +
> +       return addr;
>  }
>
>  static inline void dma_unmap_single(volatile void *vaddr, size_t len,
> -                                   unsigned long paddr)
> +                                   enum dma_data_direction dir)
>  {
> +       unsigned long addr = (unsigned long)vaddr;
> +
> +       len = ALIGN(len, ARCH_DMA_MINALIGN);
> +
> +       if (dir != DMA_TO_DEVICE)
> +               invalidate_dcache_range(addr, addr + len);
>  }
>
>  #endif /* __ASM_ARM_DMA_MAPPING_H */
> diff --git a/arch/nds32/include/asm/dma-mapping.h b/arch/nds32/include/asm/dma-mapping.h
> index e6808dc84089..33c4582f4614 100644
> --- a/arch/nds32/include/asm/dma-mapping.h
> +++ b/arch/nds32/include/asm/dma-mapping.h
> @@ -6,7 +6,10 @@
>  #ifndef __ASM_NDS_DMA_MAPPING_H
>  #define __ASM_NDS_DMA_MAPPING_H
>
> +#include <common.h>
> +#include <asm/cache.h>
>  #include <linux/dma-direction.h>
> +#include <malloc.h>
>
>  static void *dma_alloc_coherent(size_t len, unsigned long *handle)  { @@ -17,12 +20,27 @@ static void *dma_alloc_coherent(size_t len, unsigned long *handle)  static inline unsigned long dma_map_single(volatile void *vaddr, size_t len,
>                                            enum dma_data_direction dir)
>  {
> -       return (unsigned long)vaddr;
> +       unsigned long addr = (unsigned long)vaddr;
> +
> +       len = ALIGN(len, ARCH_DMA_MINALIGN);
> +
> +       if (dir == DMA_FROM_DEVICE)
> +               invalidate_dcache_range(addr, addr + len);
> +       else
> +               flush_dcache_range(addr, addr + len);
> +
> +       return addr;
>  }
>
>  static inline void dma_unmap_single(volatile void *vaddr, size_t len,
> -                                   unsigned long paddr)
> +                                   enum dma_data_direction dir)
>  {
> +       unsigned long addr = (unsigned long)vaddr;
> +
> +       len = ALIGN(len, ARCH_DMA_MINALIGN);
> +
> +       if (dir != DMA_TO_DEVICE)
> +               invalidate_dcache_range(addr, addr + len);
>  }
>
>  #endif /* __ASM_NDS_DMA_MAPPING_H */
> diff --git a/arch/riscv/include/asm/dma-mapping.h b/arch/riscv/include/asm/dma-mapping.h
> index 3d930c90eceb..01f8a9219a38 100644
> --- a/arch/riscv/include/asm/dma-mapping.h
> +++ b/arch/riscv/include/asm/dma-mapping.h
> @@ -9,7 +9,10 @@
>  #ifndef __ASM_RISCV_DMA_MAPPING_H
>  #define __ASM_RISCV_DMA_MAPPING_H
>
> +#include <common.h>
> +#include <asm/cache.h>
>  #include <linux/dma-direction.h>
> +#include <malloc.h>
>
>  #define dma_mapping_error(x, y)        0
>
> @@ -27,12 +30,27 @@ static inline void dma_free_coherent(void *addr)  static inline unsigned long dma_map_single(volatile void *vaddr, size_t len,
>                                            enum dma_data_direction dir)
>  {
> -       return (unsigned long)vaddr;
> +       unsigned long addr = (unsigned long)vaddr;
> +
> +       len = ALIGN(len, ARCH_DMA_MINALIGN);
> +
> +       if (dir == DMA_FROM_DEVICE)
> +               invalidate_dcache_range(addr, addr + len);
> +       else
> +               flush_dcache_range(addr, addr + len);
> +
> +       return addr;
>  }
>
>  static inline void dma_unmap_single(volatile void *vaddr, size_t len,
> -                                   unsigned long paddr)
> +                                   enum dma_data_direction dir)
>  {
> +       unsigned long addr = (unsigned long)vaddr;
> +
> +       len = ALIGN(len, ARCH_DMA_MINALIGN);
> +
> +       if (dir != DMA_TO_DEVICE)
> +               invalidate_dcache_range(addr, addr + len);
>  }
>
>  #endif /* __ASM_RISCV_DMA_MAPPING_H */
> diff --git a/arch/x86/include/asm/dma-mapping.h b/arch/x86/include/asm/dma-mapping.h
> index b353ff0bef59..c228f684665f 100644
> --- a/arch/x86/include/asm/dma-mapping.h
> +++ b/arch/x86/include/asm/dma-mapping.h
> @@ -7,7 +7,10 @@
>  #ifndef __ASM_X86_DMA_MAPPING_H
>  #define __ASM_X86_DMA_MAPPING_H
>
> +#include <common.h>
> +#include <asm/cache.h>
>  #include <linux/dma-direction.h>
> +#include <malloc.h>
>
>  #define        dma_mapping_error(x, y) 0
>
> @@ -25,12 +28,27 @@ static inline void dma_free_coherent(void *addr)  static inline unsigned long dma_map_single(volatile void *vaddr, size_t len,
>                                            enum dma_data_direction dir)
>  {
> -       return (unsigned long)vaddr;
> +       unsigned long addr = (unsigned long)vaddr;
> +
> +       len = ALIGN(len, ARCH_DMA_MINALIGN);
> +
> +       if (dir == DMA_FROM_DEVICE)
> +               invalidate_dcache_range(addr, addr + len);
> +       else
> +               flush_dcache_range(addr, addr + len);
> +
> +       return addr;
>  }
>
>  static inline void dma_unmap_single(volatile void *vaddr, size_t len,
> -                                   unsigned long paddr)
> +                                   enum dma_data_direction dir)
>  {
> +       unsigned long addr = (unsigned long)vaddr;
> +
> +       len = ALIGN(len, ARCH_DMA_MINALIGN);
> +
> +       if (dir != DMA_TO_DEVICE)
> +               invalidate_dcache_range(addr, addr + len);
>  }
>
>  #endif /* __ASM_X86_DMA_MAPPING_H */
> --
> 2.24.0
>

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH 1/4] asm: dma-mapping.h: Fix dma mapping functions
  2019-11-15 11:55 ` [U-Boot] [PATCH 1/4] asm: dma-mapping.h: Fix dma mapping functions Vignesh Raghavendra
  2019-11-15 12:19   ` Masahiro Yamada
       [not found]   ` <752D002CFF5D0F4FA35C0100F1D73F3FA469DB69@ATCPCS16.andestech.com>
@ 2020-01-15 20:47   ` Tom Rini
  2020-01-16  8:56     ` Vignesh Raghavendra
  2 siblings, 1 reply; 11+ messages in thread
From: Tom Rini @ 2020-01-15 20:47 UTC (permalink / raw)
  To: u-boot

On Fri, Nov 15, 2019 at 05:25:02PM +0530, Vignesh Raghavendra wrote:

> Subsystems such as USB expect dma_map_single() and dma_unmap_single() to
> do dcache flush/invalidate operations as required. For example, see
> drivers/usb/gadget/udc/udc-core.c::usb_gadget_map_request().
> Currently drivers do this locally, (see drivers/usb/dwc3/ep0.c,
> drivers/mtd/nand/raw/denali.c etc..)
> Update arch specific dma_map_single() and dma_unmap_single() APIs to do
> cache flush/invalidate  operations, so that drivers need not implement
> them locally.
> 
> Signed-off-by: Vignesh Raghavendra <vigneshr@ti.com>
> Reviewed-by: Masahiro Yamada <yamada.masahiro@socionext.com>
> Reviewed-by: Rick Chen <rick@andestech.com>
> ---
>  arch/arm/include/asm/dma-mapping.h   | 22 ++++++++++++++++++++--
>  arch/nds32/include/asm/dma-mapping.h | 22 ++++++++++++++++++++--
>  arch/riscv/include/asm/dma-mapping.h | 22 ++++++++++++++++++++--
>  arch/x86/include/asm/dma-mapping.h   | 22 ++++++++++++++++++++--
>  4 files changed, 80 insertions(+), 8 deletions(-)

This throws warnings on am335x_evm, please re-check and resubmit,
thanks.

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20200115/c88d0adb/attachment.sig>

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH 1/4] asm: dma-mapping.h: Fix dma mapping functions
  2020-01-15 20:47   ` Tom Rini
@ 2020-01-16  8:56     ` Vignesh Raghavendra
  0 siblings, 0 replies; 11+ messages in thread
From: Vignesh Raghavendra @ 2020-01-16  8:56 UTC (permalink / raw)
  To: u-boot



On 16/01/20 2:17 am, Tom Rini wrote:
> On Fri, Nov 15, 2019 at 05:25:02PM +0530, Vignesh Raghavendra wrote:
> 
>> Subsystems such as USB expect dma_map_single() and dma_unmap_single() to
>> do dcache flush/invalidate operations as required. For example, see
>> drivers/usb/gadget/udc/udc-core.c::usb_gadget_map_request().
>> Currently drivers do this locally, (see drivers/usb/dwc3/ep0.c,
>> drivers/mtd/nand/raw/denali.c etc..)
>> Update arch specific dma_map_single() and dma_unmap_single() APIs to do
>> cache flush/invalidate  operations, so that drivers need not implement
>> them locally.
>>
>> Signed-off-by: Vignesh Raghavendra <vigneshr@ti.com>
>> Reviewed-by: Masahiro Yamada <yamada.masahiro@socionext.com>
>> Reviewed-by: Rick Chen <rick@andestech.com>
>> ---
>>  arch/arm/include/asm/dma-mapping.h   | 22 ++++++++++++++++++++--
>>  arch/nds32/include/asm/dma-mapping.h | 22 ++++++++++++++++++++--
>>  arch/riscv/include/asm/dma-mapping.h | 22 ++++++++++++++++++++--
>>  arch/x86/include/asm/dma-mapping.h   | 22 ++++++++++++++++++++--
>>  4 files changed, 80 insertions(+), 8 deletions(-)
> 
> This throws warnings on am335x_evm, please re-check and resubmit,
> thanks.
> 

This is caused by recently merged changes in U-Boot tree. I have posted
v2 with this issue fixed. Thanks!

-- 
Regards
Vignesh

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2020-01-16  8:56 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-11-15 11:55 [U-Boot] [PATCH 0/4] dma-mapping: Add cache flush/invalidation to dma_{un}map_single Vignesh Raghavendra
2019-11-15 11:55 ` [U-Boot] [PATCH 1/4] asm: dma-mapping.h: Fix dma mapping functions Vignesh Raghavendra
2019-11-15 12:19   ` Masahiro Yamada
     [not found]   ` <752D002CFF5D0F4FA35C0100F1D73F3FA469DB69@ATCPCS16.andestech.com>
2019-11-19  0:51     ` Rick Chen
2020-01-15 20:47   ` Tom Rini
2020-01-16  8:56     ` Vignesh Raghavendra
2019-11-15 11:55 ` [U-Boot] [PATCH 2/4] mmc: tmio-common: Drop custom " Vignesh Raghavendra
2019-11-15 12:18   ` Masahiro Yamada
2019-11-15 11:55 ` [U-Boot] [PATCH 3/4] mtd: denali: " Vignesh Raghavendra
2019-11-15 12:18   ` Masahiro Yamada
2019-11-15 11:55 ` [U-Boot] [PATCH 4/4] net: macb: Drop local cache flush Vignesh Raghavendra

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.