Thread (18 messages) 18 messages, 4 authors, 2002-07-16

Re: mips32_flush_cache routine corrupts CP0_STATUS with gcc-2.96

From: Maciej W. Rozycki <hidden>
Date: 2002-07-11 11:19:00

On Thu, 11 Jul 2002, Gleb O. Raiko wrote:
quoted
But that code belongs in the R30xx specific cache routines, not in the MIPS32 cache
routines.
I don't wonder if other IDT CPUs also require this, including those that
conform MIPS32.
 Well, for r3k it may seem somewhat justified as cache flushing requires
cache isolation.  But the IDT manual for their whole family of processors
claims the D-cache can function as an I-cache (when swapped; doesn't
apply when not, obviously) and cache flushing can run from KSEG0.

 See "IDT MIPS Microprocessor Family Software Reference Manual", chapter 5
"Cache Management", section "Invalidation":

 "To invalidate the cache in the R30xx:
[...]
 The invalidate routine is normally executed with its instructions
cacheable.  This sounds like a lot of trouble; but in fact shouldnt
require any extra steps to run cached. An invalidation routine in uncached
space will run 4-10 times slower."

That's right as the IsC bit only isolates the D-cache (either the real one
or the I-cache, when swapped) and not the I-cache, so no need to waste
cycles running uncached as the I-cache works normally. 
Basically, requirement of uncached run makes hadrware logic much simpler
and allows  to save silicon a bit.
 Why?  I see no dependency.  What's the problem with interleaving cache
fills and invalidations?

-- 
+  Maciej W. Rozycki, Technical University of Gdansk, Poland   +
+--------------------------------------------------------------+
+        e-mail: macro@ds2.pg.gda.pl, PGP key available        +
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help