1/***************************************************************************/ 2 3/* 4 * cache.c -- general ColdFire Cache maintenance code 5 * 6 * Copyright (C) 2010, Greg Ungerer (gerg@snapgear.com) 7 */ 8 9/***************************************************************************/ 10 11#include <linux/kernel.h> 12#include <asm/coldfire.h> 13#include <asm/mcfsim.h> 14 15/***************************************************************************/ 16#ifdef CACHE_PUSH 17/***************************************************************************/ 18 19/* 20 * Use cpushl to push all dirty cache lines back to memory. 21 * Older versions of GAS don't seem to know how to generate the 22 * ColdFire cpushl instruction... Oh well, bit stuff it for now. 23 */ 24 25void mcf_cache_push(void) 26{ 27 __asm__ __volatile__ ( 28 "clrl %%d0\n\t" 29 "1:\n\t" 30 "movel %%d0,%%a0\n\t" 31 "2:\n\t" 32 ".word 0xf468\n\t" 33 "addl %0,%%a0\n\t" 34 "cmpl %1,%%a0\n\t" 35 "blt 2b\n\t" 36 "addql #1,%%d0\n\t" 37 "cmpil %2,%%d0\n\t" 38 "bne 1b\n\t" 39 : /* No output */ 40 : "i" (CACHE_LINE_SIZE), 41 "i" (DCACHE_SIZE / CACHE_WAYS), 42 "i" (CACHE_WAYS) 43 : "d0", "a0" ); 44} 45 46/***************************************************************************/ 47#endif /* CACHE_PUSH */ 48/***************************************************************************/ 49