/* * arch/sh/mm/cache-sh2.c * * Copyright (C) 2002 Paul Mundt * * Released under the terms of the GNU GPL v2.0. */ #include #include #include #include #include #include #include void __flush_wback_region(void *start, int size) { unsigned long v; unsigned long begin, end; begin = (unsigned long)start & ~(L1_CACHE_BYTES-1); end = ((unsigned long)start + size + L1_CACHE_BYTES-1) & ~(L1_CACHE_BYTES-1); for (v = begin; v < end; v+=L1_CACHE_BYTES) { /* FIXME cache purge */ ctrl_outl((v & 0x1ffffc00), (v & 0x00000ff0) | 0x00000008); } } void __flush_purge_region(void *start, int size) { unsigned long v; unsigned long begin, end; begin = (unsigned long)start & ~(L1_CACHE_BYTES-1); end = ((unsigned long)start + size + L1_CACHE_BYTES-1) & ~(L1_CACHE_BYTES-1); for (v = begin; v < end; v+=L1_CACHE_BYTES) { ctrl_outl((v & 0x1ffffc00), (v & 0x00000ff0) | 0x00000008); } } void __flush_invalidate_region(void *start, int size) { unsigned long v; unsigned long begin, end; begin = (unsigned long)start & ~(L1_CACHE_BYTES-1); end = ((unsigned long)start + size + L1_CACHE_BYTES-1) & ~(L1_CACHE_BYTES-1); for (v = begin; v < end; v+=L1_CACHE_BYTES) { ctrl_outl((v & 0x1ffffc00), (v & 0x00000ff0) | 0x00000008); } }