Skip to content

Commit b1eded5

Browse files
rohangt07kuba-moo
authored andcommitted
net: stmmac: Set CIC bit only for TX queues with COE
Currently, in the AF_XDP transmit paths, the CIC bit of TX Desc3 is set for all packets. Setting this bit for packets transmitting through queues that don't support checksum offloading causes the TX DMA to get stuck after transmitting some packets. This patch ensures the CIC bit of TX Desc3 is set only if the TX queue supports checksum offloading. Fixes: 132c32e ("net: stmmac: Add TX via XDP zero-copy socket") Signed-off-by: Rohan G Thomas <rohan.g.thomas@altera.com> Reviewed-by: Matthew Gerlach <matthew.gerlach@altera.com> Link: https://patch.msgid.link/20250825-xgmac-minor-fixes-v3-3-c225fe4444c0@altera.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
1 parent 42ef11b commit b1eded5

File tree

1 file changed

+4
-2
lines changed

1 file changed

+4
-2
lines changed

drivers/net/ethernet/stmicro/stmmac/stmmac_main.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2584,6 +2584,7 @@ static bool stmmac_xdp_xmit_zc(struct stmmac_priv *priv, u32 queue, u32 budget)
25842584
struct netdev_queue *nq = netdev_get_tx_queue(priv->dev, queue);
25852585
struct stmmac_tx_queue *tx_q = &priv->dma_conf.tx_queue[queue];
25862586
struct stmmac_txq_stats *txq_stats = &priv->xstats.txq_stats[queue];
2587+
bool csum = !priv->plat->tx_queues_cfg[queue].coe_unsupported;
25872588
struct xsk_buff_pool *pool = tx_q->xsk_pool;
25882589
unsigned int entry = tx_q->cur_tx;
25892590
struct dma_desc *tx_desc = NULL;
@@ -2671,7 +2672,7 @@ static bool stmmac_xdp_xmit_zc(struct stmmac_priv *priv, u32 queue, u32 budget)
26712672
}
26722673

26732674
stmmac_prepare_tx_desc(priv, tx_desc, 1, xdp_desc.len,
2674-
true, priv->mode, true, true,
2675+
csum, priv->mode, true, true,
26752676
xdp_desc.len);
26762677

26772678
stmmac_enable_dma_transmission(priv, priv->ioaddr, queue);
@@ -4983,6 +4984,7 @@ static int stmmac_xdp_xmit_xdpf(struct stmmac_priv *priv, int queue,
49834984
{
49844985
struct stmmac_txq_stats *txq_stats = &priv->xstats.txq_stats[queue];
49854986
struct stmmac_tx_queue *tx_q = &priv->dma_conf.tx_queue[queue];
4987+
bool csum = !priv->plat->tx_queues_cfg[queue].coe_unsupported;
49864988
unsigned int entry = tx_q->cur_tx;
49874989
struct dma_desc *tx_desc;
49884990
dma_addr_t dma_addr;
@@ -5034,7 +5036,7 @@ static int stmmac_xdp_xmit_xdpf(struct stmmac_priv *priv, int queue,
50345036
stmmac_set_desc_addr(priv, tx_desc, dma_addr);
50355037

50365038
stmmac_prepare_tx_desc(priv, tx_desc, 1, xdpf->len,
5037-
true, priv->mode, true, true,
5039+
csum, priv->mode, true, true,
50385040
xdpf->len);
50395041

50405042
tx_q->tx_count_frames++;

0 commit comments

Comments
 (0)