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