50 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| // 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 */
 | |
| /***************************************************************************/
 |