>>>>> "ralf" == Ralf Baechle <ralf@linux-mips.org> writes: ralf> On Fri, Jan 10, 2003 at 01:37:12PM +0100, Maciej W. Rozycki wrote: >> I can't see any need for flush_cache_l1() and flush_cache_l2(). I'd like >> to remove them. A single flush_cache_all() seems sufficient for our >> needs. Any objections? ralf> The reason for the existance of flush_cache_l1 and flush_cache_l2 is the ralf> Origin. An empty flush_cache_all() is sufficient on the Origin because ralf> it's R10000 processor doesn't suffer from cache aliases. During bootup ralf> we have to flush all caches or the cache coherence logic will send crazy ralf> exceptions at us. For all other occasions just a flush of the primary ralf> caches is sufficient which is why there is flush_cache_l1. ralf> So I think we want to wrap things a bit nicer but basically we have to ralf> keep those cacheops for the sake of the Origin. Humm, I thought that there wasn't origins with R4400 processors :) Anyways, I think that the change is the good direction, at least: - unsigned int flags -> unsigned long flags && under proper #ifdefs and the mips64 port just now should work only in R4400MC & R4400PC (to me knowlegge the most unusual ones), and broke in the R4400SC :( Once talking about caches, why do we _allways_ do the writeback, indeed if they asked us to do a invalidate? Something like that? Later, Juan. Index: arch/mips64/mm/c-r4k.c =================================================================== RCS file: /home/cvs/linux/arch/mips64/mm/c-r4k.c,v retrieving revision 1.1.2.11 diff -u -r1.1.2.11 c-r4k.c --- arch/mips64/mm/c-r4k.c 8 Jan 2003 14:16:31 -0000 1.1.2.11 +++ arch/mips64/mm/c-r4k.c 9 Jan 2003 23:16:41 -0000 @@ -979,7 +979,7 @@ unsigned long end, a; if (size >= scache_size) { - flush_cache_l1(); + flush_cache_all(); return; } @@ -1010,7 +1010,7 @@ a = addr & ~(dc_lsize - 1); end = (addr + size - 1) & ~(dc_lsize - 1); while (1) { - flush_dcache_line(a); /* Hit_Writeback_Inv_D */ + invalidate_dcache_line(a); /* Hit_Invalidate_D */ if (a == end) break; a += dc_lsize; } @@ -1027,14 +1027,14 @@ unsigned long end, a; if (size >= scache_size) { - flush_cache_l1(); + flush_cache_all(); return; } a = addr & ~(sc_lsize - 1); end = (addr + size - 1) & ~(sc_lsize - 1); while (1) { - flush_scache_line(a); /* Hit_Writeback_Inv_SD */ + invalidate_scache_line(a); /* Hit_Invalidate_SD */ if (a == end) break; a += sc_lsize; } -- In theory, practice and theory are the same, but in practice they are different -- Larry McVoy