PCI-DMA problems

From: Martin Krohn
Date: Thu Dec 18 2003 - 04:33:06 EST


I am working on a non-standard platform and tried to enable
the PCI-Bus for this platform. The PCI bus is connected
via a PCI-V320USC bridge (quicklogic, formerly v-cubed)
to the local bus. The on-board SDRAM is connected to the
bridge and to the CPU.
I used the existing bridge driver from the sh architechture
in kernel 2.4.22. Starting point for all other modification was kernel
2.4.16.

I used the 8139too.c driver (0.9.22) to test, what works.
I already did enable PCI-MEM-, PCI-I/O- and PCI-Configure-Space.
Now to my problem:
When the 8139 is doing a DMA-transfer at reception it is working only for a
few
frames. I enabled debugging and a 'normal' frame looks like this:
01 20 40 00 ff ff ff ff ff ff 00 60 08 57 5a a7 08 06 00 01 08 00 06 04 00
01 00 60 08 57 5a a7 c0 a8
00 1e 00 00 00 00 00 00 c0 a8 00 28 00 28 00 28 00 28 00 28 00 28 00 28 00
28 00 28 00 28 fe c1 ee 4b 00 00
For now I disabled the answer to the arp request, so the same frame is
received again and again.
After some (the number differs from time to time) frames a 'broken' frame
shows up:
01 20 40 00 ff ff ff ff ff ff 00 60 08 57 5a a7 08 06 00 01 08 00 06 04 00
01 00 60 08 57 5a a7 c0 a8
00 1e 00 00 00 00 00 00 c0 a8 00 28 00 28 00 28 00 28 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00
Here some padding bytes are zero. After this frame, the 8139 does not
produce Rx- IRQs anymore.
In the moment, when I pull the cable off the 8139-C is requesting an IRQ.
Also the Rx-Overflow IRQ is still working!
If I try lower burst sizes (RX_DMA_BURST) then I get lesser 'normal' frames.
At first I had problems, when I did not enable the internal V320USC-SDRAM
controller. The 8139-C always
answered with a Master-Abort. (This behavior was reasonable of course).

Now I also tried a es1371 based sound card. The problem here could be
similar.
I am using version 0.31, also taken from 2.4.16. When I playback
a short sound (1 second @ 11025Hz samplerate) it plays correctly for the
first time.
It occours no interrupt, so the card won't stop playing. Finally the driver
waits forever in drain_dac2.


By the way, I did a successfull test with an old 8029 (wich is without
busmastering support.)
Where can I start my search? I must admit I don't have a PCI bus analyser.

Regards,
Martin Krohn.

--
+++ GMX - die erste Adresse für Mail, Message, More +++
Neu: Preissenkung für MMS und FreeMMS! http://www.gmx.net


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/