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