path: root/net
diff options
authorFrank Li <Frank.Li@freescale.com>2013-07-25 14:05:53 +0800
committerDavid S. Miller <davem@davemloft.net>2013-07-27 20:14:48 -0700
commit031916568a1aa2ef1809f86d26f0bcfa215ff5c0 (patch)
treecd6081f93a38a1eb924896ed77b53188e405bbe9 /net
parentc2534384233647a8702eca291199b94ffedc12d3 (diff)
net: fec: workaround stop tx during errata ERR006358
If the ready bit in the transmit buffer descriptor (TxBD[R]) is previously detected as not set during a prior frame transmission, then the ENET_TDAR[TDAR] bit is cleared at a later time, even if additional TxBDs were added to the ring and the ENET_TDAR[TDAR] bit is set. This results in frames not being transmitted until there is a 0-to-1 transition on ENET_TDAR[TDAR]. Workarounds: code can use the transmit frame interrupt flag (ENET_EIR[TXF]) as a method to detect whether the ENET has completed transmission and the ENET_TDAR[TDAR] has been cleared. If ENET_TDAR[TDAR] is detected as cleared when packets are queued and waiting for transmit, then a write to the TDAR bit will restart TxBD processing. This case main happen when loading is light. A ethernet package may not send out utile next package put into tx queue. How to test: while [ true ] do ping <IP> -s 10000 -w 4 ping <IP> -s 6000 -w 2 ping <IP> -s 4000 -w 2 ping <IP> -s 10000 -w 2 done You will see below result in overnight test. 6008 bytes from seq=1 ttl=128 time=0.722 ms 4008 bytes from seq=0 ttl=128 time=1001.008 ms 4008 bytes from seq=1 ttl=128 time=1.010 ms 10008 bytes from seq=0 ttl=128 time=0.896 ms After apply this patch, >1000ms delay disappear. Signed-off-by: Frank Li <Frank.Li@freescale.com> Acked-by: Fugang Duan <B38611@freescale.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
0 files changed, 0 insertions, 0 deletions