svn commit: r289893 - head/sys/arm/arm

Ian Lepore ian at FreeBSD.org
Sat Oct 24 21:27:10 UTC 2015


Author: ian
Date: Sat Oct 24 21:27:09 2015
New Revision: 289893
URL: https://svnweb.freebsd.org/changeset/base/289893

Log:
  Define a couple macros to access cacheline size/mask in an arch-dependent
  way.  This code should now work for all arm versions v4 thru v7.

Modified:
  head/sys/arm/arm/busdma_machdep-v6.c

Modified: head/sys/arm/arm/busdma_machdep-v6.c
==============================================================================
--- head/sys/arm/arm/busdma_machdep-v6.c	Sat Oct 24 21:25:53 2015	(r289892)
+++ head/sys/arm/arm/busdma_machdep-v6.c	Sat Oct 24 21:27:09 2015	(r289893)
@@ -61,6 +61,14 @@ __FBSDID("$FreeBSD$");
 #include <machine/cpu-v6.h>
 #include <machine/md_var.h>
 
+#if __ARM_ARCH < 6
+#define	BUSDMA_DCACHE_ALIGN	arm_dcache_align
+#define	BUSDMA_DCACHE_MASK	arm_dcache_align_mask
+#else
+#define	BUSDMA_DCACHE_ALIGN	cpuinfo.dcache_line_size
+#define	BUSDMA_DCACHE_MASK	cpuinfo.dcache_line_mask
+#endif
+
 #define	MAX_BPAGES		64
 #define	MAX_DMA_SEGMENTS	4096
 #define	BUS_DMA_EXCL_BOUNCE	BUS_DMA_BUS2
@@ -234,7 +242,7 @@ busdma_init(void *dummy)
 
 	/* Create a cache of buffers in standard (cacheable) memory. */
 	standard_allocator = busdma_bufalloc_create("buffer",
-	    arm_dcache_align,	/* minimum_alignment */
+	    BUSDMA_DCACHE_ALIGN,/* minimum_alignment */
 	    NULL,		/* uma_alloc func */
 	    NULL,		/* uma_free func */
 	    uma_flags);		/* uma_zcreate_flags */
@@ -253,7 +261,7 @@ busdma_init(void *dummy)
 	 * BUS_DMA_COHERENT (and potentially BUS_DMA_NOCACHE) flag.
 	 */
 	coherent_allocator = busdma_bufalloc_create("coherent",
-	    arm_dcache_align,	/* minimum_alignment */
+	    BUSDMA_DCACHE_ALIGN,/* minimum_alignment */
 	    busdma_bufalloc_alloc_uncacheable,
 	    busdma_bufalloc_free_uncacheable,
 	    uma_flags);	/* uma_zcreate_flags */
@@ -1279,9 +1287,9 @@ dma_preread_safe(vm_offset_t va, vm_padd
 	 * as dcache_wb_poc() will do the rounding for us and works
 	 * at cacheline granularity.
 	 */
-	if (va & cpuinfo.dcache_line_mask)
+	if (va & BUSDMA_DCACHE_MASK)
 		dcache_wb_poc(va, pa, 1);
-	if ((va + size) & cpuinfo.dcache_line_mask)
+	if ((va + size) & BUSDMA_DCACHE_MASK)
 		dcache_wb_poc(va + size, pa + size, 1);
 
 	dcache_inv_poc_dma(va, pa, size);


More information about the svn-src-all mailing list