1 /***************************************************************************/
2 
3 /*
4  *	cache.c -- general ColdFire Cache maintenance code
5  *
6  *	Copyright (C) 2010, Greg Ungerer (gerg@snapgear.com)
7  */
8 
9 /***************************************************************************/
10 
11 #include <linux/kernel.h>
12 #include <asm/coldfire.h>
13 #include <asm/mcfsim.h>
14 
15 /***************************************************************************/
16 #ifdef CACHE_PUSH
17 /***************************************************************************/
18 
19 /*
20  *	Use cpushl to push all dirty cache lines back to memory.
21  *	Older versions of GAS don't seem to know how to generate the
22  *	ColdFire cpushl instruction... Oh well, bit stuff it for now.
23  */
24 
mcf_cache_push(void)25 void mcf_cache_push(void)
26 {
27 	__asm__ __volatile__ (
28 		"clrl	%%d0\n\t"
29 		"1:\n\t"
30 		"movel	%%d0,%%a0\n\t"
31 		"2:\n\t"
32 		".word	0xf468\n\t"
33 		"addl	%0,%%a0\n\t"
34 		"cmpl	%1,%%a0\n\t"
35 		"blt	2b\n\t"
36 		"addql	#1,%%d0\n\t"
37 		"cmpil	%2,%%d0\n\t"
38 		"bne	1b\n\t"
39 		: /* No output */
40 		: "i" (CACHE_LINE_SIZE),
41 		  "i" (DCACHE_SIZE / CACHE_WAYS),
42 		  "i" (CACHE_WAYS)
43 		: "d0", "a0" );
44 }
45 
46 /***************************************************************************/
47 #endif /* CACHE_PUSH */
48 /***************************************************************************/
49