|  | /***************************************************************************/ | 
|  |  | 
|  | /* | 
|  | *	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 */ | 
|  | /***************************************************************************/ |