Skip to content

Commit 19a592e

Browse files
rohangt07gregkh
authored andcommitted
net: stmmac: Set CIC bit only for TX queues with COE
[ Upstream commit b1eded5 ] 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> Signed-off-by: Sasha Levin <sashal@kernel.org>
1 parent 5a4ec12 commit 19a592e

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)