forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
1.3 KiB
49 lines
1.3 KiB
// SPDX-License-Identifier: GPL-2.0 |
|
/***************************************************************************/ |
|
|
|
/* |
|
* cache.c -- general ColdFire Cache maintenance code |
|
* |
|
* Copyright (C) 2010, Greg Ungerer ([email protected]) |
|
*/ |
|
|
|
/***************************************************************************/ |
|
|
|
#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 */ |
|
/***************************************************************************/
|
|
|