Subject: Re: Etherexpress works but Very Very Slow-New Good Clue!
To: None <mark@causality.com>
From: Dave McConnell <davem@eastcoast.co.za>
List: port-arm32
Date: 11/08/1999 18:20:49
Hi There

The last I posted, I'd figured the fxp (etherexpress) driver was showing
symptoms of lack of cache sync....(i.e. I disabled the data cacheing and it
suddenly worked).

Anyway, checking out the driver itself seemed to indicate (IMHO) that the
"bus_dmamap_sync" was in fact getting called where necessary.

Then I checked out the "_bus_dmamap_sync(t, map, offset, len, ops)" in
"arm32/arm32/bus_dma.c" and noticed that nothing gets done for the
BUS_DMASYNC_POSTREAD and BUS_DMASYNC_POSTWRITE cases.
I.O.W, the whole _bus_dmamap_sync function lives inside this "if"

if (ops & (BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE))
........

so I changed it to "if (1)" (i.e. to always do whatever it does....)

and now the FXP driver works just fine with all the caching enabled.

The only problem is I'm not exactly sure why this worked.

It would seem the implementation of _bus_dmamap_sync for ARM32 is not quite
correct??

Specifically: What processing should be done POSTREAD/POSTWRITE?

Who is "looking after" that particular piece of code (bus dma stuff for
arm)?

Should I do an "official" bug report?

Thanks for the help that I got so far.

Cheers

David