Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dd019897 authored by Yoshihiro Shimoda's avatar Yoshihiro Shimoda Committed by David S. Miller
Browse files

net: sh_eth: fix incorrect RX length error if R8A7740



This patch fixes an issue that the driver increments the "RX length error"
on every buffer in sh_eth_rx() if the R8A7740.
This patch also adds a description about the Receive Frame Status bits.

Signed-off-by: default avatarYoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent d3b6f614
Loading
Loading
Loading
Loading
+11 −4
Original line number Diff line number Diff line
@@ -1401,16 +1401,23 @@ static int sh_eth_rx(struct net_device *ndev, u32 intr_status)
		desc_status = edmac_to_cpu(mdp, rxdesc->status);
		pkt_len = rxdesc->frame_length;

#if defined(CONFIG_ARCH_R8A7740)
		desc_status >>= 16;
#endif

		if (--boguscnt < 0)
			break;

		if (!(desc_status & RDFEND))
			ndev->stats.rx_length_errors++;

#if defined(CONFIG_ARCH_R8A7740)
		/*
		 * In case of almost all GETHER/ETHERs, the Receive Frame State
		 * (RFS) bits in the Receive Descriptor 0 are from bit 9 to
		 * bit 0. However, in case of the R8A7740's GETHER, the RFS
		 * bits are from bit 25 to bit 16. So, the driver needs right
		 * shifting by 16.
		 */
		desc_status >>= 16;
#endif

		if (desc_status & (RD_RFS1 | RD_RFS2 | RD_RFS3 | RD_RFS4 |
				   RD_RFS5 | RD_RFS6 | RD_RFS10)) {
			ndev->stats.rx_errors++;