At 11:07 AM 2/25/99 +0100, you wrote:
>> Doesn't this mean that most (if not all) IO/DMA device drivers need
>> patching to run on ARMLinux?
>
>No, just map an uncached, unbuffered memmory space for the PCI environment
>and the problem will go away (if it is a cache related issue, that is...)
Unfortunatly life ain't that easy.
With DMA your DMAing into main memory. This wouldn't be too difficult to fix
if the sections being DMA'd into were allocated separatly - we could add some
magical flag to say that it needed to be uncached etc.
Unfortunatly many device drivers allocate a block of memory which is accessed
both by the kernel (and which needs to be fast) and by the device on the bus.
Some locations in the block are used by one and not the other and thus
you dont want to alter the cache/buffering settings.
Normally you find that most drivers consist of things which set stuff up in
shared memory and then 'kick' the other end - either by writing to an IO
register
or by writing some magical flag into a piece of shared memory.
You need to find those places in the code and cause a cache flush at that
point.
Sometimes you need to be careful to flush most of the data and then flush
the magical
flag to get the ordering correct.
Then you need to find whereever reads something back (normally in interrupt
code
which reads the magical flag back) and do a cache flush/invalidate before
the read.
(Unfortunatly I can't do much more work on this at the moment since the
cache in my
EBSA285 seems to be ill....)
Dave
unsubscribe: body of `unsubscribe linux-arm' to [EMAIL PROTECTED]