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