Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
cache.c
Go to the documentation of this file.
1 /***************************************************************************/
2 
3 /*
4  * cache.c -- general ColdFire Cache maintenance code
5  *
6  * Copyright (C) 2010, Greg Ungerer ([email protected])
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 
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 /***************************************************************************/