public inbox for linux-m68k@lists.linux-m68k.org
 help / color / mirror / Atom feed
* [PATCH 00/02] m68k: clean up and merge arch dma code
@ 2012-05-04  6:50 gerg
  2012-05-04  6:50 ` [PATCH 1/2] m68knommu: reorganize the no-MMU cache flushing to match m68k gerg
  2012-05-04  6:50 ` [PATCH 2/2] m68k: merge the MMU and non-MMU versions of the arch dma code gerg
  0 siblings, 2 replies; 6+ messages in thread
From: gerg @ 2012-05-04  6:50 UTC (permalink / raw)
  To: linux-m68k, uclinux-dev


m68k: clean up and merge arch dma code

Much of the common m68k architecture dma code is the same for the MMU and
non-MMU cases. With a little cleanup of the m68knommu dma code first we
can then merge the two to end up with a single arch dma.c.

I have only tested a small number of ColdFire platforms so far, and they
all seem to check out as before. There should be no functional change for
MMU m68k systems.

---
 arch/m68k/kernel/dma_mm.c               |  131 -------------------------
 arch/m68k/kernel/dma_no.c               |   75 --------------
 b/arch/m68k/include/asm/cacheflush_no.h |   32 +++++-
 b/arch/m68k/kernel/dma.c                |  165 +++++++++++++++++++++++++++++++-
 4 files changed, 190 insertions(+), 213 deletions(-)

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

* [PATCH 1/2] m68knommu: reorganize the no-MMU cache flushing to match m68k
  2012-05-04  6:50 [PATCH 00/02] m68k: clean up and merge arch dma code gerg
@ 2012-05-04  6:50 ` gerg
  2012-05-20  9:07   ` Geert Uytterhoeven
  2012-05-04  6:50 ` [PATCH 2/2] m68k: merge the MMU and non-MMU versions of the arch dma code gerg
  1 sibling, 1 reply; 6+ messages in thread
From: gerg @ 2012-05-04  6:50 UTC (permalink / raw)
  To: linux-m68k, uclinux-dev; +Cc: Greg Ungerer

From: Greg Ungerer <gerg@uclinux.org>

Introduce cache_push() and cache_clear() functions for the non-MMU m68k
devices. With these in place we can more easily merge some of the common
m68k arch code.

In particular by reorganizing the __flush_caceh_all() code and separating
the cache push and clear functions it becomes trivial to implement the
new cache_push() and cache_clear() functions.

Signed-off-by: Greg Ungerer <gerg@uclinux.org>
---
 arch/m68k/include/asm/cacheflush_no.h |   32 ++++++++++++++++++++++++++++----
 1 files changed, 28 insertions(+), 4 deletions(-)

diff --git a/arch/m68k/include/asm/cacheflush_no.h b/arch/m68k/include/asm/cacheflush_no.h
index cb88aa9..7cafb53 100644
--- a/arch/m68k/include/asm/cacheflush_no.h
+++ b/arch/m68k/include/asm/cacheflush_no.h
@@ -30,11 +30,8 @@
 
 void mcf_cache_push(void);
 
-static inline void __flush_cache_all(void)
+static inline void __clear_cache_all(void)
 {
-#ifdef CACHE_PUSH
-	mcf_cache_push();
-#endif
 #ifdef CACHE_INVALIDATE
 	__asm__ __volatile__ (
 		"movel	%0, %%d0\n\t"
@@ -44,6 +41,14 @@ static inline void __flush_cache_all(void)
 #endif
 }
 
+static inline void __flush_cache_all(void)
+{
+#ifdef CACHE_PUSH
+	mcf_cache_push();
+#endif
+	__clear_cache_all();
+}
+
 /*
  * Some ColdFire parts implement separate instruction and data caches,
  * on those we should just flush the appropriate cache. If we don't need
@@ -76,4 +81,23 @@ static inline void __flush_dcache_all(void)
 	__asm__ __volatile__ ( "nop" );
 #endif
 }
+
+/*
+ * Push cache entries at supplied address. We want to write back any dirty
+ * data and the invalidate the cache lines associated with this address.
+ */
+static inline void cache_push(unsigned long paddr, int len)
+{
+	__flush_cache_all();
+}
+
+/*
+ * Clear cache entries at supplied address (that is don't write back any
+ * dirty data).
+ */
+static inline void cache_clear(unsigned long paddr, int len)
+{
+	__clear_cache_all();
+}
+
 #endif /* _M68KNOMMU_CACHEFLUSH_H */
-- 
1.7.0.4

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

* [PATCH 2/2] m68k: merge the MMU and non-MMU versions of the arch dma code
  2012-05-04  6:50 [PATCH 00/02] m68k: clean up and merge arch dma code gerg
  2012-05-04  6:50 ` [PATCH 1/2] m68knommu: reorganize the no-MMU cache flushing to match m68k gerg
@ 2012-05-04  6:50 ` gerg
  2012-05-20  9:01   ` Geert Uytterhoeven
  1 sibling, 1 reply; 6+ messages in thread
From: gerg @ 2012-05-04  6:50 UTC (permalink / raw)
  To: linux-m68k, uclinux-dev; +Cc: Greg Ungerer

From: Greg Ungerer <gerg@uclinux.org>

The majority of the m68k architecture dma code is the same, so merge the
current separated files dma_no.c and dma_mm.c back into a single dma.c

The main alloc and free routines are a little different, so we keep a
single #ifdef based on CONFIG_MMU for them. All the other support functions
are now identical.

Signed-off-by: Greg Ungerer <gerg@uclinux.org>
---
 arch/m68k/kernel/{dma_mm.c => dma.c} |   35 +++++++++++++++-
 arch/m68k/kernel/dma_no.c            |   75 ----------------------------------
 2 files changed, 34 insertions(+), 76 deletions(-)
 rename arch/m68k/kernel/{dma_mm.c => dma.c} (83%)
 delete mode 100644 arch/m68k/kernel/dma_no.c

diff --git a/arch/m68k/kernel/dma_mm.c b/arch/m68k/kernel/dma.c
similarity index 83%
rename from arch/m68k/kernel/dma_mm.c
rename to arch/m68k/kernel/dma.c
index a3c471b..f6daf6e 100644
--- a/arch/m68k/kernel/dma_mm.c
+++ b/arch/m68k/kernel/dma.c
@@ -16,6 +16,8 @@
 
 #include <asm/pgalloc.h>
 
+#ifdef CONFIG_MMU
+
 void *dma_alloc_coherent(struct device *dev, size_t size,
 			 dma_addr_t *handle, gfp_t flag)
 {
@@ -58,7 +60,6 @@ void *dma_alloc_coherent(struct device *dev, size_t size,
 
 	return addr;
 }
-EXPORT_SYMBOL(dma_alloc_coherent);
 
 void dma_free_coherent(struct device *dev, size_t size,
 		       void *addr, dma_addr_t handle)
@@ -66,6 +67,38 @@ void dma_free_coherent(struct device *dev, size_t size,
 	pr_debug("dma_free_coherent: %p, %x\n", addr, handle);
 	vfree(addr);
 }
+
+#else
+
+#include <asm/cacheflush.h>
+
+void *dma_alloc_coherent(struct device *dev, size_t size,
+			   dma_addr_t *dma_handle, gfp_t gfp)
+{
+	void *ret;
+	/* ignore region specifiers */
+	gfp &= ~(__GFP_DMA | __GFP_HIGHMEM);
+
+	if (dev == NULL || (*dev->dma_mask < 0xffffffff))
+		gfp |= GFP_DMA;
+	ret = (void *)__get_free_pages(gfp, get_order(size));
+
+	if (ret != NULL) {
+		memset(ret, 0, size);
+		*dma_handle = virt_to_phys(ret);
+	}
+	return ret;
+}
+
+void dma_free_coherent(struct device *dev, size_t size,
+			 void *vaddr, dma_addr_t dma_handle)
+{
+	free_pages((unsigned long)vaddr, get_order(size));
+}
+
+#endif /* CONFIG_MMU */
+
+EXPORT_SYMBOL(dma_alloc_coherent);
 EXPORT_SYMBOL(dma_free_coherent);
 
 void dma_sync_single_for_device(struct device *dev, dma_addr_t handle,
diff --git a/arch/m68k/kernel/dma_no.c b/arch/m68k/kernel/dma_no.c
deleted file mode 100644
index f1dc3fc..0000000
--- a/arch/m68k/kernel/dma_no.c
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Dynamic DMA mapping support.
- *
- * We never have any address translations to worry about, so this
- * is just alloc/free.
- */
-
-#include <linux/types.h>
-#include <linux/gfp.h>
-#include <linux/mm.h>
-#include <linux/device.h>
-#include <linux/dma-mapping.h>
-#include <linux/export.h>
-#include <asm/cacheflush.h>
-
-void *dma_alloc_coherent(struct device *dev, size_t size,
-			   dma_addr_t *dma_handle, gfp_t gfp)
-{
-	void *ret;
-	/* ignore region specifiers */
-	gfp &= ~(__GFP_DMA | __GFP_HIGHMEM);
-
-	if (dev == NULL || (*dev->dma_mask < 0xffffffff))
-		gfp |= GFP_DMA;
-	ret = (void *)__get_free_pages(gfp, get_order(size));
-
-	if (ret != NULL) {
-		memset(ret, 0, size);
-		*dma_handle = virt_to_phys(ret);
-	}
-	return ret;
-}
-
-void dma_free_coherent(struct device *dev, size_t size,
-			 void *vaddr, dma_addr_t dma_handle)
-{
-	free_pages((unsigned long)vaddr, get_order(size));
-}
-
-void dma_sync_single_for_device(struct device *dev, dma_addr_t handle,
-				size_t size, enum dma_data_direction dir)
-{
-	switch (dir) {
-	case DMA_TO_DEVICE:
-		flush_dcache_range(handle, size);
-		break;
-	case DMA_FROM_DEVICE:
-		/* Should be clear already */
-		break;
-	default:
-		if (printk_ratelimit())
-			printk("dma_sync_single_for_device: unsupported dir %u\n", dir);
-		break;
-	}
-}
-
-EXPORT_SYMBOL(dma_sync_single_for_device);
-dma_addr_t dma_map_single(struct device *dev, void *addr, size_t size,
-			  enum dma_data_direction dir)
-{
-	dma_addr_t handle = virt_to_phys(addr);
-	flush_dcache_range(handle, size);
-	return handle;
-}
-EXPORT_SYMBOL(dma_map_single);
-
-dma_addr_t dma_map_page(struct device *dev, struct page *page,
-			unsigned long offset, size_t size,
-			enum dma_data_direction dir)
-{
-	dma_addr_t handle = page_to_phys(page) + offset;
-	dma_sync_single_for_device(dev, handle, size, dir);
-	return handle;
-}
-EXPORT_SYMBOL(dma_map_page);
-- 
1.7.0.4

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

* Re: [PATCH 2/2] m68k: merge the MMU and non-MMU versions of the arch dma code
  2012-05-04  6:50 ` [PATCH 2/2] m68k: merge the MMU and non-MMU versions of the arch dma code gerg
@ 2012-05-20  9:01   ` Geert Uytterhoeven
  0 siblings, 0 replies; 6+ messages in thread
From: Geert Uytterhoeven @ 2012-05-20  9:01 UTC (permalink / raw)
  To: gerg; +Cc: linux-m68k, uclinux-dev, Greg Ungerer

On Fri, May 4, 2012 at 8:50 AM,  <gerg@snapgear.com> wrote:
> From: Greg Ungerer <gerg@uclinux.org>
>
> The majority of the m68k architecture dma code is the same, so merge the
> current separated files dma_no.c and dma_mm.c back into a single dma.c
>
> The main alloc and free routines are a little different, so we keep a
> single #ifdef based on CONFIG_MMU for them. All the other support functions
> are now identical.
>
> Signed-off-by: Greg Ungerer <gerg@uclinux.org>

Acked-by: Geert Uytterhoeven <geert@linux-m68k.org>

Gr{oetje,eeting}s,

                        Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds
_______________________________________________
uClinux-dev mailing list
uClinux-dev@uclinux.org
http://mailman.uclinux.org/mailman/listinfo/uclinux-dev
This message was resent by uclinux-dev@uclinux.org
To unsubscribe see:
http://mailman.uclinux.org/mailman/options/uclinux-dev

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

* Re: [PATCH 1/2] m68knommu: reorganize the no-MMU cache flushing to match m68k
  2012-05-04  6:50 ` [PATCH 1/2] m68knommu: reorganize the no-MMU cache flushing to match m68k gerg
@ 2012-05-20  9:07   ` Geert Uytterhoeven
  2012-05-20 11:12     ` Greg Ungerer
  0 siblings, 1 reply; 6+ messages in thread
From: Geert Uytterhoeven @ 2012-05-20  9:07 UTC (permalink / raw)
  To: gerg; +Cc: linux-m68k, uclinux-dev, Greg Ungerer

On Fri, May 4, 2012 at 8:50 AM,  <gerg@snapgear.com> wrote:
> In particular by reorganizing the __flush_caceh_all() code and separating

__flush_cache_all()

Gr{oetje,eeting}s,

                        Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds

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

* Re: [PATCH 1/2] m68knommu: reorganize the no-MMU cache flushing to match m68k
  2012-05-20  9:07   ` Geert Uytterhoeven
@ 2012-05-20 11:12     ` Greg Ungerer
  0 siblings, 0 replies; 6+ messages in thread
From: Greg Ungerer @ 2012-05-20 11:12 UTC (permalink / raw)
  To: Geert Uytterhoeven; +Cc: linux-m68k, uclinux-dev, Greg Ungerer

Hi Geert,

On 05/20/2012 07:07 PM, Geert Uytterhoeven wrote:
> On Fri, May 4, 2012 at 8:50 AM,<gerg@snapgear.com>  wrote:
>> In particular by reorganizing the __flush_caceh_all() code and separating
>
> __flush_cache_all()

I'll fix that up.

Thanks for all the other acks too, I'll update the patches.

Regards
Greg


------------------------------------------------------------------------
Greg Ungerer  --  Principal Engineer        EMAIL:     gerg@snapgear.com
SnapGear Group, McAfee                      PHONE:       +61 7 3435 2888
8 Gardner Close,                            FAX:         +61 7 3891 3630
Milton, QLD, 4064, Australia                WEB: http://www.SnapGear.com

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

end of thread, other threads:[~2012-05-20 11:13 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-05-04  6:50 [PATCH 00/02] m68k: clean up and merge arch dma code gerg
2012-05-04  6:50 ` [PATCH 1/2] m68knommu: reorganize the no-MMU cache flushing to match m68k gerg
2012-05-20  9:07   ` Geert Uytterhoeven
2012-05-20 11:12     ` Greg Ungerer
2012-05-04  6:50 ` [PATCH 2/2] m68k: merge the MMU and non-MMU versions of the arch dma code gerg
2012-05-20  9:01   ` Geert Uytterhoeven

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