/* START: Virtual Address (U0, P1, or P3) SIZE: Size of the region.  */
static void sh3__flush_purge_region(void *start, int size)
/* START: Virtual Address (U0, P1, or P3) SIZE: Size of the region.  */
static void sh3__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) {
		unsigned long data, addr;
		data = (v & 0xfffffc00);
		addr = CACHE_OC_ADDRESS_ARRAY |
			(v & current_cpu_data.dcache.entry_mask) | SH_CACHE_ASSOC;
		ctrl_outl(data, addr);
	}
}