Subject: Re: esp/fas
To: None <and@genesyslab.com, eeh@netbsd.org>
From: None <eeh@netbsd.org>
List: port-sparc64
Date: 01/30/2001 21:14:59
> In any case, this should not be a fatal condition,
> and you can probably work around it by disablinng
> the streaming cache entirely or using only COHERENT
> mappings.
>
> Altought, looking at the code:
>
There are also:
if (!is->is_sb)
return (0);
Obviously if it prints out that message then the streaming
cache is enabled.
is->is_flush = 0;
This is where it resets the bit that the IOMMU sets when
the flush completes.
> #ifdef DIAGNOSTIC
> if (!is->is_flush) {
> printf("iommu_strbuf_flush: flush timeout %p at %p\n",
> (void *)(u_long)is->is_flush,
> (void *)(u_long)is->is_flushpa); /* panic? */
>
and another one:
Debugger();
So I'd expect this code to fire up debugger right after it gets there
after streaming buffer gets enabled. And this happen after a while.
I havn't find yet a place where that buffer is enabled.
This happens in the bus controller attach routine, specifically
`sbus_attach()' in your case.
I'll try to continue from ddb and see what happens.
> if is->is_flush really is 0x100000000, either the code generation
> is broken, or the value was set between the test and the printf ()
> call. Maybe you should just increase the timeout a bit.
I can compile without optimization, it helped me before with
code generation. Don't understand yet that 'timeout' magic.
Hm. It should work. is_flush is volatile. Could be D$
coherency issues. Try adding a call to `blast_vcache()' just
before the test of `is->is_flush' to see if it fixes the problem
(this is DIAGNOSTIC code, after all.)
Eduardo