[U-Boot] DEC21140 driver && netconsole && new target.

Scott Nicholas scott.nicholas at scottn.us
Wed Nov 24 20:34:09 CET 2010


Hello,
  I have a board which uses dec21140-like ethernet, non-pci. In
Linksys' GPL release is old u-boot (seems 1.1.4). I had same problem
with 2010.09, in that when I enable netconsole, I saw each putc/puts
twice!

I read dec2114x datasheet in detail, and firstly, wonder if anyone
else has tested this driver with netconsole. I made many changes to
mine to ensure MIPS cache coherency, but here are my findings for
those interested to maybe one day find in the mailing list archive..

the TX/RX descriptors can be rings or chains. the driver seems to
setup chains and use the End of Ring bit as well.  Thus, in the
net_send routine, the chipset should send buffer1, see buffer2size=0,
and start again at ring base. If TX ring has only 1 entry, it see's
the same descriptor again, and sends the packet twice.

Since the chipset makes use of next descriptor if buffer2 size is 0, I
made use of buffer2 itself. Then with buffer1size=0, it will only use
buffer2.  This is labeled "next" currently in the descriptor struct.

So that, inside the net_send routine, you would set
next = cpu_to_le32(phys_to_bus((u32)packet));
instead of buf. then des1 can be set as:
des1 = cpu_to_le32(TD_LS | TD_FS | (length << 11));

This is currently good for 1 tx descriptor and u-boots small packets
which never use >1, and certainly fixes a lot.

Also, my board is the Linksys T-Mobile branded WRTU54G-TM, uses
ADM8668 chipset for those curious, but this is from DEC21140
datasheet. Please inform me if this is not the case for whichever
target uses it.


More information about the U-Boot mailing list