mail archive of the barebox mailing list
 help / color / mirror / Atom feed
* [PATCH 00/24] Phasing out direct usage of asm/mmu.h on ARM
@ 2015-03-01 13:16 Lucas Stach
  2015-03-01 13:16 ` [PATCH 01/24] usb: gadget: include common.h in header Lucas Stach
                   ` (24 more replies)
  0 siblings, 25 replies; 27+ messages in thread
From: Lucas Stach @ 2015-03-01 13:16 UTC (permalink / raw)
  To: barebox

This series introduces to Barebox the streaming DMA ops and implements
them for the ARM architecture. This will make it a lot easier to
get common cache maintenance operations for all architectures and in
turn allows for wider reuse of driver across architectures.

I've tested this on a Tegra124 which is known to fall over in all sorts
of funny ways if cache maintenance is broken. No odd behavior spotted.

The series is bisect-clean and I've compile tested it on some defconfigs,
but please go wild and TEST. I'll take any complaints.

Changes since RFT:
- rebased to current master
- now compile tested on all ARM defconfigs
- fixed a few compile errors by reordering stuff in patches
- A few more words in commit logs

Regards,
Lucas


Lucas Stach (24):
  usb: gadget: include common.h in header
  ARM: move virt<->phys translation to io.h
  dma: add streaming DMA ops
  ARM: move DMA alloc functions to dma.h
  ARM: implement streaming DMA ops
  AHCI: convert to streaming DMA ops
  MCI: dw-mmc: convert to streaming DMA ops
  MCI: imx: convert to streaming DMA ops
  MCI: tegra-sdmmc: convert to streaming DMA ops
  net: arc-emac: convert to streaming DMA ops
  net: cpsw: convert to streaming DMA ops
  net: at91_ether: convert to streaming DMA ops
  net: davinci_emac: convert to streaming DMA ops
  net: designware: convert to streaming DMA ops
  net: fec: convert to streaming DMA ops
  net: macb: convert to streaming DMA ops
  net: orion-gbe: convert to streaming DMA ops
  net: rtl8169: convert to streaming DMA ops
  net: xgmac: convert to streaming DMA ops
  usb: gadget: fsl_udc: convert to streaming DMA ops
  usb: host: ehci: convert to streaming DMA ops
  usb: host: ohci: convert to streaming DMA ops
  ARM: bcm2835: mbox: convert to streaming DMA ops
  ARM: MMU: unexport cache maintenance functions

 arch/arm/cpu/mmu.c                    | 49 +++++++++++++++++++++++------------
 arch/arm/include/asm/dma.h            | 30 ++++++++++++++++++++-
 arch/arm/include/asm/io.h             | 15 +++++++++++
 arch/arm/include/asm/mmu.h            | 45 --------------------------------
 arch/arm/mach-bcm2835/mbox.c          |  8 +++---
 drivers/ata/ahci.c                    | 14 +++++++---
 drivers/dma/apbh_dma.c                |  2 +-
 drivers/mci/Kconfig                   |  2 +-
 drivers/mci/dw_mmc.c                  | 25 +++++++++---------
 drivers/mci/imx-esdhc.c               | 28 ++++++++++++--------
 drivers/mci/tegra-sdmmc.c             | 26 ++++++++++---------
 drivers/mtd/nand/nand_mxs.c           |  2 +-
 drivers/net/Kconfig                   |  1 +
 drivers/net/altera_tse.c              |  1 +
 drivers/net/arc_emac.c                | 17 +++++++-----
 drivers/net/at91_ether.c              | 11 ++++++--
 drivers/net/cpsw.c                    | 11 +++++---
 drivers/net/davinci_emac.c            |  9 ++++---
 drivers/net/designware.c              | 20 ++++++++------
 drivers/net/fec_imx.c                 | 14 +++++++---
 drivers/net/macb.c                    |  9 +++++--
 drivers/net/mvneta.c                  |  1 +
 drivers/net/orion-gbe.c               | 14 ++++++----
 drivers/net/rtl8139.c                 |  1 +
 drivers/net/rtl8169.c                 | 31 ++++++++++------------
 drivers/net/xgmac.c                   | 12 ++++++---
 drivers/spi/mxs_spi.c                 |  1 -
 drivers/usb/gadget/fsl_udc.c          | 11 +++++---
 drivers/usb/host/ehci-hcd.c           |  9 ++++---
 drivers/usb/host/ohci-hcd.c           | 11 +++++---
 drivers/usb/host/xhci-hcd.c           |  2 +-
 drivers/usb/host/xhci-hub.c           |  1 -
 drivers/video/atmel_hlcdfb.c          |  1 -
 drivers/video/atmel_lcdfb.c           |  1 -
 drivers/video/atmel_lcdfb_core.c      |  2 +-
 drivers/video/imx-ipu-fb.c            |  1 +
 drivers/video/imx-ipu-v3/ipu-common.c |  1 -
 drivers/video/imx-ipu-v3/ipufb.c      |  2 +-
 drivers/video/omap.c                  |  1 +
 drivers/video/pxa.c                   |  2 +-
 include/dma-dir.h                     |  6 +++++
 include/dma.h                         | 11 ++++++++
 include/usb/gadget.h                  |  1 +
 43 files changed, 281 insertions(+), 181 deletions(-)
 create mode 100644 include/dma-dir.h

-- 
2.1.0


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* [PATCH 01/24] usb: gadget: include common.h in header
  2015-03-01 13:16 [PATCH 00/24] Phasing out direct usage of asm/mmu.h on ARM Lucas Stach
@ 2015-03-01 13:16 ` Lucas Stach
  2015-03-01 13:17 ` [PATCH 02/24] ARM: move virt<->phys translation to io.h Lucas Stach
                   ` (23 subsequent siblings)
  24 siblings, 0 replies; 27+ messages in thread
From: Lucas Stach @ 2015-03-01 13:16 UTC (permalink / raw)
  To: barebox

It is needed for container_of() and this header falls
over if we change the include order.

Signed-off-by: Lucas Stach <dev@lynxeye.de>
---
 include/usb/gadget.h | 1 +
 1 file changed, 1 insertion(+)

diff --git a/include/usb/gadget.h b/include/usb/gadget.h
index f663e98..80418a9 100644
--- a/include/usb/gadget.h
+++ b/include/usb/gadget.h
@@ -15,6 +15,7 @@
 #ifndef __LINUX_USB_GADGET_H
 #define __LINUX_USB_GADGET_H
 
+#include <common.h>
 #include <malloc.h>
 #include <driver.h>
 #include <linux/list.h>
-- 
2.1.0


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* [PATCH 02/24] ARM: move virt<->phys translation to io.h
  2015-03-01 13:16 [PATCH 00/24] Phasing out direct usage of asm/mmu.h on ARM Lucas Stach
  2015-03-01 13:16 ` [PATCH 01/24] usb: gadget: include common.h in header Lucas Stach
@ 2015-03-01 13:17 ` Lucas Stach
  2015-03-01 13:17 ` [PATCH 03/24] dma: add streaming DMA ops Lucas Stach
                   ` (22 subsequent siblings)
  24 siblings, 0 replies; 27+ messages in thread
From: Lucas Stach @ 2015-03-01 13:17 UTC (permalink / raw)
  To: barebox

That's the place where Linux has them and other architectures would
implement this.

This will help in phasing out the direct usage of the ARM asm/mmu.h
header.

Signed-off-by: Lucas Stach <dev@lynxeye.de>
---
 arch/arm/include/asm/io.h  | 15 +++++++++++++++
 arch/arm/include/asm/mmu.h | 12 ------------
 2 files changed, 15 insertions(+), 12 deletions(-)

diff --git a/arch/arm/include/asm/io.h b/arch/arm/include/asm/io.h
index 850a99c..eebf093 100644
--- a/arch/arm/include/asm/io.h
+++ b/arch/arm/include/asm/io.h
@@ -69,4 +69,19 @@ extern void memset_io(volatile void __iomem *, int, size_t);
 #define setbits_8(addr, set) setbits(8, addr, set)
 #define clrsetbits_8(addr, clear, set) clrsetbits(8, addr, clear, set)
 
+#ifdef CONFIG_MMU
+void *phys_to_virt(unsigned long phys);
+unsigned long virt_to_phys(volatile void *virt);
+#else
+static inline void *phys_to_virt(unsigned long phys)
+{
+	return (void *)phys;
+}
+
+static inline unsigned long virt_to_phys(volatile void *mem)
+{
+	return (unsigned long)mem;
+}
+#endif
+
 #endif	/* __ASM_ARM_IO_H */
diff --git a/arch/arm/include/asm/mmu.h b/arch/arm/include/asm/mmu.h
index c6e425f..3d87588 100644
--- a/arch/arm/include/asm/mmu.h
+++ b/arch/arm/include/asm/mmu.h
@@ -39,8 +39,6 @@ void dma_free_coherent(void *mem, size_t size);
 void dma_clean_range(unsigned long, unsigned long);
 void dma_flush_range(unsigned long, unsigned long);
 void dma_inv_range(unsigned long, unsigned long);
-unsigned long virt_to_phys(volatile void *virt);
-void *phys_to_virt(unsigned long phys);
 void remap_range(void *_start, size_t size, uint32_t flags);
 void *map_io_sections(unsigned long physaddr, void *start, size_t size);
 uint32_t mmu_get_pte_cached_flags(void);
@@ -57,16 +55,6 @@ static inline void dma_free_coherent(void *mem, size_t size)
 	free(mem);
 }
 
-static inline void *phys_to_virt(unsigned long phys)
-{
-	return (void *)phys;
-}
-
-static inline unsigned long virt_to_phys(volatile void *mem)
-{
-	return (unsigned long)mem;
-}
-
 static inline void dma_clean_range(unsigned long s, unsigned long e)
 {
 }
-- 
2.1.0


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* [PATCH 03/24] dma: add streaming DMA ops
  2015-03-01 13:16 [PATCH 00/24] Phasing out direct usage of asm/mmu.h on ARM Lucas Stach
  2015-03-01 13:16 ` [PATCH 01/24] usb: gadget: include common.h in header Lucas Stach
  2015-03-01 13:17 ` [PATCH 02/24] ARM: move virt<->phys translation to io.h Lucas Stach
@ 2015-03-01 13:17 ` Lucas Stach
  2015-03-01 13:17 ` [PATCH 04/24] ARM: move DMA alloc functions to dma.h Lucas Stach
                   ` (21 subsequent siblings)
  24 siblings, 0 replies; 27+ messages in thread
From: Lucas Stach @ 2015-03-01 13:17 UTC (permalink / raw)
  To: barebox

This will allow us to implement cache maintenance in a platform
agnostic way.

Signed-off-by: Lucas Stach <dev@lynxeye.de>
---
 include/dma-dir.h |  6 ++++++
 include/dma.h     | 11 +++++++++++
 2 files changed, 17 insertions(+)
 create mode 100644 include/dma-dir.h

diff --git a/include/dma-dir.h b/include/dma-dir.h
new file mode 100644
index 0000000..ba107f1
--- /dev/null
+++ b/include/dma-dir.h
@@ -0,0 +1,6 @@
+enum dma_data_direction {
+	DMA_BIDIRECTIONAL = 0,
+	DMA_TO_DEVICE = 1,
+	DMA_FROM_DEVICE = 2,
+	DMA_NONE = 3,
+};
diff --git a/include/dma.h b/include/dma.h
index 899f831..4274520 100644
--- a/include/dma.h
+++ b/include/dma.h
@@ -11,6 +11,7 @@
 #include <malloc.h>
 #include <xfuncs.h>
 
+#include <dma-dir.h>
 #include <asm/dma.h>
 
 #ifndef dma_alloc
@@ -27,4 +28,14 @@ static inline void dma_free(void *mem)
 }
 #endif
 
+/* streaming DMA - implement the below calls to support HAS_DMA */
+void dma_sync_single_for_cpu(unsigned long address, size_t size,
+			     enum dma_data_direction dir);
+
+void dma_sync_single_for_device(unsigned long address, size_t size,
+				enum dma_data_direction dir);
+
+void *dma_alloc_coherent(size_t size);
+void dma_free_coherent(void *mem, size_t size);
+
 #endif /* __DMA_H */
-- 
2.1.0


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* [PATCH 04/24] ARM: move DMA alloc functions to dma.h
  2015-03-01 13:16 [PATCH 00/24] Phasing out direct usage of asm/mmu.h on ARM Lucas Stach
                   ` (2 preceding siblings ...)
  2015-03-01 13:17 ` [PATCH 03/24] dma: add streaming DMA ops Lucas Stach
