Subtle PCI weirdness

gregory.menke at gsfc.nasa.gov gregory.menke at gsfc.nasa.gov
Thu Apr 24 16:45:30 UTC 2003


I'm getting very close with the 3com driver, the rx & tx chains work,
the interrupts work (shared with another lanboard), all over multiple
bridges.  I think I'm on the last problem of which I know part and
suspect part.  Its related (I think) to the card busmastering for
packet rx and tx data.

The following is a dump of the first few bytes of packets I receive
thru the 3com board.  The value in parens is the physical address of
the packet buffer itself.

unit 1 rx  pkt (00eea000) ff:ff:ff:ff:00:00:00:00:5a:ab:b6:6b:00:00:00:00:08:00:06:04:00:01
unit 1 rx  pkt (00ee9800) ff:ff:ff:ff:00:00:00:00:5a:ab:b6:6b:00:00:00:00:08:00:06:04:00:00
unit 1 rx  pkt (00ee9000) ff:ff:ff:ff:00:00:00:00:5a:ab:b6:6b:00:00:00:00:08:00:06:04:00:00
unit 1 rx  pkt (00ee8800) ff:ff:ff:ff:00:00:00:00:5a:ab:b6:6b:00:00:00:00:08:00:06:04:00:00
unit 1 rx  pkt (00ee8000) ff:ff:ff:ff:00:00:00:00:5a:ab:b6:6b:00:00:00:00:08:00:06:04:00:00
unit 1 rx  pkt (00ee7800) ff:ff:ff:ff:00:00:00:00:5a:ab:b6:6b:00:00:00:00:08:00:06:04:00:00

This is dumping the very start of the ethernet frame.  As you can see
the first 4 bytes are OK, but the next 4 are all zeros- they should be
ff:ff:00:04- and you can see the pattern repeat after the sender mac
address.  The DPD is making it to the board OK , as it would not be
able to store the rx packet as it is if not.  THe problem is that
every other dword in the packet is left as zeros.  This problem likely
extends to transmits as well.  The following are the arp broadcasts
from our 2 3com units, printed just before being submitted to the
cards.

unit 1 queued  pkt (00e86444) ff:ff:ff:ff:ff:ff:00:04:75:d7:74:ee:08:06:00:01:08:00:06:04:00:01
unit elnk1 tx done
unit 2 queued  pkt (00e7ff44) ff:ff:ff:ff:ff:ff:00:04:75:d7:74:ef:08:06:00:01:08:00:06:04:00:01
unit elnk2 tx done

here you can see the 2 packets which look right and the subsequent
indication that the card downloaded them OK- I have the dnComplete
interrupt enabled in the DPD.  Nevertheless, the card doesn't transmit
anything onto the network.  The card autodetects the network just
fine.

I've tried a variety of tweaks to the pci command register, as well as
messing with the card's dma control bits, but nothing has had any
effect.  The 3com docs indicate the board only does 4 byte dma- though
the card is a 64 bit unit, its plugged into the backplane via a 32 bit
connector.  I suspect this might be related to the problem, but I
don't know what further tests I can apply.

I'm about to try setting up PIO mode to see if that makes any
difference, but I'd appreciate any comments or ideas people might be
able to offer.

Thanks,

Greg Menke




More information about the users mailing list