From: Zefir Kurtisi <zefir.kurt...@neratec.com> Date: Mon, 22 Aug 2016 15:58:12 +0200
> The current scatter-gather logic in gianfar is flawed, since > it does not consider the eTSEC's RxBD 'Data Length' field is > context depening: for the last fragment it contains the full > frame size, while fragments contain the fragment size, which > equals the value written to register MRBLR. > > This causes data corruption as soon as the hardware starts > to fragment receiving frames. As a result, the size of > fragmented frames is increased by > (nr_frags - 1) * MRBLR > > We first noticed this issue working with DSA, where an ICMP > request sized 1472 bytes causes the scatter-gather logic to > kick in. The full Ethernet frame (1518) gets increased by > DSA (4), GMAC_FCB_LEN (8), and FSL_GIANFAR_DEV_HAS_TIMER > (priv->padding=8) to a total of 1538 octets, which is > fragmented by the hardware and reconstructed by the driver > to a 3074 octet frame. > > This patch fixes the problem by adjusting the size of > the last fragment. > > It was tested by setting MRBLR to different multiples of > 64, proving correct scatter-gather operation on frames > with up to 9000 octets in size. > > Signed-off-by: Zefir Kurtisi <zefir.kurt...@neratec.com> Applied.