@ 2015-03-01 13:17 ` Lucas Stach
  2015-03-01 13:17 ` [PATCH 05/24] ARM: implement streaming DMA ops Lucas Stach
                   ` (20 subsequent siblings)
  24 siblings, 0 replies; 27+ messages in thread
From: Lucas Stach @ 2015-03-01 13:17 UTC (permalink / raw)
  To: barebox

This better separates the DMA from the MMU functionality.

Also move all drivers that only depends on asm/mmu.h for the alloc
functions over to the common header.

Signed-off-by: Lucas Stach <dev@lynxeye.de>
---
 arch/arm/include/asm/dma.h            | 20 +++++++++++++++++++-
 arch/arm/include/asm/mmu.h            | 19 -------------------
 drivers/ata/ahci.c                    |  1 +
 drivers/dma/apbh_dma.c                |  2 +-
 drivers/mci/dw_mmc.c                  |  1 +
 drivers/mtd/nand/nand_mxs.c           |  2 +-
 drivers/net/altera_tse.c              |  1 +
 drivers/net/arc_emac.c                |  1 +
 drivers/net/at91_ether.c              |  1 +
 drivers/net/designware.c              |  1 +
 drivers/net/fec_imx.c                 |  1 +
 drivers/net/macb.c                    |  1 +
 drivers/net/mvneta.c                  |  1 +
 drivers/net/orion-gbe.c               |  1 +
 drivers/net/rtl8139.c                 |  1 +
 drivers/net/rtl8169.c                 |  1 +
 drivers/net/xgmac.c                   |  1 +
 drivers/spi/mxs_spi.c                 |  1 -
 drivers/usb/gadget/fsl_udc.c          |  3 +++
 drivers/usb/host/ehci-hcd.c           |  1 +
 drivers/usb/host/ohci-hcd.c           |  1 +
 drivers/usb/host/xhci-hcd.c           |  2 +-
 drivers/usb/host/xhci-hub.c           |  1 -
 drivers/video/atmel_hlcdfb.c          |  1 -
 drivers/video/atmel_lcdfb.c           |  1 -
 drivers/video/atmel_lcdfb_core.c      |  2 +-
 drivers/video/imx-ipu-fb.c            |  1 +
 drivers/video/imx-ipu-v3/ipu-common.c |  1 -
 drivers/video/imx-ipu-v3/ipufb.c      |  2 +-
 drivers/video/omap.c                  |  1 +
 drivers/video/pxa.c                   |  2 +-
 31 files changed, 45 insertions(+), 31 deletions(-)

diff --git a/arch/arm/include/asm/dma.h b/arch/arm/include/asm/dma.h
index cb9cd1b..47e6a91 100644
--- a/arch/arm/include/asm/dma.h
+++ b/arch/arm/include/asm/dma.h
@@ -5,4 +5,22 @@
  *
  */
 
-#include <asm/mmu.h>
+#include <common.h>
+
+#define dma_alloc dma_alloc
+static inline void *dma_alloc(size_t size)
+{
+	return xmemalign(64, ALIGN(size, 64));
+}
+
+#ifndef CONFIG_MMU
+static inline void *dma_alloc_coherent(size_t size)
+{
+	return xmemalign(4096, size);
+}
+
+static inline void dma_free_coherent(void *mem, size_t size)
+{
+	free(mem);
+}
+#endif
diff --git a/arch/arm/include/asm/mmu.h b/arch/arm/include/asm/mmu.h
index 3d87588..01c20bd 100644
--- a/arch/arm/include/asm/mmu.h
+++ b/arch/arm/include/asm/mmu.h
@@ -26,16 +26,7 @@ static inline void setup_dma_coherent(unsigned long offset)
 {
 }
 
-#define dma_alloc dma_alloc
-static inline void *dma_alloc(size_t size)
-{
-	return xmemalign(64, ALIGN(size, 64));
-}
-
 #ifdef CONFIG_MMU
-void *dma_alloc_coherent(size_t size);
-void dma_free_coherent(void *mem, size_t size);
-
 void dma_clean_range(unsigned long, unsigned long);
 void dma_flush_range(unsigned long, unsigned long);
 void dma_inv_range(unsigned long, unsigned long);
@@ -45,16 +36,6 @@ uint32_t mmu_get_pte_cached_flags(void);
 uint32_t mmu_get_pte_uncached_flags(void);
 
 #else
-static inline void *dma_alloc_coherent(size_t size)
-{
-	return xmemalign(4096, size);
-}
-
-static inline void dma_free_coherent(void *mem, size_t size)
-{
-	free(mem);
-}
-
 static inline void dma_clean_range(unsigned long s, unsigned long e)
 {
 }
diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
index 346ab98..1894e47 100644
--- a/drivers/ata/ahci.c
+++ b/drivers/ata/ahci.c
@@ -21,6 +21,7 @@
  */
 
 #include <common.h>
+#include <dma.h>
 #include <init.h>
 #include <errno.h>
 #include <io.h>
diff --git a/drivers/dma/apbh_dma.c b/drivers/dma/apbh_dma.c
index cd218f4..9069ada 100644
--- a/drivers/dma/apbh_dma.c
+++ b/drivers/dma/apbh_dma.c
@@ -20,13 +20,13 @@
 #include <linux/list.h>
 #include <linux/err.h>
 #include <common.h>
+#include <dma.h>
 #include <driver.h>
 #include <malloc.h>
 #include <errno.h>
 #include <init.h>
 #include <io.h>
 
-#include <asm/mmu.h>
 
 #define HW_APBHX_CTRL0				0x000
 #define BM_APBH_CTRL0_APB_BURST8_EN		(1 << 29)
diff --git a/drivers/mci/dw_mmc.c b/drivers/mci/dw_mmc.c
index 365b60d..3992815 100644
--- a/drivers/mci/dw_mmc.c
+++ b/drivers/mci/dw_mmc.c
@@ -18,6 +18,7 @@
  */
 
 #include <common.h>
+#include <dma.h>
 #include <driver.h>
 #include <malloc.h>
 #include <clock.h>
diff --git a/drivers/mtd/nand/nand_mxs.c b/drivers/mtd/nand/nand_mxs.c
index 4e38e09..d9a50a5 100644
--- a/drivers/mtd/nand/nand_mxs.c
+++ b/drivers/mtd/nand/nand_mxs.c
@@ -26,6 +26,7 @@
 #include <linux/err.h>
 #include <of_mtd.h>
 #include <common.h>
+#include <dma.h>
 #include <malloc.h>
 #include <errno.h>
 #include <driver.h>
@@ -33,7 +34,6 @@
 #include <io.h>
 #include <dma/apbh-dma.h>
 #include <stmp-device.h>
-#include <asm/mmu.h>
 #include <mach/generic.h>
 
 #define	MX28_BLOCK_SFTRST				(1 << 31)
diff --git a/drivers/net/altera_tse.c b/drivers/net/altera_tse.c
index ecbb9f8..3beeb26 100644
--- a/drivers/net/altera_tse.c
+++ b/drivers/net/altera_tse.c
@@ -21,6 +21,7 @@
  */
 
 #include <common.h>
+#include <dma.h>
 #include <net.h>
 #include <init.h>
 #include <clock.h>
diff --git a/drivers/net/arc_emac.c b/drivers/net/arc_emac.c
index 1770506..e050199 100644
--- a/drivers/net/arc_emac.c
+++ b/drivers/net/arc_emac.c
@@ -19,6 +19,7 @@
 #include <asm/mmu.h>
 #include <clock.h>
 #include <common.h>
+#include <dma.h>
 #include <net.h>
 #include <io.h>
 #include <init.h>
diff --git a/drivers/net/at91_ether.c b/drivers/net/at91_ether.c
index e09ea83..2ef24cc 100644
--- a/drivers/net/at91_ether.c
+++ b/drivers/net/at91_ether.c
@@ -20,6 +20,7 @@
  */
 
 #include <common.h>
+#include <dma.h>
 #include <net.h>
 #include <clock.h>
 #include <malloc.h>
diff --git a/drivers/net/designware.c b/drivers/net/designware.c
index 49ed0b1..2bc4471 100644
--- a/drivers/net/designware.c
+++ b/drivers/net/designware.c
@@ -22,6 +22,7 @@
  */
 
 #include <common.h>
+#include <dma.h>
 #include <init.h>
 #include <io.h>
 #include <net.h>
diff --git a/drivers/net/fec_imx.c b/drivers/net/fec_imx.c
index c1fa151..5761256 100644
--- a/drivers/net/fec_imx.c
+++ b/drivers/net/fec_imx.c
@@ -15,6 +15,7 @@
  */
 
 #include <common.h>
+#include <dma.h>
 #include <malloc.h>
 #include <net.h>
 #include <init.h>
diff --git a/drivers/net/macb.c b/drivers/net/macb.c
index 8e67aec..b941c27 100644
--- a/drivers/net/macb.c
+++ b/drivers/net/macb.c
@@ -38,6 +38,7 @@
 
 #include <net.h>
 #include <clock.h>
+#include <dma.h>
 #include <malloc.h>
 #include <xfuncs.h>
 #include <init.h>
diff --git a/drivers/net/mvneta.c b/drivers/net/mvneta.c
index 8042e90..0d6a80f 100644
--- a/drivers/net/mvneta.c
+++ b/drivers/net/mvneta.c
@@ -24,6 +24,7 @@
  */
 
 #include <common.h>
+#include <dma.h>
 #include <init.h>
 #include <io.h>
 #include <net.h>
diff --git a/drivers/net/orion-gbe.c b/drivers/net/orion-gbe.c
index 3fbc1df..ad1fc66 100644
--- a/drivers/net/orion-gbe.c
+++ b/drivers/net/orion-gbe.c
@@ -27,6 +27,7 @@
  * MA 02110-1301 USA
  */
 #include <common.h>
+#include <dma.h>
 #include <init.h>
 #include <io.h>
 #include <net.h>
diff --git a/drivers/net/rtl8139.c b/drivers/net/rtl8139.c
index b24a083..d57c706 100644
--- a/drivers/net/rtl8139.c
+++ b/drivers/net/rtl8139.c
@@ -1,4 +1,5 @@
 #include <common.h>
+#include <dma.h>
 #include <net.h>
 #include <malloc.h>
 #include <init.h>
diff --git a/drivers/net/rtl8169.c b/drivers/net/rtl8169.c
index f8a6500..638e049 100644
--- a/drivers/net/rtl8169.c
+++ b/drivers/net/rtl8169.c
@@ -16,6 +16,7 @@
 
 #include <asm/mmu.h>
 #include <common.h>
+#include <dma.h>
 #include <init.h>
 #include <net.h>
 #include <malloc.h>
diff --git a/drivers/net/xgmac.c b/drivers/net/xgmac.c
index cc22d0e..c1e4da8 100644
--- a/drivers/net/xgmac.c
+++ b/drivers/net/xgmac.c
@@ -16,6 +16,7 @@
  */
 
 #include <common.h>
+#include <dma.h>
 #include <net.h>
 #include <clock.h>
 #include <malloc.h>
diff --git a/drivers/spi/mxs_spi.c b/drivers/spi/mxs_spi.c
index 8932103..9fe2fd4 100644
--- a/drivers/spi/mxs_spi.c
+++ b/drivers/spi/mxs_spi.c
@@ -23,7 +23,6 @@
 #include <stmp-device.h>
 #include <linux/clk.h>
 #include <linux/err.h>
-#include <asm/mmu.h>
 #include <mach/generic.h>
 #include <mach/clock.h>
 #include <mach/ssp.h>
diff --git a/drivers/usb/gadget/fsl_udc.c b/drivers/usb/gadget/fsl_udc.c
index d067f03..f9e58bb 100644
--- a/drivers/usb/gadget/fsl_udc.c
+++ b/drivers/usb/gadget/fsl_udc.c
@@ -1,4 +1,5 @@
 #include <common.h>
+#include <dma.h>
 #include <errno.h>
 #include <dma.h>
 #include <init.h>
@@ -10,6 +11,8 @@
 #include <asm/byteorder.h>
 #include <linux/err.h>
 
+#include <asm/mmu.h>
+
 /* ### define USB registers here
  */
 #define USB_MAX_CTRL_PAYLOAD		64
diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c
index 7b91327..7f59774 100644
--- a/drivers/usb/host/ehci-hcd.c
+++ b/drivers/usb/host/ehci-hcd.c
@@ -18,6 +18,7 @@
  */
 /*#define DEBUG */
 #include <common.h>
+#include <dma.h>
 #include <asm/byteorder.h>
 #include <usb/usb.h>
 #include <io.h>
diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c
index 622f5c3..0cdcbb5 100644
--- a/drivers/usb/host/ohci-hcd.c
+++ b/drivers/usb/host/ohci-hcd.c
@@ -41,6 +41,7 @@
  *     to activate workaround for bug #41 or this driver will NOT work!
  */
 #include <common.h>
+#include <dma.h>
 #include <clock.h>
 #include <malloc.h>
 #include <usb/usb.h>
diff --git a/drivers/usb/host/xhci-hcd.c b/drivers/usb/host/xhci-hcd.c
index 9253419..2d2f59e 100644
--- a/drivers/usb/host/xhci-hcd.c
+++ b/drivers/usb/host/xhci-hcd.c
@@ -12,9 +12,9 @@
  * warranty of any kind, whether express or implied.
  */
 //#define DEBUG
-#include <asm/mmu.h>
 #include <clock.h>
 #include <common.h>
+#include <dma.h>
 #include <init.h>
 #include <io.h>
 #include <linux/err.h>
diff --git a/drivers/usb/host/xhci-hub.c b/drivers/usb/host/xhci-hub.c
index bf95257..5ae16f5 100644
--- a/drivers/usb/host/xhci-hub.c
+++ b/drivers/usb/host/xhci-hub.c
@@ -14,7 +14,6 @@
  * warranty of any kind, whether express or implied.
  */
 //#define DEBUG
-#include <asm/mmu.h>
 #include <clock.h>
 #include <common.h>
 #include <io.h>
diff --git a/drivers/video/atmel_hlcdfb.c b/drivers/video/atmel_hlcdfb.c
index 26db758..f7aab7f 100644
--- a/drivers/video/atmel_hlcdfb.c
+++ b/drivers/video/atmel_hlcdfb.c
@@ -27,7 +27,6 @@
 #include <mach/io.h>
 #include <mach/cpu.h>
 #include <errno.h>
-#include <asm/mmu.h>
 
 #include "atmel_lcdfb.h"
 
diff --git a/drivers/video/atmel_lcdfb.c b/drivers/video/atmel_lcdfb.c
index bb302bd..20204c1 100644
--- a/drivers/video/atmel_lcdfb.c
+++ b/drivers/video/atmel_lcdfb.c
@@ -25,7 +25,6 @@
 #include <mach/io.h>
 #include <mach/cpu.h>
 #include <errno.h>
-#include <asm/mmu.h>
 #include <linux/clk.h>
 
 #include "atmel_lcdfb.h"
diff --git a/drivers/video/atmel_lcdfb_core.c b/drivers/video/atmel_lcdfb_core.c
index 420ccbe..ef2e271 100644
--- a/drivers/video/atmel_lcdfb_core.c
+++ b/drivers/video/atmel_lcdfb_core.c
@@ -19,11 +19,11 @@
  */
 
 #include <common.h>
+#include <dma.h>
 #include <io.h>
 #include <linux/err.h>
 #include <linux/clk.h>
 #include <malloc.h>
-#include <asm/mmu.h>
 
 #include "atmel_lcdfb.h"
 
diff --git a/drivers/video/imx-ipu-fb.c b/drivers/video/imx-ipu-fb.c
index a69df50..610ac87 100644
--- a/drivers/video/imx-ipu-fb.c
+++ b/drivers/video/imx-ipu-fb.c
@@ -18,6 +18,7 @@
  */
 
 #include <common.h>
+#include <dma.h>
 #include <init.h>
 #include <io.h>
 #include <mach/imx35-regs.h>
diff --git a/drivers/video/imx-ipu-v3/ipu-common.c b/drivers/video/imx-ipu-v3/ipu-common.c
index f13cf01..5c85f86 100644
--- a/drivers/video/imx-ipu-v3/ipu-common.c
+++ b/drivers/video/imx-ipu-v3/ipu-common.c
@@ -19,7 +19,6 @@
 #include <clock.h>
 #include <driver.h>
 #include <init.h>
-#include <asm/mmu.h>
 #include <mach/generic.h>
 #include <mach/imx6-regs.h>
 #include <mach/imx53-regs.h>
diff --git a/drivers/video/imx-ipu-v3/ipufb.c b/drivers/video/imx-ipu-v3/ipufb.c
index 14a099e..8ec55e4 100644
--- a/drivers/video/imx-ipu-v3/ipufb.c
+++ b/drivers/video/imx-ipu-v3/ipufb.c
@@ -12,6 +12,7 @@
 #define pr_fmt(fmt) "IPU: " fmt
 
 #include <common.h>
+#include <dma.h>
 #include <fb.h>
 #include <io.h>
 #include <driver.h>
@@ -21,7 +22,6 @@
 #include <linux/clk.h>
 #include <linux/err.h>
 #include <asm-generic/div64.h>
-#include <asm/mmu.h>
 
 #include "imx-ipu-v3.h"
 #include "ipuv3-plane.h"
diff --git a/drivers/video/omap.c b/drivers/video/omap.c
index bd66c92..2148bf9 100644
--- a/drivers/video/omap.c
+++ b/drivers/video/omap.c
@@ -19,6 +19,7 @@
  */
 
 #include <driver.h>
+#include <dma.h>
 #include <fb.h>
 #include <errno.h>
 #include <xfuncs.h>
diff --git a/drivers/video/pxa.c b/drivers/video/pxa.c
index d6d11ae..a92a5ee 100644
--- a/drivers/video/pxa.c
+++ b/drivers/video/pxa.c
@@ -24,6 +24,7 @@
  */
 
 #include <common.h>
+#include <dma.h>
 #include <driver.h>
 #include <errno.h>
 #include <fb.h>
@@ -37,7 +38,6 @@
 #include <mach/pxafb.h>
 
 #include <asm/io.h>
-#include <asm/mmu.h>
 #include <asm-generic/div64.h>
 
 /* PXA LCD DMA descriptor */
-- 
2.1.0


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* [PATCH 05/24] ARM: implement streaming DMA ops
  2015-03-01 13:16 [PATCH 00/24] Phasing out direct usage of asm/mmu.h on ARM Lucas Stach
                   ` (3 preceding siblings ...)
  2015-03-01 13:17 ` [PATCH 04/24] ARM: move DMA alloc functions to dma.h Lucas Stach
@ 2015-03-01 13:17 ` Lucas Stach
  2015-03-01 13:17 ` [PATCH 06/24] AHCI: convert to " Lucas Stach
                   ` (19 subsequent siblings)
  24 siblings, 0 replies; 27+ messages in thread
From: Lucas Stach @ 2015-03-01 13:17 UTC (permalink / raw)
  To: barebox

Signed-off-by: Lucas Stach <dev@lynxeye.de>
---
 arch/arm/cpu/mmu.c         | 24 ++++++++++++++++++++++++
 arch/arm/include/asm/dma.h | 10 ++++++++++
 2 files changed, 34 insertions(+)

diff --git a/arch/arm/cpu/mmu.c b/arch/arm/cpu/mmu.c
index aaf66d4..c4ec72d 100644
--- a/arch/arm/cpu/mmu.c
+++ b/arch/arm/cpu/mmu.c
@@ -18,6 +18,7 @@
 #define pr_fmt(fmt)	"mmu: " fmt
 
 #include <common.h>
+#include <dma-dir.h>
 #include <init.h>
 #include <asm/mmu.h>
 #include <errno.h>
@@ -432,3 +433,26 @@ void dma_inv_range(unsigned long start, unsigned long end)
 	__dma_inv_range(start, end);
 }
 
+void dma_sync_single_for_cpu(unsigned long address, size_t size,
+			     enum dma_data_direction dir)
+{
+	if (dir != DMA_TO_DEVICE) {
+		if (outer_cache.inv_range)
+			outer_cache.inv_range(address, address + size);
+		__dma_inv_range(address, address + size);
+	}
+}
+
+void dma_sync_single_for_device(unsigned long address, size_t size,
+				enum dma_data_direction dir)
+{
+	if (dir == DMA_FROM_DEVICE) {
+		__dma_inv_range(address, address + size);
+		if (outer_cache.inv_range)
+			outer_cache.inv_range(address, address + size);
+	} else {
+		__dma_clean_range(address, address + size);
+		if (outer_cache.clean_range)
+			outer_cache.clean_range(address, address + size);
+	}
+}
diff --git a/arch/arm/include/asm/dma.h b/arch/arm/include/asm/dma.h
index 47e6a91..897c2ed 100644
--- a/arch/arm/include/asm/dma.h
+++ b/arch/arm/include/asm/dma.h
@@ -23,4 +23,14 @@ static inline void dma_free_coherent(void *mem, size_t size)
 {
 	free(mem);
 }
+
+static inline void dma_sync_single_for_cpu(unsigned long address, size_t size,
+					   enum dma_data_direction dir)
+{
+}
+
+static inline void dma_sync_single_for_device(unsigned long address, size_t size,
+					      enum dma_data_direction dir)
+{
+}
 #endif
-- 
2.1.0


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* [PATCH 06/24] AHCI: convert to streaming DMA ops
  2015-03-01 13:16 [PATCH 00/24] Phasing out direct usage of asm/mmu.h on ARM Lucas Stach
                   ` (4 preceding siblings ...)
  2015-03-01 13:17 ` [PATCH 05/24] ARM: implement streaming DMA ops Lucas Stach
@ 2015-03-01 13:17 ` Lucas Stach
  2015-03-01 13:17 ` [PATCH 07/24] MCI: dw-mmc: " Lucas Stach
                   ` (18 subsequent siblings)
  24 siblings, 0 replies; 27+ messages in thread
From: Lucas Stach @ 2015-03-01 13:17 UTC (permalink / raw)
  To: barebox

Move to the common streaming DMA ops in order to get rid of
the direct usage of the ARM MMU functions for the cache
maintenance.

Signed-off-by: Lucas Stach <dev@lynxeye.de>
---
 drivers/ata/ahci.c | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
index 1894e47..e4310fc 100644
--- a/drivers/ata/ahci.c
+++ b/drivers/ata/ahci.c
@@ -31,7 +31,6 @@
 #include <linux/ctype.h>
 #include <linux/err.h>
 #include <disks.h>
-#include <asm/mmu.h>
 #include <ata_drive.h>
 #include <linux/sizes.h>
 #include <clock.h>
@@ -170,7 +169,11 @@ static int ahci_io(struct ahci_port *ahci_port, u8 *fis, int fis_len, void *rbuf
 		return -EIO;
 
 	if (wbuf)
-		dma_flush_range((unsigned long)wbuf, (unsigned long)wbuf + buf_len);
+		dma_sync_single_for_device((unsigned long)wbuf, buf_len,
+					   DMA_TO_DEVICE);
+	if (rbuf)
+		dma_sync_single_for_device((unsigned long)rbuf, buf_len,
+					   DMA_FROM_DEVICE);
 
 	memcpy((unsigned char *)ahci_port->cmd_tbl, fis, fis_len);
 
@@ -187,8 +190,12 @@ static int ahci_io(struct ahci_port *ahci_port, u8 *fis, int fis_len, void *rbuf
 	if (ret)
 		return -ETIMEDOUT;
 
+	if (wbuf)
+		dma_sync_single_for_cpu((unsigned long)wbuf, buf_len,
+					DMA_TO_DEVICE);
 	if (rbuf)
-		dma_inv_range((unsigned long)rbuf, (unsigned long)rbuf + buf_len);
+		dma_sync_single_for_cpu((unsigned long)rbuf, buf_len,
+					DMA_FROM_DEVICE);
 
 	return 0;
 }
-- 
2.1.0


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* [PATCH 07/24] MCI: dw-mmc: convert to streaming DMA ops
  2015-03-01 13:16 [PATCH 00/24] Phasing out direct usage of asm/mmu.h on ARM Lucas Stach
                   ` (5 preceding siblings ...)
  2015-03-01 13:17 ` [PATCH 06/24] AHCI: convert to " Lucas Stach
@ 2015-03-01 13:17 ` Lucas Stach
  2015-03-01 13:17 ` [PATCH 08/24] MCI: imx: " Lucas Stach
                   ` (17 subsequent siblings)
  24 siblings, 0 replies; 27+ messages in thread
From: Lucas Stach @ 2015-03-01 13:17 UTC (permalink / raw)
  To: barebox

Move to the common streaming DMA ops in order to get rid of
the direct usage of the ARM MMU functions for the cache
maintenance.

Signed-off-by: Lucas Stach <dev@lynxeye.de>
---
 drivers/mci/Kconfig  |  2 +-
 drivers/mci/dw_mmc.c | 24 ++++++++++++------------
 2 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/drivers/mci/Kconfig b/drivers/mci/Kconfig
index dbcc38d..a5cf2fe 100644
--- a/drivers/mci/Kconfig
+++ b/drivers/mci/Kconfig
@@ -36,7 +36,7 @@ comment "--- MCI host drivers ---"
 
 config MCI_DW
 	bool "Synopsys DesignWare Memory Card Interface"
-	depends on ARM
+	depends on HAS_DMA
 	help
 	  This selects support for the Synopsys DesignWare Mobile Storage IP
 	  block, this provides host support for SD and MMC interfaces, in both
diff --git a/drivers/mci/dw_mmc.c b/drivers/mci/dw_mmc.c
index 3992815..f02ea62 100644
--- a/drivers/mci/dw_mmc.c
+++ b/drivers/mci/dw_mmc.c
@@ -29,7 +29,6 @@
 #include <linux/clk.h>
 #include <linux/err.h>
 #include <asm-generic/errno.h>
-#include <asm/mmu.h>
 
 #define DWMCI_CTRL		0x000
 #define	DWMCI_PWREN		0x004
@@ -282,7 +281,6 @@ dwmci_cmd(struct mci_host *mci, struct mci_cmd *cmd, struct mci_data *data)
 	uint64_t start;
 	int ret;
 	unsigned int num_bytes = 0;
-	const void *writebuf = NULL;
 
 	start = get_time_ns();
 	while (1) {
@@ -300,12 +298,12 @@ dwmci_cmd(struct mci_host *mci, struct mci_cmd *cmd, struct mci_data *data)
 	if (data) {
 		num_bytes = data->blocks * data->blocksize;
 
-		if (data->flags & MMC_DATA_WRITE) {
-			dma_flush_range((unsigned long)data->src,
-				(unsigned long)(data->src + data->blocks * 512));
-
-			writebuf = data->src;
-		}
+		if (data->flags & MMC_DATA_WRITE)
+			dma_sync_single_for_device((unsigned long)data->src,
+						   num_bytes, DMA_TO_DEVICE);
+		else
+			dma_sync_single_for_device((unsigned long)data->dest,
+						   num_bytes, DMA_FROM_DEVICE);
 
 		ret = dwmci_prepare_data(host, data);
 		if (ret)
@@ -389,10 +387,12 @@ dwmci_cmd(struct mci_host *mci, struct mci_cmd *cmd, struct mci_data *data)
 		ctrl &= ~(DWMCI_DMA_EN);
 		dwmci_writel(host, DWMCI_CTRL, ctrl);
 
-		if (data->flags & MMC_DATA_READ) {
-			dma_inv_range((unsigned long)data->dest,
-					(unsigned long)(data->dest + data->blocks * 512));
-		}
+		if (data->flags & MMC_DATA_WRITE)
+			dma_sync_single_for_cpu((unsigned long)data->src,
+						num_bytes, DMA_TO_DEVICE);
+		else
+			dma_sync_single_for_cpu((unsigned long)data->dest,
+						num_bytes, DMA_FROM_DEVICE);
 	}
 
 	udelay(100);
-- 
2.1.0


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* [PATCH 08/24] MCI: imx: convert to streaming DMA ops
  2015-03-01 13:16 [PATCH 00/24] Phasing out direct usage of asm/mmu.h on ARM Lucas Stach
                   ` (6 preceding siblings ...)
  2015-03-01 13:17 ` [PATCH 07/24] MCI: dw-mmc: " Lucas Stach
@ 2015-03-01 13:17 ` Lucas Stach
  2015-03-01 13:17 ` [PATCH 09/24] MCI: tegra-sdmmc: " Lucas Stach
                   ` (16 subsequent siblings)
  24 siblings, 0 replies; 27+ messages in thread
From: Lucas Stach @ 2015-03-01 13:17 UTC (permalink / raw)
  To: barebox

Move to the common streaming DMA ops in order to get rid of
the direct usage of the ARM MMU functions for the cache
maintenance.

Signed-off-by: Lucas Stach <dev@lynxeye.de>
---
 drivers/mci/imx-esdhc.c | 28 +++++++++++++++++-----------
 1 file changed, 17 insertions(+), 11 deletions(-)

diff --git a/drivers/mci/imx-esdhc.c b/drivers/mci/imx-esdhc.c
index 23bdc1f..8b45500 100644
--- a/drivers/mci/imx-esdhc.c
+++ b/drivers/mci/imx-esdhc.c
@@ -22,6 +22,7 @@
  */
 #include <config.h>
 #include <common.h>
+#include <dma.h>
 #include <driver.h>
 #include <init.h>
 #include <of.h>
@@ -31,7 +32,6 @@
 #include <io.h>
 #include <linux/clk.h>
 #include <linux/err.h>
-#include <asm/mmu.h>
 #include <mach/generic.h>
 #include <mach/esdhc.h>
 #include <gpio.h>
@@ -211,6 +211,7 @@ esdhc_send_cmd(struct mci_host *mci, struct mci_cmd *cmd, struct mci_data *data)
 	u32	irqstat;
 	struct fsl_esdhc_host *host = to_fsl_esdhc(mci);
 	void __iomem *regs = host->regs;
+	unsigned int num_bytes = 0;
 	int ret;
 
 	esdhc_write32(regs + SDHCI_INT_STATUS, -1);
@@ -225,12 +226,15 @@ esdhc_send_cmd(struct mci_host *mci, struct mci_cmd *cmd, struct mci_data *data)
 		err = esdhc_setup_data(mci, data);
 		if(err)
 			return err;
-		if (data->flags & MMC_DATA_WRITE) {
-			dma_flush_range((unsigned long)data->src,
-				(unsigned long)(data->src + data->blocks * 512));
-		} else
-			dma_clean_range((unsigned long)data->src,
-				(unsigned long)(data->src + data->blocks * 512));
+
+		num_bytes = data->blocks * data->blocksize;
+
+		if (data->flags & MMC_DATA_WRITE)
+			dma_sync_single_for_device((unsigned long)data->src,
+						   num_bytes, DMA_TO_DEVICE);
+		else
+			dma_sync_single_for_device((unsigned long)data->dest,
+						   num_bytes, DMA_FROM_DEVICE);
 
 	}
 
@@ -313,10 +317,12 @@ esdhc_send_cmd(struct mci_host *mci, struct mci_cmd *cmd, struct mci_data *data)
 		} while (!(irqstat & IRQSTAT_TC) &&
 				(esdhc_read32(regs + SDHCI_PRESENT_STATE) & PRSSTAT_DLA));
 
-		if (data->flags & MMC_DATA_READ) {
-			dma_inv_range((unsigned long)data->dest,
-					(unsigned long)(data->dest + data->blocks * 512));
-		}
+		if (data->flags & MMC_DATA_WRITE)
+			dma_sync_single_for_cpu((unsigned long)data->src,
+						num_bytes, DMA_TO_DEVICE);
+		else
+			dma_sync_single_for_cpu((unsigned long)data->dest,
+						num_bytes, DMA_FROM_DEVICE);
 #endif
 	}
 
-- 
2.1.0


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* [PATCH 09/24] MCI: tegra-sdmmc: convert to streaming DMA ops
  2015-03-01 13:16 [PATCH 00/24] Phasing out direct usage of asm/mmu.h on ARM Lucas Stach
                   ` (7 preceding siblings ...)
  2015-03-01 13:17 ` [PATCH 08/24] MCI: imx: " Lucas Stach
@ 2015-03-01 13:17 ` Lucas Stach
  2015-03-01 13:17 ` [PATCH 10/24] net: arc-emac: " Lucas Stach
                   ` (15 subsequent siblings)
  24 siblings, 0 replies; 27+ messages in thread
From: Lucas Stach @ 2015-03-01 13:17 UTC (permalink / raw)
  To: barebox

Move to the common streaming DMA ops in order to get rid of
the direct usage of the ARM MMU functions for the cache
maintenance.

Signed-off-by: Lucas Stach <dev@lynxeye.de>
---
 drivers/mci/tegra-sdmmc.c | 26 ++++++++++++++------------
 1 file changed, 14 insertions(+), 12 deletions(-)

diff --git a/drivers/mci/tegra-sdmmc.c b/drivers/mci/tegra-sdmmc.c
index 0e23d6f..670c280 100644
--- a/drivers/mci/tegra-sdmmc.c
+++ b/drivers/mci/tegra-sdmmc.c
@@ -17,10 +17,10 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include <asm/mmu.h>
 #include <common.h>
 #include <clock.h>
 #include <driver.h>
+#include <dma.h>
 #include <gpio.h>
 #include <init.h>
 #include <io.h>
@@ -100,6 +100,7 @@ static int tegra_sdmmc_send_cmd(struct mci_host *mci, struct mci_cmd *cmd,
 				struct mci_data *data)
 {
 	struct tegra_sdmmc_host *host = to_tegra_sdmmc_host(mci);
+	unsigned int num_bytes = 0;
 	u32 val = 0;
 	int ret;
 
@@ -109,15 +110,15 @@ static int tegra_sdmmc_send_cmd(struct mci_host *mci, struct mci_cmd *cmd,
 
 	/* Set up for a data transfer if we have one */
 	if (data) {
+		num_bytes = data->blocks * data->blocksize;
+
 		if (data->flags & MMC_DATA_WRITE) {
-			dma_flush_range((unsigned long)data->src,
-			                (unsigned long)(data->src +
-			                data->blocks * 512));
+			dma_sync_single_for_device((unsigned long)data->src,
+						   num_bytes, DMA_TO_DEVICE);
 			writel((u32)data->src, host->regs + SDHCI_DMA_ADDRESS);
 		} else {
-			dma_clean_range((unsigned long)data->src,
-			                (unsigned long)(data->src +
-			                data->blocks * 512));
+			dma_sync_single_for_device((unsigned long)data->dest,
+						   num_bytes, DMA_FROM_DEVICE);
 			writel((u32)data->dest, host->regs + SDHCI_DMA_ADDRESS);
 		}
 
@@ -255,11 +256,12 @@ static int tegra_sdmmc_send_cmd(struct mci_host *mci, struct mci_cmd *cmd,
 		}
 		writel(val, host->regs + SDHCI_INT_STATUS);
 
-		if (data->flags & MMC_DATA_READ) {
-			dma_inv_range((unsigned long)data->dest,
-			              (unsigned long)(data->dest +
-			              data->blocks * 512));
-		}
+		if (data->flags & MMC_DATA_WRITE)
+			dma_sync_single_for_cpu((unsigned long)data->src,
+						num_bytes, DMA_TO_DEVICE);
+		else
+			dma_sync_single_for_cpu((unsigned long)data->dest,
+						num_bytes, DMA_FROM_DEVICE);
 	}
 
 	return 0;
-- 
2.1.0


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* [PATCH 10/24] net: arc-emac: convert to streaming DMA ops
  2015-03-01 13:16 [PATCH 00/24] Phasing out direct usage of asm/mmu.h on ARM Lucas Stach
                   ` (8 preceding siblings ...)
  2015-03-01 13:17 ` [PATCH 09/24] MCI: tegra-sdmmc: " Lucas Stach
@ 2015-03-01 13:17 ` Lucas Stach
  2015-03-01 13:17 ` [PATCH 11/24] net: cpsw: " Lucas Stach
                   ` (14 subsequent siblings)
  24 siblings, 0 replies; 27+ messages in thread
From: Lucas Stach @ 2015-03-01 13:17 UTC (permalink / raw)
  To: barebox

Move to the common streaming DMA ops in order to get rid of
the direct usage of the ARM MMU functions for the cache
maintenance.

Signed-off-by: Lucas Stach <dev@lynxeye.de>
---
 drivers/net/arc_emac.c | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/drivers/net/arc_emac.c b/drivers/net/arc_emac.c
index e050199..4bf456e 100644
--- a/drivers/net/arc_emac.c
+++ b/drivers/net/arc_emac.c
@@ -16,7 +16,6 @@
  * GNU General Public License for more details.
  */
 
-#include <asm/mmu.h>
 #include <clock.h>
 #include <common.h>
 #include <dma.h>
@@ -195,6 +194,8 @@ static int arc_emac_open(struct eth_device *edev)
 		rxbd->data = cpu_to_le32(rxbuf);
 
 		/* Return ownership to EMAC */
+		dma_sync_single_for_device((unsigned long)rxbuf, PKTSIZE,
+					   DMA_FROM_DEVICE);
 		rxbd->info = cpu_to_le32(FOR_EMAC | PKTSIZE);
 
 		*last_rx_bd = (*last_rx_bd + 1) % RX_BD_NUM;
@@ -244,7 +245,7 @@ static int arc_emac_send(struct eth_device *edev, void *data, int length)
 		length = EMAC_ZLEN;
 	}
 
-	dma_flush_range((unsigned long)data, (unsigned long)data + length);
+	dma_sync_single_for_device((unsigned long)data, length, DMA_TO_DEVICE);
 
 	bd->data = cpu_to_le32(data);
 	bd->info = cpu_to_le32(FOR_EMAC | FIRST_OR_LAST_MASK | length);
@@ -253,6 +254,8 @@ static int arc_emac_send(struct eth_device *edev, void *data, int length)
 	ret = wait_on_timeout(20 * MSECOND,
 			      (arc_reg_get(priv, R_STATUS) & TXINT_MASK) != 0);
 
+	dma_sync_single_for_cpu((unsigned long)data, length, DMA_TO_DEVICE);
+
 	if (ret) {
 		dev_err(&edev->dev, "transmit timeout\n");
 		return ret;
@@ -294,18 +297,19 @@ static int arc_emac_recv(struct eth_device *edev)
 			printk(KERN_DEBUG "incomplete packet received\n");
 
 			/* Return ownership to EMAC */
-			rxbd->info = cpu_to_le32(FOR_EMAC | PKTSIZE);
 			continue;
 		}
 
 		pktlen = info & LEN_MASK;
 
-		/* invalidate current receive buffer */
-		dma_inv_range((unsigned long)rxbd->data,
-			      (unsigned long)rxbd->data + pktlen);
+		dma_sync_single_for_cpu((unsigned long)rxbd->data, pktlen,
+					DMA_FROM_DEVICE);
 
 		net_receive(edev, (unsigned char *)rxbd->data, pktlen);
 
+		dma_sync_single_for_device((unsigned long)rxbd->data, pktlen,
+					   DMA_FROM_DEVICE);
+
 		rxbd->info = cpu_to_le32(FOR_EMAC | PKTSIZE);
 	}
 
-- 
2.1.0


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* [PATCH 11/24] net: cpsw: convert to streaming DMA ops
  2015-03-01 13:16 [PATCH 00/24] Phasing out direct usage of asm/mmu.h on ARM Lucas Stach
                   ` (9 preceding siblings ...)
  2015-03-01 13:17 ` [PATCH 10/24] net: arc-emac: " Lucas Stach
@ 2015-03-01 13:17 ` Lucas Stach
  2015-03-02  8:37   ` Jan Weitzel
  2015-03-01 13:17 ` [PATCH 12/24] net: at91_ether: " Lucas Stach
                   ` (13 subsequent siblings)
  24 siblings, 1 reply; 27+ messages in thread
From: Lucas Stach @ 2015-03-01 13:17 UTC (permalink / raw)
  To: barebox

Move to the common streaming DMA ops in order to get rid of
the direct usage of the ARM MMU functions for the cache
maintenance.

Signed-off-by: Lucas Stach <dev@lynxeye.de>
---
 drivers/net/cpsw.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/drivers/net/cpsw.c b/drivers/net/cpsw.c
index 799fac8..3f8ffa0 100644
--- a/drivers/net/cpsw.c
+++ b/drivers/net/cpsw.c
@@ -21,6 +21,7 @@
 #include <init.h>
 
 #include <command.h>
+#include <dma.h>
 #include <net.h>
 #include <malloc.h>
 #include <net.h>
@@ -32,7 +33,6 @@
 #include <of_net.h>
 #include <of_address.h>
 #include <xfuncs.h>
-#include <asm/mmu.h>
 #include <asm/system.h>
 #include <linux/err.h>
 
@@ -871,9 +871,9 @@ static int cpsw_send(struct eth_device *edev, void *packet, int length)
 
 	dev_dbg(&slave->dev, "%s: %i bytes @ 0x%p\n", __func__, length, packet);
 
-	dma_flush_range((ulong) packet, (ulong)packet + length);
-
+	dma_sync_single_for_device((unsigned long)packet, length, DMA_TO_DEVICE);
 	ret = cpdma_submit(priv, &priv->tx_chan, packet, length);
+	dma_sync_single_for_cpu((unsigned long)packet, length, DMA_TO_DEVICE);
 
 	return ret;
 }
@@ -886,8 +886,11 @@ static int cpsw_recv(struct eth_device *edev)
 	int len;
 
 	while (cpdma_process(priv, &priv->rx_chan, &buffer, &len) >= 0) {
-		dma_inv_range((ulong)buffer, (ulong)buffer + len);
+		dma_sync_single_for_cpu((unsigned long)buffer, len,
+					DMA_FROM_DEVICE);
 		net_receive(edev, buffer, len);
+		dma_sync_single_for_device((unsigned long)buffer, len,
+					   DMA_FROM_DEVICE);
 		cpdma_submit(priv, &priv->rx_chan, buffer, PKTSIZE);
 	}
 
-- 
2.1.0


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* [PATCH 12/24] net: at91_ether: convert to streaming DMA ops
  2015-03-01 13:16 [PATCH 00/24] Phasing out direct usage of asm/mmu.h on ARM Lucas Stach
                   ` (10 preceding siblings ...)
  2015-03-01 13:17 ` [PATCH 11/24] net: cpsw: " Lucas Stach
@ 2015-03-01 13:17 ` Lucas Stach
  2015-03-01 13:17 ` [PATCH 13/24] net: davinci_emac: " Lucas Stach
                   ` (12 subsequent siblings)
  24 siblings, 0 replies; 27+ messages in thread
From: Lucas Stach @ 2015-03-01 13:17 UTC (permalink / raw)
  To: barebox

Move to the common streaming DMA ops in order to get rid of
the direct usage of the ARM MMU functions for the cache
maintenance.

Signed-off-by: Lucas Stach <dev@lynxeye.de>
---
 drivers/net/at91_ether.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/drivers/net/at91_ether.c b/drivers/net/at91_ether.c
index 2ef24cc..d596834 100644
--- a/drivers/net/at91_ether.c
+++ b/drivers/net/at91_ether.c
@@ -35,7 +35,6 @@
 #include <linux/clk.h>
 #include <linux/mii.h>
 #include <errno.h>
-#include <asm/mmu.h>
 #include <linux/phy.h>
 
 #include "at91_ether.h"
@@ -200,7 +199,8 @@ static int at91_ether_send(struct eth_device *edev, void *packet, int length)
 {
 	while (!(at91_emac_read(AT91_EMAC_TSR) & AT91_EMAC_TSR_BNQ));
 
-	dma_flush_range((ulong) packet, (ulong)packet + length);
+	dma_sync_single_for_device((unsigned long)packet, length, DMA_TO_DEVICE);
+
 	/* Set address of the data in the Transmit Address register */
 	at91_emac_write(AT91_EMAC_TAR, (unsigned long) packet);
 	/* Set length of the packet in the Transmit Control register */
@@ -211,6 +211,8 @@ static int at91_ether_send(struct eth_device *edev, void *packet, int length)
 	at91_emac_write(AT91_EMAC_TSR,
 		at91_emac_read(AT91_EMAC_TSR) | AT91_EMAC_TSR_COMP);
 
+	dma_sync_single_for_cpu((unsigned long)packet, length, DMA_TO_DEVICE);
+
 	return 0;
 }
 
@@ -225,7 +227,11 @@ static int at91_ether_rx(struct eth_device *edev)
 
 	size = rbfp->size & RBF_SIZE;
 
+	dma_sync_single_for_cpu((unsigned long)rbfp->addr, size,
+				DMA_FROM_DEVICE);
 	net_receive(edev, (unsigned char *)(rbfp->addr & RBF_ADDR), size);
+	dma_sync_single_for_device((unsigned long)rbfp->addr, size,
+				   DMA_FROM_DEVICE);
 
 	rbfp->addr &= ~RBF_OWNER;
 	if (rbfp->addr & RBF_WRAP)
-- 
2.1.0


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* [PATCH 13/24] net: davinci_emac: convert to streaming DMA ops
  2015-03-01 13:16 [PATCH 00/24] Phasing out direct usage of asm/mmu.h on ARM Lucas Stach
                   ` (11 preceding siblings ...)
  2015-03-01 13:17 ` [PATCH 12/24] net: at91_ether: " Lucas Stach
@ 2015-03-01 13:17 ` Lucas Stach
  2015-03-01 13:17 ` [PATCH 14/24] net: designware: " Lucas Stach
                   ` (11 subsequent siblings)
  24 siblings, 0 replies; 27+ messages in thread
From: Lucas Stach @ 2015-03-01 13:17 UTC (permalink / raw)
  To: barebox

Move to the common streaming DMA ops in order to get rid of
the direct usage of the ARM MMU functions for the cache
maintenance.

Signed-off-by: Lucas Stach <dev@lynxeye.de>
---
 drivers/net/davinci_emac.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/drivers/net/davinci_emac.c b/drivers/net/davinci_emac.c
index ce367a3..056ffe2 100644
--- a/drivers/net/davinci_emac.c
+++ b/drivers/net/davinci_emac.c
@@ -40,12 +40,12 @@
  */
 
 #include <common.h>
+#include <dma.h>
 #include <io.h>
 #include <clock.h>
 #include <net.h>
 #include <malloc.h>
 #include <init.h>
-#include <asm/mmu.h>
 #include <asm/system.h>
 #include <linux/phy.h>
 #include <mach/emac_defs.h>
@@ -411,7 +411,7 @@ static int davinci_emac_send(struct eth_device *edev, void *packet, int length)
 				    EMAC_CPPI_OWNERSHIP_BIT |
 				    EMAC_CPPI_EOP_BIT),
 		priv->emac_tx_desc + EMAC_DESC_PKT_FLAG_LEN);
-	dma_flush_range((ulong) packet, (ulong)packet + length);
+	dma_sync_single_for_device((unsigned long)packet, length, DMA_TO_DEVICE);
 	/* Send the packet */
 	writel(BD_TO_HW(priv->emac_tx_desc), priv->adap_emac + EMAC_TX0HDP);
 
@@ -429,6 +429,7 @@ static int davinci_emac_send(struct eth_device *edev, void *packet, int length)
 			break;
 		}
 	}
+	dma_sync_single_for_cpu((unsigned long)packet, length, DMA_TO_DEVICE);
 
 	dev_dbg(priv->dev, "- emac_send (ret_status %i)\n", ret_status);
 	return ret_status;
@@ -460,9 +461,9 @@ static int davinci_emac_recv(struct eth_device *edev)
 		pkt = (unsigned char *)readl(rx_curr_desc + EMAC_DESC_BUFFER);
 		len = readl(rx_curr_desc + EMAC_DESC_BUFF_OFF_LEN) & 0xffff;
 		dev_dbg(priv->dev, "| emac_recv got packet (length %i)\n", len);
-		dma_inv_range((ulong)pkt,
-				(ulong)readl(rx_curr_desc + EMAC_DESC_BUFFER) + len);
+		dma_sync_single_for_cpu((unsigned long)pkt, len, DMA_FROM_DEVICE);
 		net_receive(edev, pkt, len);
+		dma_sync_single_for_device((unsigned long)pkt, len, DMA_FROM_DEVICE);
 		ret = len;
 	}
 
-- 
2.1.0


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* [PATCH 14/24] net: designware: convert to streaming DMA ops
  2015-03-01 13:16 [PATCH 00/24] Phasing out direct usage of asm/mmu.h on ARM Lucas Stach
                   ` (12 preceding siblings ...)
  2015-03-01 13:17 ` [PATCH 13/24] net: davinci_emac: " Lucas Stach
@ 2015-03-01 13:17 ` Lucas Stach
  2015-03-01 13:17 ` [PATCH 15/24] net: fec: " Lucas Stach
                   ` (10 subsequent siblings)
  24 siblings, 0 replies; 27+ messages in thread
From: Lucas Stach @ 2015-03-01 13:17 UTC (permalink / raw)
  To: barebox

Move to the common streaming DMA ops in order to get rid of
the direct usage of the ARM MMU functions for the cache
maintenance.

Signed-off-by: Lucas Stach <dev@lynxeye.de>
---
 drivers/net/designware.c | 19 +++++++++++--------
 1 file changed, 11 insertions(+), 8 deletions(-)

diff --git a/drivers/net/designware.c b/drivers/net/designware.c
index 2bc4471..1e1befd 100644
--- a/drivers/net/designware.c
+++ b/drivers/net/designware.c
@@ -27,7 +27,6 @@
 #include <io.h>
 #include <net.h>
 #include <of_net.h>
-#include <asm/mmu.h>
 #include <net/designware.h>
 #include <linux/phy.h>
 #include <linux/err.h>
@@ -197,8 +196,8 @@ static void rx_descs_init(struct eth_device *dev)
 		else
 			desc_p->dmamac_cntl |= DESC_RXCTRL_RXCHAIN;
 
-		dma_inv_range((unsigned long)desc_p->dmamac_addr,
-			      (unsigned long)desc_p->dmamac_addr + CONFIG_ETH_BUFSIZE);
+		dma_sync_single_for_cpu((unsigned long)desc_p->dmamac_addr,
+					CONFIG_ETH_BUFSIZE, DMA_FROM_DEVICE);
 		desc_p->txrx_status = DESC_RXSTS_OWNBYDMA;
 	}
 
@@ -302,8 +301,8 @@ static int dwc_ether_send(struct eth_device *dev, void *packet, int length)
 	}
 
 	memcpy((void *)desc_p->dmamac_addr, packet, length);
-	dma_flush_range((unsigned long)desc_p->dmamac_addr,
-			(unsigned long)desc_p->dmamac_addr + length);
+	dma_sync_single_for_device((unsigned long)desc_p->dmamac_addr, length,
+				   DMA_TO_DEVICE);
 
 	if (priv->enh_desc) {
 		desc_p->txrx_status |= DESC_ENH_TXSTS_TXFIRST | DESC_ENH_TXSTS_TXLAST;
@@ -328,6 +327,9 @@ static int dwc_ether_send(struct eth_device *dev, void *packet, int length)
 
 	/* Start the transmission */
 	writel(POLL_DATA, &dma_p->txpolldemand);
+	dma_sync_single_for_cpu((unsigned long)desc_p->dmamac_addr, length,
+				DMA_TO_DEVICE);
+
 	return 0;
 }
 
@@ -351,10 +353,11 @@ static int dwc_ether_rx(struct eth_device *dev)
 	 * Make the current descriptor valid again and go to
 	 * the next one
 	 */
-	dma_inv_range((unsigned long)desc_p->dmamac_addr,
-		      (unsigned long)desc_p->dmamac_addr + length);
-
+	dma_sync_single_for_cpu((unsigned long)desc_p->dmamac_addr, length,
+				DMA_FROM_DEVICE);
 	net_receive(dev, desc_p->dmamac_addr, length);
+	dma_sync_single_for_device((unsigned long)desc_p->dmamac_addr, length,
+				   DMA_FROM_DEVICE);
 
 	desc_p->txrx_status |= DESC_RXSTS_OWNBYDMA;
 
-- 
2.1.0


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* [PATCH 15/24] net: fec: convert to streaming DMA ops
  2015-03-01 13:16 [PATCH 00/24] Phasing out direct usage of asm/mmu.h on ARM Lucas Stach
                   ` (13 preceding siblings ...)
  2015-03-01 13:17 ` [PATCH 14/24] net: designware: " Lucas Stach
@ 2015-03-01 13:17 ` Lucas Stach
  2015-03-01 13:17 ` [PATCH 16/24] net: macb: " Lucas Stach
                   ` (9 subsequent siblings)
  24 siblings, 0 replies; 27+ messages in thread
From: Lucas Stach @ 2015-03-01 13:17 UTC (permalink / raw)
  To: barebox

Move to the common streaming DMA ops in order to get rid of
the direct usage of the ARM MMU functions for the cache
maintenance.

Signed-off-by: Lucas Stach <dev@lynxeye.de>
---
 drivers/net/fec_imx.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/drivers/net/fec_imx.c b/drivers/net/fec_imx.c
index 5761256..484ea0d 100644
--- a/drivers/net/fec_imx.c
+++ b/drivers/net/fec_imx.c
@@ -31,8 +31,6 @@
 #include <of_gpio.h>
 #include <gpio.h>
 
-#include <asm/mmu.h>
-
 #include "fec_imx.h"
 
 struct fec_frame {
@@ -479,8 +477,9 @@ static int fec_send(struct eth_device *dev, void *eth_data, int data_length)
 	writew(data_length, &fec->tbd_base[fec->tbd_index].data_length);
 
 	writel((uint32_t)(eth_data), &fec->tbd_base[fec->tbd_index].data_pointer);
-	dma_flush_range((unsigned long)eth_data,
-			(unsigned long)(eth_data + data_length));
+
+	dma_sync_single_for_device((unsigned long)eth_data, data_length,
+				   DMA_TO_DEVICE);
 	/*
 	 * update BD's status now
 	 * This block:
@@ -503,6 +502,8 @@ static int fec_send(struct eth_device *dev, void *eth_data, int data_length)
 			break;
 		}
 	}
+	dma_sync_single_for_cpu((unsigned long)eth_data, data_length,
+				DMA_TO_DEVICE);
 
 	/* for next transmission use the other buffer */
 	if (fec->tbd_index)
@@ -576,7 +577,11 @@ static int fec_recv(struct eth_device *dev)
 			 */
 			frame = phys_to_virt(readl(&rbd->data_pointer));
 			frame_length = readw(&rbd->data_length) - 4;
+			dma_sync_single_for_cpu((unsigned long)frame->data,
+						frame_length, DMA_FROM_DEVICE);
 			net_receive(dev, frame->data, frame_length);
+			dma_sync_single_for_device((unsigned long)frame->data,
+						   frame_length, DMA_FROM_DEVICE);
 			len = frame_length;
 		} else {
 			if (bd_status & FEC_RBD_ERR) {
-- 
2.1.0


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* [PATCH 16/24] net: macb: convert to streaming DMA ops
  2015-03-01 13:16 [PATCH 00/24] Phasing out direct usage of asm/mmu.h on ARM Lucas Stach
                   ` (14 preceding siblings ...)
  2015-03-01 13:17 ` [PATCH 15/24] net: fec: " Lucas Stach
@ 2015-03-01 13:17 ` Lucas Stach
  2015-03-01 13:17 ` [PATCH 17/24] net: orion-gbe: " Lucas Stach
                   ` (8 subsequent siblings)
  24 siblings, 0 replies; 27+ messages in thread
From: Lucas Stach @ 2015-03-01 13:17 UTC (permalink / raw)
  To: barebox

Move to the common streaming DMA ops in order to get rid of
the direct usage of the ARM MMU functions for the cache
maintenance.

Signed-off-by: Lucas Stach <dev@lynxeye.de>
---
 drivers/net/macb.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/drivers/net/macb.c b/drivers/net/macb.c
index b941c27..957e4a7 100644
--- a/drivers/net/macb.c
+++ b/drivers/net/macb.c
@@ -47,7 +47,6 @@
 #include <platform_data/macb.h>
 #include <linux/clk.h>
 #include <linux/err.h>
-#include <asm/mmu.h>
 #include <linux/phy.h>
 
 #include "macb.h"
@@ -122,7 +121,7 @@ static int macb_send(struct eth_device *edev, void *packet,
 	macb->tx_ring[tx_head].ctrl = ctrl;
 	macb->tx_ring[tx_head].addr = (ulong)packet;
 	barrier();
-	dma_flush_range((ulong) packet, (ulong)packet + length);
+	dma_sync_single_for_device((unsigned long)packet, length, DMA_TO_DEVICE);
 	macb_writel(macb, NCR, MACB_BIT(TE) | MACB_BIT(RE) | MACB_BIT(TSTART));
 
 	start = get_time_ns();
@@ -135,6 +134,7 @@ static int macb_send(struct eth_device *edev, void *packet,
 			break;
 		}
 	} while (!is_timeout(start, 100 * MSECOND));
+	dma_sync_single_for_cpu((unsigned long)packet, length, DMA_TO_DEVICE);
 
 	if (ctrl & MACB_BIT(TX_UNDERRUN))
 		dev_err(macb->dev, "TX underrun\n");
@@ -188,7 +188,11 @@ static int gem_recv(struct eth_device *edev)
 		status = macb->rx_ring[macb->rx_tail].ctrl;
 		length = MACB_BFEXT(RX_FRMLEN, status);
 		buffer = macb->rx_buffer + macb->rx_buffer_size * macb->rx_tail;
+		dma_sync_single_for_cpu((unsigned long)buffer, length,
+					DMA_FROM_DEVICE);
 		net_receive(edev, buffer, length);
+		dma_sync_single_for_device((unsigned long)buffer, length,
+					   DMA_FROM_DEVICE);
 		macb->rx_ring[macb->rx_tail].addr &= ~MACB_BIT(RX_USED);
 		barrier();
 
-- 
2.1.0


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* [PATCH 17/24] net: orion-gbe: convert to streaming DMA ops
  2015-03-01 13:16 [PATCH 00/24] Phasing out direct usage of asm/mmu.h on ARM Lucas Stach
                   ` (15 preceding siblings ...)
  2015-03-01 13:17 ` [PATCH 16/24] net: macb: " Lucas Stach
@ 2015-03-01 13:17 ` Lucas Stach
  2015-03-01 13:17 ` [PATCH 18/24] net: rtl8169: " Lucas Stach
                   ` (7 subsequent siblings)
  24 siblings, 0 replies; 27+ messages in thread
From: Lucas Stach @ 2015-03-01 13:17 UTC (permalink / raw)
  To: barebox

Move to the common streaming DMA ops in order to get rid of
the direct usage of the ARM MMU functions for the cache
maintenance.

Signed-off-by: Lucas Stach <dev@lynxeye.de>
---
 drivers/net/orion-gbe.c | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/drivers/net/orion-gbe.c b/drivers/net/orion-gbe.c
index ad1fc66..4235122 100644
--- a/drivers/net/orion-gbe.c
+++ b/drivers/net/orion-gbe.c
@@ -33,7 +33,6 @@
 #include <net.h>
 #include <of_net.h>
 #include <linux/sizes.h>
-#include <asm/mmu.h>
 #include <linux/clk.h>
 #include <linux/err.h>
 #include <linux/mbus.h>
@@ -243,7 +242,7 @@ static int port_send(struct eth_device *edev, void *data, int len)
 	int ret;
 
 	/* flush transmit data */
-	dma_flush_range((unsigned long)data, (unsigned long)data+len);
+	dma_sync_single_for_device((unsigned long)data, len, DMA_TO_DEVICE);
 
 	txdesc->cmd_sts = TXDESC_OWNED_BY_DMA;
 	txdesc->cmd_sts |= TXDESC_FIRST | TXDESC_LAST;
@@ -258,6 +257,7 @@ static int port_send(struct eth_device *edev, void *data, int len)
 	/* wait for packet transmit completion */
 	ret = wait_on_timeout(TRANSFER_TIMEOUT,
 		      (readl(&txdesc->cmd_sts) & TXDESC_OWNED_BY_DMA) == 0);
+	dma_sync_single_for_cpu((unsigned long)data, len, DMA_TO_DEVICE);
 	if (ret) {
 		dev_err(&edev->dev, "transmit timeout\n");
 		return ret;
@@ -301,12 +301,15 @@ static int port_recv(struct eth_device *edev)
 	}
 
 	/* invalidate current receive buffer */
-	dma_inv_range((unsigned long)rxdesc->buf_ptr,
-		      (unsigned long)rxdesc->buf_ptr +
-		      ALIGN(PKTSIZE, 8));
+	dma_sync_single_for_cpu((unsigned long)rxdesc->buf_ptr,
+				ALIGN(PKTSIZE, 8), DMA_FROM_DEVICE);
 
 	/* received packet is padded with two null bytes */
 	net_receive(edev, rxdesc->buf_ptr + 0x2, rxdesc->byte_cnt - 0x2);
+
+	dma_sync_single_for_device((unsigned long)rxdesc->buf_ptr,
+				   ALIGN(PKTSIZE, 8), DMA_FROM_DEVICE);
+
 	ret = 0;
 
 recv_err:
-- 
2.1.0


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* [PATCH 18/24] net: rtl8169: convert to streaming DMA ops
  2015-03-01 13:16 [PATCH 00/24] Phasing out direct usage of asm/mmu.h on ARM Lucas Stach
                   ` (16 preceding siblings ...)
  2015-03-01 13:17 ` [PATCH 17/24] net: orion-gbe: " Lucas Stach
@ 2015-03-01 13:17 ` Lucas Stach
  2015-03-01 13:17 ` [PATCH 19/24] net: xgmac: " Lucas Stach
                   ` (6 subsequent siblings)
  24 siblings, 0 replies; 27+ messages in thread
From: Lucas Stach @ 2015-03-01 13:17 UTC (permalink / raw)
  To: barebox

Move to the common streaming DMA ops in order to get rid of
the direct usage of the ARM MMU functions for the cache
maintenance.

Signed-off-by: Lucas Stach <dev@lynxeye.de>
---
 drivers/net/Kconfig   |  1 +
 drivers/net/rtl8169.c | 30 +++++++++++++-----------------
 2 files changed, 14 insertions(+), 17 deletions(-)

diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
index adb7008..42ffa65 100644
--- a/drivers/net/Kconfig
+++ b/drivers/net/Kconfig
@@ -167,6 +167,7 @@ config DRIVER_NET_RTL8139
 config DRIVER_NET_RTL8169
 	bool "RealTek RTL-8169 PCI Ethernet driver"
 	depends on PCI
+	depends on HAS_DMA
 	select PHYLIB
 	help
 	  This is a driver for the Fast Ethernet PCI network cards based on
diff --git a/drivers/net/rtl8169.c b/drivers/net/rtl8169.c
index 638e049..f44dc5a 100644
--- a/drivers/net/rtl8169.c
+++ b/drivers/net/rtl8169.c
@@ -14,7 +14,6 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include <asm/mmu.h>
 #include <common.h>
 #include <dma.h>
 #include <init.h>
@@ -234,8 +233,8 @@ static void rtl8169_init_ring(struct rtl8169_priv *priv)
 	priv->rx_desc = dma_alloc_coherent(NUM_RX_DESC *
 				sizeof(struct bufdesc));
 	priv->rx_buf = malloc(NUM_RX_DESC * PKT_BUF_SIZE);
-	dma_clean_range((unsigned long)priv->rx_buf,
-			(unsigned long)priv->rx_buf + NUM_RX_DESC * PKT_BUF_SIZE);
+	dma_sync_single_for_device((unsigned long)priv->rx_buf,
+				   NUM_RX_DESC * PKT_BUF_SIZE, DMA_FROM_DEVICE);
 
 	memset((void *)priv->tx_desc, 0, NUM_TX_DESC * sizeof(struct bufdesc));
 	memset((void *)priv->rx_desc, 0, NUM_RX_DESC * sizeof(struct bufdesc));
@@ -366,8 +365,8 @@ static int rtl8169_eth_send(struct eth_device *edev, void *packet,
 	if (packet_length < ETH_ZLEN)
 		memset(priv->tx_buf + entry * PKT_BUF_SIZE, 0, ETH_ZLEN);
 	memcpy(priv->tx_buf + entry * PKT_BUF_SIZE, packet, packet_length);
-	dma_flush_range((unsigned long)priv->tx_buf + entry * PKT_BUF_SIZE,
-			(unsigned long)priv->tx_buf + (entry + 1) * PKT_BUF_SIZE);
+	dma_sync_single_for_device((unsigned long)priv->tx_buf + entry *
+				   PKT_BUF_SIZE, PKT_BUF_SIZE, DMA_TO_DEVICE);
 
 	priv->tx_desc[entry].buf_Haddr = 0;
 	priv->tx_desc[entry].buf_addr =
@@ -388,6 +387,9 @@ static int rtl8169_eth_send(struct eth_device *edev, void *packet,
 	while (priv->tx_desc[entry].status & BD_STAT_OWN)
 		;
 
+	dma_sync_single_for_cpu((unsigned long)priv->tx_buf + entry *
+				PKT_BUF_SIZE, PKT_BUF_SIZE, DMA_TO_DEVICE);
+
 	priv->cur_tx++;
 
 	return 0;
@@ -405,22 +407,16 @@ static int rtl8169_eth_rx(struct eth_device *edev)
 		if (!(priv->rx_desc[entry].status & BD_STAT_RX_RES)) {
 			pkt_size = (priv->rx_desc[entry].status & 0x1fff) - 4;
 
-			dma_inv_range((unsigned long)priv->rx_buf
-			               + entry * PKT_BUF_SIZE,
-			              (unsigned long)priv->rx_buf
-			               + entry * PKT_BUF_SIZE + pkt_size);
+			dma_sync_single_for_cpu((unsigned long)priv->rx_buf
+						+ entry * PKT_BUF_SIZE,
+						pkt_size, DMA_FROM_DEVICE);
 
 			net_receive(edev, priv->rx_buf + entry * PKT_BUF_SIZE,
 			            pkt_size);
 
-			/*
-			 * the buffer is going to be reused by HW, make sure to
-			 * clean out any potentially modified data
-			 */
-			dma_clean_range((unsigned long)priv->rx_buf
-			               + entry * PKT_BUF_SIZE,
-			              (unsigned long)priv->rx_buf
-			               + entry * PKT_BUF_SIZE + pkt_size);
+			dma_sync_single_for_device((unsigned long)priv->rx_buf
+						   + entry * PKT_BUF_SIZE,
+						   pkt_size, DMA_FROM_DEVICE);
 
 			if (entry == NUM_RX_DESC - 1)
 				priv->rx_desc[entry].status = BD_STAT_OWN |
-- 
2.1.0


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* [PATCH 19/24] net: xgmac: convert to streaming DMA ops
  2015-03-01 13:16 [PATCH 00/24] Phasing out direct usage of asm/mmu.h on ARM Lucas Stach
                   ` (17 preceding siblings ...)
  2015-03-01 13:17 ` [PATCH 18/24] net: rtl8169: " Lucas Stach
@ 2015-03-01 13:17 ` Lucas Stach
  2015-03-01 13:17 ` [PATCH 20/24] usb: gadget: fsl_udc: " Lucas Stach
                   ` (5 subsequent siblings)
  24 siblings, 0 replies; 27+ messages in thread
From: Lucas Stach @ 2015-03-01 13:17 UTC (permalink / raw)
  To: barebox

Move to the common streaming DMA ops in order to get rid of
the direct usage of the ARM MMU functions for the cache
maintenance.

Signed-off-by: Lucas Stach <dev@lynxeye.de>
---
 drivers/net/xgmac.c | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/drivers/net/xgmac.c b/drivers/net/xgmac.c
index c1e4da8..f39dc4c 100644
--- a/drivers/net/xgmac.c
+++ b/drivers/net/xgmac.c
@@ -25,7 +25,6 @@
 #include <errno.h>
 #include <io.h>
 #include <linux/err.h>
-#include <asm/mmu.h>
 
 #define TX_NUM_DESC			1
 #define RX_NUM_DESC			32
@@ -587,7 +586,7 @@ static int xgmac_send(struct eth_device *edev, void *packet, int length)
 	struct xgmac_dma_desc *txdesc = &priv->tx_chain[currdesc];
 	int ret;
 
-	dma_flush_range((ulong) packet, (ulong)packet + length);
+	dma_sync_single_for_device((unsigned long)packet, length, DMA_TO_DEVICE);
 	desc_set_buf_addr_and_size(txdesc, packet, length);
 	desc_set_tx_owner(txdesc, TXDESC_FIRST_SEG |
 		TXDESC_LAST_SEG | TXDESC_CRC_EN_APPEND);
@@ -596,6 +595,7 @@ static int xgmac_send(struct eth_device *edev, void *packet, int length)
 	writel(1, priv->base + XGMAC_DMA_TX_POLL);
 
 	ret = wait_on_timeout(1 * SECOND, !desc_get_owner(txdesc));
+	dma_sync_single_for_cpu((unsigned long)packet, length, DMA_TO_DEVICE);
 	if (ret) {
 		dev_err(priv->dev, "TX timeout\n");
 		return ret;
@@ -611,14 +611,19 @@ static int xgmac_recv(struct eth_device *edev)
 	u32 currdesc = priv->rx_currdesc;
 	struct xgmac_dma_desc *rxdesc = &priv->rx_chain[currdesc];
 	int length = 0;
+	void *buf_addr;
 
 	/* check if the host has the desc */
 	if (desc_get_owner(rxdesc))
 		return -1; /* something bad happened */
 
 	length = desc_get_rx_frame_len(rxdesc);
+	buf_addr = desc_get_buf_addr(rxdesc);
 
-	net_receive(edev, desc_get_buf_addr(rxdesc), length);
+	dma_sync_single_for_cpu((unsigned long)buf_addr, length, DMA_FROM_DEVICE);
+	net_receive(edev, buf_addr, length);
+	dma_sync_single_for_device((unsigned long)buf_addr, length,
+				   DMA_FROM_DEVICE);
 
 	/* set descriptor back to owned by XGMAC */
 	desc_set_rx_owner(rxdesc);
-- 
2.1.0


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* [PATCH 20/24] usb: gadget: fsl_udc: convert to streaming DMA ops
  2015-03-01 13:16 [PATCH 00/24] Phasing out direct usage of asm/mmu.h on ARM Lucas Stach
                   ` (18 preceding siblings ...)
  2015-03-01 13:17 ` [PATCH 19/24] net: xgmac: " Lucas Stach
@ 2015-03-01 13:17 ` Lucas Stach
  2015-03-01 13:17 ` [PATCH 21/24] usb: host: ehci: " Lucas Stach
                   ` (4 subsequent siblings)
  24 siblings, 0 replies; 27+ messages in thread
From: Lucas Stach @ 2015-03-01 13:17 UTC (permalink / raw)
  To: barebox

Move to the common streaming DMA ops in order to get rid of
the direct usage of the ARM MMU functions for the cache
maintenance.

Signed-off-by: Lucas Stach <dev@lynxeye.de>
---
 drivers/usb/gadget/fsl_udc.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/usb/gadget/fsl_udc.c b/drivers/usb/gadget/fsl_udc.c
index f9e58bb..9aa313a 100644
--- a/drivers/usb/gadget/fsl_udc.c
+++ b/drivers/usb/gadget/fsl_udc.c
@@ -568,8 +568,8 @@ static void done(struct fsl_ep *ep, struct fsl_req *req, int status)
 		dma_free_coherent(curr_td, sizeof(struct ep_td_struct));
 	}
 
-	dma_inv_range((unsigned long)req->req.buf,
-		(unsigned long)(req->req.buf + req->req.length));
+	dma_sync_single_for_cpu((unsigned long)req->req.buf, req->req.length,
+				DMA_BIDIRECTIONAL);
 
 	if (status && (status != -ESHUTDOWN))
 		VDBG("complete %s req %p stat %d len %u/%u",
@@ -1250,8 +1250,8 @@ fsl_ep_queue(struct usb_ep *_ep, struct usb_request *_req)
 
 	req->ep = ep;
 
-	dma_flush_range((unsigned long)req->req.buf,
-			(unsigned long)(req->req.buf + req->req.length));
+	dma_sync_single_for_device((unsigned long)req->req.buf, req->req.length,
+				   DMA_BIDIRECTIONAL);
 
 	req->req.status = -EINPROGRESS;
 	req->req.actual = 0;
-- 
2.1.0


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* [PATCH 21/24] usb: host: ehci: convert to streaming DMA ops
  2015-03-01 13:16 [PATCH 00/24] Phasing out direct usage of asm/mmu.h on ARM Lucas Stach
                   ` (19 preceding siblings ...)
  2015-03-01 13:17 ` [PATCH 20/24] usb: gadget: fsl_udc: " Lucas Stach
@ 2015-03-01 13:17 ` Lucas Stach
  2015-03-01 13:17 ` [PATCH 22/24] usb: host: ohci: " Lucas Stach
                   ` (3 subsequent siblings)
  24 siblings, 0 replies; 27+ messages in thread
From: Lucas Stach @ 2015-03-01 13:17 UTC (permalink / raw)
  To: barebox

Move to the common streaming DMA ops in order to get rid of
the direct usage of the ARM MMU functions for the cache
maintenance.

Signed-off-by: Lucas Stach <dev@lynxeye.de>
---
 drivers/usb/host/ehci-hcd.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c
index 7f59774..ef1371f 100644
--- a/drivers/usb/host/ehci-hcd.c
+++ b/drivers/usb/host/ehci-hcd.c
@@ -30,7 +30,6 @@
 #include <errno.h>
 #include <of.h>
 #include <usb/ehci.h>
-#include <asm/mmu.h>
 #include <linux/err.h>
 
 #include "ehci.h"
@@ -331,7 +330,9 @@ ehci_submit_async(struct usb_device *dev, unsigned long pipe, void *buffer,
 			struct qTD *qtd = &ehci->td[i];
 			if (!qtd->qtd_dma)
 				continue;
-			dma_flush_range(qtd->qtd_dma, qtd->qtd_dma + qtd->length);
+			dma_sync_single_for_device((unsigned long)qtd->qtd_dma,
+						   qtd->length,
+						   DMA_BIDIRECTIONAL);
 		}
 	}
 
@@ -372,7 +373,8 @@ ehci_submit_async(struct usb_device *dev, unsigned long pipe, void *buffer,
 			struct qTD *qtd = &ehci->td[i];
 			if (!qtd->qtd_dma)
 				continue;
-			dma_inv_range(qtd->qtd_dma, qtd->qtd_dma + qtd->length);
+			dma_sync_single_for_cpu((unsigned long)qtd->qtd_dma,
+						qtd->length, DMA_BIDIRECTIONAL);
 		}
 	}
 
-- 
2.1.0


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* [PATCH 22/24] usb: host: ohci: convert to streaming DMA ops
  2015-03-01 13:16 [PATCH 00/24] Phasing out direct usage of asm/mmu.h on ARM Lucas Stach
                   ` (20 preceding siblings ...)
  2015-03-01 13:17 ` [PATCH 21/24] usb: host: ehci: " Lucas Stach
@ 2015-03-01 13:17 ` Lucas Stach
  2015-03-01 13:17 ` [PATCH 23/24] ARM: bcm2835: mbox: " Lucas Stach
                   ` (2 subsequent siblings)
  24 siblings, 0 replies; 27+ messages in thread
From: Lucas Stach @ 2015-03-01 13:17 UTC (permalink / raw)
  To: barebox

Move to the common streaming DMA ops in order to get rid of
the direct usage of the ARM MMU functions for the cache
maintenance.

Signed-off-by: Lucas Stach <dev@lynxeye.de>
---
 drivers/usb/host/ohci-hcd.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c
index 0cdcbb5..ed3a00e 100644
--- a/drivers/usb/host/ohci-hcd.c
+++ b/drivers/usb/host/ohci-hcd.c
@@ -43,6 +43,7 @@
 #include <common.h>
 #include <dma.h>
 #include <clock.h>
+#include <dma.h>
 #include <malloc.h>
 #include <usb/usb.h>
 #include <usb/usb_defs.h>
@@ -52,7 +53,6 @@
 
 #include <asm/byteorder.h>
 #include <io.h>
-#include <asm/mmu.h>
 
 #include "ohci.h"
 
@@ -857,7 +857,7 @@ static void td_fill(struct ohci *ohci, unsigned int info,
 
 	td->hwNextTD = virt_to_phys((void *)m32_swap((unsigned long)td_pt));
 
-	dma_flush_range((unsigned long)data, (unsigned long)(data + len));
+	dma_sync_single_for_device((unsigned long)data, len, DMA_BIDIRECTIONAL);
 
 	/* append to queue */
 	td->ed->hwTailP = td->hwNextTD;
@@ -1093,7 +1093,8 @@ static int dl_done_list(struct ohci *ohci)
 	unsigned long ptdphys = virt_to_phys(ptd);
 	struct td *td_list;
 
-	dma_clean_range(ptdphys, ptdphys + (sizeof(struct td) * NUM_TD));
+	dma_sync_single_for_device((unsigned long)ptdphys,
+				sizeof(struct td) * NUM_TD, DMA_BIDIRECTIONAL);
 
 	td_list = dl_reverse_done_list(ohci);
 
@@ -1529,7 +1530,8 @@ static int submit_common_msg(struct usb_device *dev, unsigned long pipe, void *b
 	dev->status = stat;
 	dev->act_len = urb->actual_length;
 
-	dma_inv_range((unsigned long)buffer, (unsigned long)(buffer + transfer_len));
+	dma_sync_single_for_cpu((unsigned long)buffer, transfer_len,
+				DMA_BIDIRECTIONAL);
 
 	pkt_print(urb, dev, pipe, buffer, transfer_len,
 		  setup, "RET(ctlr)", usb_pipein(pipe));
-- 
2.1.0


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* [PATCH 23/24] ARM: bcm2835: mbox: convert to streaming DMA ops
  2015-03-01 13:16 [PATCH 00/24] Phasing out direct usage of asm/mmu.h on ARM Lucas Stach
                   ` (21 preceding siblings ...)
  2015-03-01 13:17 ` [PATCH 22/24] usb: host: ohci: " Lucas Stach
@ 2015-03-01 13:17 ` Lucas Stach
  2015-03-01 13:17 ` [PATCH 24/24] ARM: MMU: unexport cache maintenance functions Lucas Stach
  2015-03-03  8:37 ` [PATCH 00/24] Phasing out direct usage of asm/mmu.h on ARM Sascha Hauer
  24 siblings, 0 replies; 27+ messages in thread
From: Lucas Stach @ 2015-03-01 13:17 UTC (permalink / raw)
  To: barebox

Move to the common streaming DMA ops in order to get rid of
the direct usage of the ARM MMU functions for the cache
maintenance.

Signed-off-by: Lucas Stach <dev@lynxeye.de>
---
 arch/arm/mach-bcm2835/mbox.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/arch/arm/mach-bcm2835/mbox.c b/arch/arm/mach-bcm2835/mbox.c
index 1a80771..9d69bc8 100644
--- a/arch/arm/mach-bcm2835/mbox.c
+++ b/arch/arm/mach-bcm2835/mbox.c
@@ -7,9 +7,9 @@
  */
 
 #include <asm/io.h>
-#include <asm/mmu.h>
 #include <common.h>
 #include <clock.h>
+#include <dma.h>
 
 #include <mach/mbox.h>
 
@@ -55,7 +55,8 @@ static int bcm2835_mbox_call_raw(u32 chan, struct bcm2835_mbox_hdr *buffer,
 	/* Send the request */
 	val = BCM2835_MBOX_PACK(chan, send);
 	debug("mbox: TX raw: 0x%08x\n", val);
-	dma_flush_range(send, send + buffer->buf_size);
+	dma_sync_single_for_device((unsigned long)send, buffer->buf_size,
+				   DMA_BIDIRECTIONAL);
 	writel(val, &regs->write);
 
 	/* Wait for the response */
@@ -72,7 +73,8 @@ static int bcm2835_mbox_call_raw(u32 chan, struct bcm2835_mbox_hdr *buffer,
 	/* Read the response */
 	val = readl(&regs->read);
 	debug("mbox: RX raw: 0x%08x\n", val);
-	dma_inv_range(send, send + buffer->buf_size);
+	dma_sync_single_for_cpu((unsigned long)send, buffer->buf_size,
+				DMA_BIDIRECTIONAL);
 
 	/* Validate the response */
 	if (BCM2835_MBOX_UNPACK_CHAN(val) != chan) {
-- 
2.1.0


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* [PATCH 24/24] ARM: MMU: unexport cache maintenance functions
  2015-03-01 13:16 [PATCH 00/24] Phasing out direct usage of asm/mmu.h on ARM Lucas Stach
                   ` (22 preceding siblings ...)
  2015-03-01 13:17 ` [PATCH 23/24] ARM: bcm2835: mbox: " Lucas Stach
@ 2015-03-01 13:17 ` Lucas Stach
  2015-03-03  8:37 ` [PATCH 00/24] Phasing out direct usage of asm/mmu.h on ARM Sascha Hauer
  24 siblings, 0 replies; 27+ messages in thread
From: Lucas Stach @ 2015-03-01 13:17 UTC (permalink / raw)
  To: barebox

Those should only be used internally. All users should rather
use the streaming DMA API, which does proper cache maintenance.

Signed-off-by: Lucas Stach <dev@lynxeye.de>
---
 arch/arm/cpu/mmu.c         | 35 ++++++++++++++---------------------
 arch/arm/include/asm/mmu.h | 14 --------------
 2 files changed, 14 insertions(+), 35 deletions(-)

diff --git a/arch/arm/cpu/mmu.c b/arch/arm/cpu/mmu.c
index c4ec72d..7076cb5 100644
--- a/arch/arm/cpu/mmu.c
+++ b/arch/arm/cpu/mmu.c
@@ -159,6 +159,20 @@ static u32 *find_pte(unsigned long adr)
 	return &table[(adr >> PAGE_SHIFT) & 0xff];
 }
 
+static void dma_flush_range(unsigned long start, unsigned long end)
+{
+	if (outer_cache.flush_range)
+		outer_cache.flush_range(start, end);
+	__dma_flush_range(start, end);
+}
+
+static void dma_inv_range(unsigned long start, unsigned long end)
+{
+	if (outer_cache.inv_range)
+		outer_cache.inv_range(start, end);
+	__dma_inv_range(start, end);
+}
+
 void remap_range(void *_start, size_t size, uint32_t flags)
 {
 	unsigned long start = (unsigned long)_start;
@@ -412,27 +426,6 @@ void dma_free_coherent(void *mem, size_t size)
 	free(mem);
 }
 
-void dma_clean_range(unsigned long start, unsigned long end)
-{
-	if (outer_cache.clean_range)
-		outer_cache.clean_range(start, end);
-	__dma_clean_range(start, end);
-}
-
-void dma_flush_range(unsigned long start, unsigned long end)
-{
-	if (outer_cache.flush_range)
-		outer_cache.flush_range(start, end);
-	__dma_flush_range(start, end);
-}
-
-void dma_inv_range(unsigned long start, unsigned long end)
-{
-	if (outer_cache.inv_range)
-		outer_cache.inv_range(start, end);
-	__dma_inv_range(start, end);
-}
-
 void dma_sync_single_for_cpu(unsigned long address, size_t size,
 			     enum dma_data_direction dir)
 {
diff --git a/arch/arm/include/asm/mmu.h b/arch/arm/include/asm/mmu.h
index 01c20bd..97bb0db 100644
--- a/arch/arm/include/asm/mmu.h
+++ b/arch/arm/include/asm/mmu.h
@@ -27,26 +27,12 @@ static inline void setup_dma_coherent(unsigned long offset)
 }
 
 #ifdef CONFIG_MMU
-void dma_clean_range(unsigned long, unsigned long);
-void dma_flush_range(unsigned long, unsigned long);
-void dma_inv_range(unsigned long, unsigned long);
 void remap_range(void *_start, size_t size, uint32_t flags);
 void *map_io_sections(unsigned long physaddr, void *start, size_t size);
 uint32_t mmu_get_pte_cached_flags(void);
 uint32_t mmu_get_pte_uncached_flags(void);
 
 #else
-static inline void dma_clean_range(unsigned long s, unsigned long e)
-{
-}
-
-static inline void dma_flush_range(unsigned long s, unsigned long e)
-{
-}
-
-static inline void dma_inv_range(unsigned long s, unsigned long e)
-{
-}
 
 static inline void remap_range(void *_start, size_t size, uint32_t flags)
 {
-- 
2.1.0


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* Re: [PATCH 11/24] net: cpsw: convert to streaming DMA ops
  2015-03-01 13:17 ` [PATCH 11/24] net: cpsw: " Lucas Stach
@ 2015-03-02  8:37   ` Jan Weitzel
  0 siblings, 0 replies; 27+ messages in thread
From: Jan Weitzel @ 2015-03-02  8:37 UTC (permalink / raw)
  To: Lucas Stach; +Cc: barebox

On Sun, Mar 01, 2015 at 02:17:09PM +0100, Lucas Stach wrote:
> Move to the common streaming DMA ops in order to get rid of
> the direct usage of the ARM MMU functions for the cache
> maintenance.
Tested-by: Jan Weitzel <j.weitzel@phytec.de>
> 
> Signed-off-by: Lucas Stach <dev@lynxeye.de>
> ---
>  drivers/net/cpsw.c | 11 +++++++----
>  1 file changed, 7 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/net/cpsw.c b/drivers/net/cpsw.c
> index 799fac8..3f8ffa0 100644
> --- a/drivers/net/cpsw.c
> +++ b/drivers/net/cpsw.c
> @@ -21,6 +21,7 @@
>  #include <init.h>
>  
>  #include <command.h>
> +#include <dma.h>
>  #include <net.h>
>  #include <malloc.h>
>  #include <net.h>
> @@ -32,7 +33,6 @@
>  #include <of_net.h>
>  #include <of_address.h>
>  #include <xfuncs.h>
> -#include <asm/mmu.h>
>  #include <asm/system.h>
>  #include <linux/err.h>
>  
> @@ -871,9 +871,9 @@ static int cpsw_send(struct eth_device *edev, void *packet, int length)
>  
>  	dev_dbg(&slave->dev, "%s: %i bytes @ 0x%p\n", __func__, length, packet);
>  
> -	dma_flush_range((ulong) packet, (ulong)packet + length);
> -
> +	dma_sync_single_for_device((unsigned long)packet, length, DMA_TO_DEVICE);
>  	ret = cpdma_submit(priv, &priv->tx_chan, packet, length);
> +	dma_sync_single_for_cpu((unsigned long)packet, length, DMA_TO_DEVICE);
>  
>  	return ret;
>  }
> @@ -886,8 +886,11 @@ static int cpsw_recv(struct eth_device *edev)
>  	int len;
>  
>  	while (cpdma_process(priv, &priv->rx_chan, &buffer, &len) >= 0) {
> -		dma_inv_range((ulong)buffer, (ulong)buffer + len);
> +		dma_sync_single_for_cpu((unsigned long)buffer, len,
> +					DMA_FROM_DEVICE);
>  		net_receive(edev, buffer, len);
> +		dma_sync_single_for_device((unsigned long)buffer, len,
> +					   DMA_FROM_DEVICE);
>  		cpdma_submit(priv, &priv->rx_chan, buffer, PKTSIZE);
>  	}
>  
> -- 
> 2.1.0
> 
> 
> _______________________________________________
> barebox mailing list
> barebox@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/barebox

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* Re: [PATCH 00/24] Phasing out direct usage of asm/mmu.h on ARM
  2015-03-01 13:16 [PATCH 00/24] Phasing out direct usage of asm/mmu.h on ARM Lucas Stach
                   ` (23 preceding siblings ...)
  2015-03-01 13:17 ` [PATCH 24/24] ARM: MMU: unexport cache maintenance functions Lucas Stach
@ 2015-03-03  8:37 ` Sascha Hauer
  24 siblings, 0 replies; 27+ messages in thread
From: Sascha Hauer @ 2015-03-03  8:37 UTC (permalink / raw)
  To: Lucas Stach; +Cc: barebox

On Sun, Mar 01, 2015 at 02:16:58PM +0100, Lucas Stach wrote:
> This series introduces to Barebox the streaming DMA ops and implements
> them for the ARM architecture. This will make it a lot easier to
> get common cache maintenance operations for all architectures and in
> turn allows for wider reuse of driver across architectures.
> 
> I've tested this on a Tegra124 which is known to fall over in all sorts
> of funny ways if cache maintenance is broken. No odd behavior spotted.
> 
> The series is bisect-clean and I've compile tested it on some defconfigs,
> but please go wild and TEST. I'll take any complaints.
> 
> Changes since RFT:
> - rebased to current master
> - now compile tested on all ARM defconfigs
> - fixed a few compile errors by reordering stuff in patches
> - A few more words in commit logs

As discussed with Lucas personally:

The series breaks MIPS and NIOS2 support.

On ARM we assume that the address returned from dma_alloc_coherent
can be used as physical DMA address. This is not true on MIPS and NIOS2.
On MIPS and NIOS2 dma_alloc_coherent also returns the DMA address which
differs from the virtual address. This means most users of DMA memory
are broken on MIPS and NIOS2, only the drivers which use the MIPS/NIOS2
variant of dma_alloc_coherent work on these architectures.

The outcome is that we'll implement dma_alloc_coherent() for all
architectures which also returns the physical address:

void *dma_alloc_coherent(size_t len, dma_addr_t *handle);

For all the users which do not handle converting the virtual address
into a DMA address properly we'll add a

#define DMA_ADDRESS_BROKEN	NULL

define which can be passed as the handle pointer. This will allow us to
identify broken users easily and to fix them one by one.

Sascha



-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

end of thread, other threads:[~2015-03-03  8:37 UTC | newest]

Thread overview: 27+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-03-01 13:16 [PATCH 00/24] Phasing out direct usage of asm/mmu.h on ARM Lucas Stach
2015-03-01 13:16 ` [PATCH 01/24] usb: gadget: include common.h in header Lucas Stach
2015-03-01 13:17 ` [PATCH 02/24] ARM: move virt<->phys translation to io.h Lucas Stach
2015-03-01 13:17 ` [PATCH 03/24] dma: add streaming DMA ops Lucas Stach
2015-03-01 13:17 ` [PATCH 04/24] ARM: move DMA alloc functions to dma.h Lucas Stach
2015-03-01 13:17 ` [PATCH 05/24] ARM: implement streaming DMA ops Lucas Stach
2015-03-01 13:17 ` [PATCH 06/24] AHCI: convert to " Lucas Stach
2015-03-01 13:17 ` [PATCH 07/24] MCI: dw-mmc: " Lucas Stach
2015-03-01 13:17 ` [PATCH 08/24] MCI: imx: " Lucas Stach
2015-03-01 13:17 ` [PATCH 09/24] MCI: tegra-sdmmc: " Lucas Stach
2015-03-01 13:17 ` [PATCH 10/24] net: arc-emac: " Lucas Stach
2015-03-01 13:17 ` [PATCH 11/24] net: cpsw: " Lucas Stach
2015-03-02  8:37   ` Jan Weitzel
2015-03-01 13:17 ` [PATCH 12/24] net: at91_ether: " Lucas Stach
2015-03-01 13:17 ` [PATCH 13/24] net: davinci_emac: " Lucas Stach
2015-03-01 13:17 ` [PATCH 14/24] net: designware: " Lucas Stach
2015-03-01 13:17 ` [PATCH 15/24] net: fec: " Lucas Stach
2015-03-01 13:17 ` [PATCH 16/24] net: macb: " Lucas Stach
2015-03-01 13:17 ` [PATCH 17/24] net: orion-gbe: " Lucas Stach
2015-03-01 13:17 ` [PATCH 18/24] net: rtl8169: " Lucas Stach
2015-03-01 13:17 ` [PATCH 19/24] net: xgmac: " Lucas Stach
2015-03-01 13:17 ` [PATCH 20/24] usb: gadget: fsl_udc: " Lucas Stach
2015-03-01 13:17 ` [PATCH 21/24] usb: host: ehci: " Lucas Stach
2015-03-01 13:17 ` [PATCH 22/24] usb: host: ohci: " Lucas Stach
2015-03-01 13:17 ` [PATCH 23/24] ARM: bcm2835: mbox: " Lucas Stach
2015-03-01 13:17 ` [PATCH 24/24] ARM: MMU: unexport cache maintenance functions Lucas Stach
2015-03-03  8:37 ` [PATCH 00/24] Phasing out direct usage of asm/mmu.h on ARM Sascha Hauer

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox