* [PATCH] net: fec: fix potential issue to avoid fec interrupt lost and crc error
@ 2014-02-20 10:14 Fugang Duan
2014-02-20 14:12 ` Frank.Li
2014-02-20 18:16 ` David Miller
0 siblings, 2 replies; 3+ messages in thread
From: Fugang Duan @ 2014-02-20 10:14 UTC (permalink / raw)
To: b20596, davem; +Cc: netdev
The current flow: Set TX BD ready, and then set "INT" and "PINS" bit to
enable tx interrupt generation and crc checksum.
There has potential issue like as:
CPU fec uDMA
Set tx ready bit
uDMA start the BD transmission
Set "INT" bit
Set "PINS" bit
...
Above situation cause fec tx interrupt lost and fec MAC don't do
CRC checksum. The patch fix the potential issue.
Signed-off-by: Fugang Duan <B38611@freescale.com>
---
drivers/net/ethernet/freescale/fec_main.c | 13 +++++++------
1 files changed, 7 insertions(+), 6 deletions(-)
diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c
index 45b8b22..739608b 100644
--- a/drivers/net/ethernet/freescale/fec_main.c
+++ b/drivers/net/ethernet/freescale/fec_main.c
@@ -390,12 +390,6 @@ fec_enet_start_xmit(struct sk_buff *skb, struct net_device *ndev)
netdev_err(ndev, "Tx DMA memory map failed\n");
return NETDEV_TX_OK;
}
- /* Send it on its way. Tell FEC it's ready, interrupt when done,
- * it's the last BD of the frame, and to put the CRC on the end.
- */
- status |= (BD_ENET_TX_READY | BD_ENET_TX_INTR
- | BD_ENET_TX_LAST | BD_ENET_TX_TC);
- bdp->cbd_sc = status;
if (fep->bufdesc_ex) {
@@ -417,6 +411,13 @@ fec_enet_start_xmit(struct sk_buff *skb, struct net_device *ndev)
}
}
+ /* Send it on its way. Tell FEC it's ready, interrupt when done,
+ * it's the last BD of the frame, and to put the CRC on the end.
+ */
+ status |= (BD_ENET_TX_READY | BD_ENET_TX_INTR
+ | BD_ENET_TX_LAST | BD_ENET_TX_TC);
+ bdp->cbd_sc = status;
+
bdp_pre = fec_enet_get_prevdesc(bdp, fep);
if ((id_entry->driver_data & FEC_QUIRK_ERR006358) &&
!(bdp_pre->cbd_sc & BD_ENET_TX_READY)) {
--
1.7.2.rc3
^ permalink raw reply related [flat|nested] 3+ messages in thread* RE: [PATCH] net: fec: fix potential issue to avoid fec interrupt lost and crc error
2014-02-20 10:14 [PATCH] net: fec: fix potential issue to avoid fec interrupt lost and crc error Fugang Duan
@ 2014-02-20 14:12 ` Frank.Li
2014-02-20 18:16 ` David Miller
1 sibling, 0 replies; 3+ messages in thread
From: Frank.Li @ 2014-02-20 14:12 UTC (permalink / raw)
To: fugang.duan@freescale.com, davem@davemloft.net; +Cc: netdev@vger.kernel.org
> -----Original Message-----
> From: Fugang Duan [mailto:B38611@freescale.com]
> Sent: Thursday, February 20, 2014 4:15 AM
> To: Li Frank-B20596; davem@davemloft.net
> Cc: netdev@vger.kernel.org
> Subject: [PATCH] net: fec: fix potential issue to avoid fec interrupt lost
> and crc error
>
> The current flow: Set TX BD ready, and then set "INT" and "PINS" bit to
> enable tx interrupt generation and crc checksum.
>
> There has potential issue like as:
> CPU fec uDMA
> Set tx ready bit
> uDMA start the BD transmission
> Set "INT" bit
> Set "PINS" bit
> ...
>
> Above situation cause fec tx interrupt lost and fec MAC don't do CRC checksum.
> The patch fix the potential issue.
>
> Signed-off-by: Fugang Duan <B38611@freescale.com>
Acked-by: Frank Li <Frank.li@freescale.com>
> ---
> drivers/net/ethernet/freescale/fec_main.c | 13 +++++++------
> 1 files changed, 7 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/net/ethernet/freescale/fec_main.c
> b/drivers/net/ethernet/freescale/fec_main.c
> index 45b8b22..739608b 100644
> --- a/drivers/net/ethernet/freescale/fec_main.c
> +++ b/drivers/net/ethernet/freescale/fec_main.c
> @@ -390,12 +390,6 @@ fec_enet_start_xmit(struct sk_buff *skb, struct
> net_device *ndev)
> netdev_err(ndev, "Tx DMA memory map failed\n");
> return NETDEV_TX_OK;
> }
> - /* Send it on its way. Tell FEC it's ready, interrupt when done,
> - * it's the last BD of the frame, and to put the CRC on the end.
> - */
> - status |= (BD_ENET_TX_READY | BD_ENET_TX_INTR
> - | BD_ENET_TX_LAST | BD_ENET_TX_TC);
> - bdp->cbd_sc = status;
>
> if (fep->bufdesc_ex) {
>
> @@ -417,6 +411,13 @@ fec_enet_start_xmit(struct sk_buff *skb, struct
> net_device *ndev)
> }
> }
>
> + /* Send it on its way. Tell FEC it's ready, interrupt when done,
> + * it's the last BD of the frame, and to put the CRC on the end.
> + */
> + status |= (BD_ENET_TX_READY | BD_ENET_TX_INTR
> + | BD_ENET_TX_LAST | BD_ENET_TX_TC);
> + bdp->cbd_sc = status;
> +
> bdp_pre = fec_enet_get_prevdesc(bdp, fep);
> if ((id_entry->driver_data & FEC_QUIRK_ERR006358) &&
> !(bdp_pre->cbd_sc & BD_ENET_TX_READY)) {
> --
> 1.7.2.rc3
>
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [PATCH] net: fec: fix potential issue to avoid fec interrupt lost and crc error
2014-02-20 10:14 [PATCH] net: fec: fix potential issue to avoid fec interrupt lost and crc error Fugang Duan
2014-02-20 14:12 ` Frank.Li
@ 2014-02-20 18:16 ` David Miller
1 sibling, 0 replies; 3+ messages in thread
From: David Miller @ 2014-02-20 18:16 UTC (permalink / raw)
To: B38611; +Cc: b20596, netdev
From: Fugang Duan <B38611@freescale.com>
Date: Thu, 20 Feb 2014 18:14:39 +0800
> The current flow: Set TX BD ready, and then set "INT" and "PINS" bit to
> enable tx interrupt generation and crc checksum.
>
> There has potential issue like as:
> CPU fec uDMA
> Set tx ready bit
> uDMA start the BD transmission
> Set "INT" bit
> Set "PINS" bit
> ...
>
> Above situation cause fec tx interrupt lost and fec MAC don't do
> CRC checksum. The patch fix the potential issue.
>
> Signed-off-by: Fugang Duan <B38611@freescale.com>
Applied, thank you.
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2014-02-20 18:16 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-02-20 10:14 [PATCH] net: fec: fix potential issue to avoid fec interrupt lost and crc error Fugang Duan
2014-02-20 14:12 ` Frank.Li
2014-02-20 18:16 ` David Miller
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox