Valentin, On 4/22/2010 10:40 PM, Valentin Yakovenkov wrote: > SMSC911x chips have alignment function to allow frame payload data > (which comes after 14-bytes ethernet header) to be aligned at some > boundary when reading it from fifo (usually - 4 bytes boundary). > This is done by inserting fake zeros bytes BEFORE actual frame data when > reading from SMSC's fifo. > This function controlled by RX_CFG register. There are bits that > represents amount of fake bytes to be inserted. > > Linux uses alignment of 4 bytes. Ethernet frame header is 14 bytes long, > so we need to add 2 fake bytes to get payload data aligned at 4-bytes > boundary. > Linux driver does this by adding IP_ALIGNMENT constant (defined at > skb.h) when calculating fifo data length. All network subsystem of Linux > uses this constant too when calculating different offsets. > > But u-boot does not use any packet data alignment, so we don't need to > add anything when calculating fifo data length. > Moreover, driver zeros the RX_CFG register just one line up, so chip > does not insert any fake data at the beginig. So calculated data length > is always bigger by 1 word. > > It seems that at almost every packet read we get an underflow condition > at fifo and possible corruption of data. Especially at continuous > transfers, such as tftp. > > Just after removing this magic addition, I've got tftp transfer speed as > it aught to be at 100Mbps. It was really slow before. > > It seems that fifo underflow occurs only when using byte packing on > 32-bit blackfin bus (may be because of very small delay between reads). > > > > Signed-off-by: Valentin Yakovenkov<yakoven...@niistt.ru> > diff -r 7dc8ff189175 a/drivers/net/smc911x.c > --- a/drivers/net/smc911x.c Mon Mar 29 11:08:55 2010 +0400 > +++ b/drivers/net/smc911x.c Mon Apr 19 10:46:02 2010 +0400 > @@ -220,7 +220,7 @@ > > smc911x_reg_write(dev, RX_CFG, 0); > > - tmplen = (pktlen + 2+ 3) / 4; > + tmplen = (pktlen + 3) / 4; > while (tmplen--) > *data++ = pkt_data_pull(dev, RX_DATA_FIFO); > > -- > WBR, Valentin > CJSC "NII STT", Russia, Smolensk > http://www.niistt.ru > > Applied to net repo.
thanks, Ben _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot