| // SPDX-License-Identifier: GPL-2.0 | 
 | /***************************************************************************/ | 
 |  | 
 | /* | 
 |  *	cache.c -- general ColdFire Cache maintenance code | 
 |  * | 
 |  *	Copyright (C) 2010, Greg Ungerer (gerg@snapgear.com) | 
 |  */ | 
 |  | 
 | /***************************************************************************/ | 
 |  | 
 | #include <linux/kernel.h> | 
 | #include <asm/coldfire.h> | 
 | #include <asm/mcfsim.h> | 
 |  | 
 | /***************************************************************************/ | 
 | #ifdef CACHE_PUSH | 
 | /***************************************************************************/ | 
 |  | 
 | /* | 
 |  *	Use cpushl to push all dirty cache lines back to memory. | 
 |  *	Older versions of GAS don't seem to know how to generate the | 
 |  *	ColdFire cpushl instruction... Oh well, bit stuff it for now. | 
 |  */ | 
 |  | 
 | void mcf_cache_push(void) | 
 | { | 
 | 	__asm__ __volatile__ ( | 
 | 		"clrl	%%d0\n\t" | 
 | 		"1:\n\t" | 
 | 		"movel	%%d0,%%a0\n\t" | 
 | 		"2:\n\t" | 
 | 		".word	0xf468\n\t" | 
 | 		"addl	%0,%%a0\n\t" | 
 | 		"cmpl	%1,%%a0\n\t" | 
 | 		"blt	2b\n\t" | 
 | 		"addql	#1,%%d0\n\t" | 
 | 		"cmpil	%2,%%d0\n\t" | 
 | 		"bne	1b\n\t" | 
 | 		: /* No output */ | 
 | 		: "i" (CACHE_LINE_SIZE), | 
 | 		  "i" (DCACHE_SIZE / CACHE_WAYS), | 
 | 		  "i" (CACHE_WAYS) | 
 | 		: "d0", "a0" ); | 
 | } | 
 |  | 
 | /***************************************************************************/ | 
 | #endif /* CACHE_PUSH */ | 
 | /***************************************************************************/ |