Skip to content

Commit a179aad

Browse files
Mattias Barthelkuba-moo
authored andcommitted
net: fec: ERR007885 Workaround for conventional TX
Activate TX hang workaround also in fec_enet_txq_submit_skb() when TSO is not enabled. Errata: ERR007885 Symptoms: NETDEV WATCHDOG: eth0 (fec): transmit queue 0 timed out commit 37d6017 ("net: fec: Workaround for imx6sx enet tx hang when enable three queues") There is a TDAR race condition for mutliQ when the software sets TDAR and the UDMA clears TDAR simultaneously or in a small window (2-4 cycles). This will cause the udma_tx and udma_tx_arbiter state machines to hang. So, the Workaround is checking TDAR status four time, if TDAR cleared by hardware and then write TDAR, otherwise don't set TDAR. Fixes: 53bb20d ("net: fec: add variable reg_desc_active to speed things up") Signed-off-by: Mattias Barthel <mattias.barthel@atlascopco.com> Reviewed-by: Andrew Lunn <andrew@lunn.ch> Link: https://patch.msgid.link/20250429090826.3101258-1-mattiasbarthel@gmail.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
1 parent 2d52e2e commit a179aad

File tree

1 file changed

+6
-1
lines changed

1 file changed

+6
-1
lines changed

drivers/net/ethernet/freescale/fec_main.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -714,7 +714,12 @@ static int fec_enet_txq_submit_skb(struct fec_enet_priv_tx_q *txq,
714714
txq->bd.cur = bdp;
715715

716716
/* Trigger transmission start */
717-
writel(0, txq->bd.reg_desc_active);
717+
if (!(fep->quirks & FEC_QUIRK_ERR007885) ||
718+
!readl(txq->bd.reg_desc_active) ||
719+
!readl(txq->bd.reg_desc_active) ||
720+
!readl(txq->bd.reg_desc_active) ||
721+
!readl(txq->bd.reg_desc_active))
722+
writel(0, txq->bd.reg_desc_active);
718723

719724
return 0;
720725
}

0 commit comments

Comments
 (0)