summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Kicinski <kuba@kernel.org>2026-08-17 11:24:33 -0700
committerJakub Kicinski <kuba@kernel.org>2026-08-17 11:24:33 -0700
commitd70d9b91c8b06ec5e3ae085bc4c4f2118215bb37 (patch)
tree7780807fe69611b016f9ad7682372a2bb82789db
parent97a1e65df7eef996693d604ae90aaf2530578912 (diff)
parentc11c497af866ccd11c109de0833b2cd89cddd075 (diff)
downloadlinux-next-d70d9b91c8b06ec5e3ae085bc4c4f2118215bb37.tar.gz
linux-next-d70d9b91c8b06ec5e3ae085bc4c4f2118215bb37.zip
Merge branch 'net-stmmac-dma-address-handling-fixes'
Alex Elder says: ==================== net: stmmac: DMA address handling fixes ==================== Link: https://patch.msgid.link/20260812163832.271742-1-elder@riscstar.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
-rw-r--r--drivers/net/ethernet/stmicro/stmmac/chain_mode.c9
-rw-r--r--drivers/net/ethernet/stmicro/stmmac/ring_mode.c15
2 files changed, 13 insertions, 11 deletions
diff --git a/drivers/net/ethernet/stmicro/stmmac/chain_mode.c b/drivers/net/ethernet/stmicro/stmmac/chain_mode.c
index fc04a23342cf..66025e2509e9 100644
--- a/drivers/net/ethernet/stmicro/stmmac/chain_mode.c
+++ b/drivers/net/ethernet/stmicro/stmmac/chain_mode.c
@@ -20,9 +20,10 @@ static int jumbo_frm(struct stmmac_tx_queue *tx_q, struct sk_buff *skb,
unsigned int nopaged_len = skb_headlen(skb);
struct stmmac_priv *priv = tx_q->priv_data;
unsigned int entry = tx_q->cur_tx;
- unsigned int bmax, buf_len, des2;
+ unsigned int bmax, buf_len;
unsigned int i = 1, len;
struct dma_desc *desc;
+ dma_addr_t des2;
desc = tx_q->dma_tx + entry;
@@ -36,7 +37,7 @@ static int jumbo_frm(struct stmmac_tx_queue *tx_q, struct sk_buff *skb,
des2 = dma_map_single(priv->device, skb->data,
buf_len, DMA_TO_DEVICE);
- desc->des2 = cpu_to_le32(des2);
+ desc->des2 = cpu_to_le32(lower_32_bits(des2));
if (dma_mapping_error(priv->device, des2))
return -1;
tx_q->tx_skbuff_dma[entry].buf = des2;
@@ -54,7 +55,7 @@ static int jumbo_frm(struct stmmac_tx_queue *tx_q, struct sk_buff *skb,
des2 = dma_map_single(priv->device,
(skb->data + bmax * i),
bmax, DMA_TO_DEVICE);
- desc->des2 = cpu_to_le32(des2);
+ desc->des2 = cpu_to_le32(lower_32_bits(des2));
if (dma_mapping_error(priv->device, des2))
return -1;
tx_q->tx_skbuff_dma[entry].buf = des2;
@@ -67,7 +68,7 @@ static int jumbo_frm(struct stmmac_tx_queue *tx_q, struct sk_buff *skb,
des2 = dma_map_single(priv->device,
(skb->data + bmax * i), len,
DMA_TO_DEVICE);
- desc->des2 = cpu_to_le32(des2);
+ desc->des2 = cpu_to_le32(lower_32_bits(des2));
if (dma_mapping_error(priv->device, des2))
return -1;
tx_q->tx_skbuff_dma[entry].buf = des2;
diff --git a/drivers/net/ethernet/stmicro/stmmac/ring_mode.c b/drivers/net/ethernet/stmicro/stmmac/ring_mode.c
index 78fc6aa5bbe9..f7949419eb9f 100644
--- a/drivers/net/ethernet/stmicro/stmmac/ring_mode.c
+++ b/drivers/net/ethernet/stmicro/stmmac/ring_mode.c
@@ -20,8 +20,9 @@ static int jumbo_frm(struct stmmac_tx_queue *tx_q, struct sk_buff *skb,
unsigned int nopaged_len = skb_headlen(skb);
struct stmmac_priv *priv = tx_q->priv_data;
unsigned int entry = tx_q->cur_tx;
- unsigned int bmax, len, des2;
+ unsigned int bmax, len;
struct dma_desc *desc;
+ dma_addr_t des2;
if (priv->extend_desc)
desc = (struct dma_desc *)(tx_q->dma_etx + entry);
@@ -39,7 +40,7 @@ static int jumbo_frm(struct stmmac_tx_queue *tx_q, struct sk_buff *skb,
des2 = dma_map_single(priv->device, skb->data, bmax,
DMA_TO_DEVICE);
- desc->des2 = cpu_to_le32(des2);
+ desc->des2 = cpu_to_le32(lower_32_bits(des2));
if (dma_mapping_error(priv->device, des2))
return -1;
@@ -47,7 +48,7 @@ static int jumbo_frm(struct stmmac_tx_queue *tx_q, struct sk_buff *skb,
tx_q->tx_skbuff_dma[entry].len = bmax;
tx_q->tx_skbuff_dma[entry].is_jumbo = true;
- desc->des3 = cpu_to_le32(des2 + BUF_SIZE_4KiB);
+ desc->des3 = cpu_to_le32(lower_32_bits(des2) + BUF_SIZE_4KiB);
stmmac_prepare_tx_desc(priv, desc, 1, bmax, csum,
STMMAC_RING_MODE, 0, false, skb->len);
tx_q->tx_skbuff[entry] = NULL;
@@ -60,27 +61,27 @@ static int jumbo_frm(struct stmmac_tx_queue *tx_q, struct sk_buff *skb,
des2 = dma_map_single(priv->device, skb->data + bmax, len,
DMA_TO_DEVICE);
- desc->des2 = cpu_to_le32(des2);
+ desc->des2 = cpu_to_le32(lower_32_bits(des2));
if (dma_mapping_error(priv->device, des2))
return -1;
tx_q->tx_skbuff_dma[entry].buf = des2;
tx_q->tx_skbuff_dma[entry].len = len;
tx_q->tx_skbuff_dma[entry].is_jumbo = true;
- desc->des3 = cpu_to_le32(des2 + BUF_SIZE_4KiB);
+ desc->des3 = cpu_to_le32(lower_32_bits(des2) + BUF_SIZE_4KiB);
stmmac_prepare_tx_desc(priv, desc, 0, len, csum,
STMMAC_RING_MODE, 1, !skb_is_nonlinear(skb),
skb->len);
} else {
des2 = dma_map_single(priv->device, skb->data,
nopaged_len, DMA_TO_DEVICE);
- desc->des2 = cpu_to_le32(des2);
+ desc->des2 = cpu_to_le32(lower_32_bits(des2));
if (dma_mapping_error(priv->device, des2))
return -1;
tx_q->tx_skbuff_dma[entry].buf = des2;
tx_q->tx_skbuff_dma[entry].len = nopaged_len;
tx_q->tx_skbuff_dma[entry].is_jumbo = true;
- desc->des3 = cpu_to_le32(des2 + BUF_SIZE_4KiB);
+ desc->des3 = cpu_to_le32(lower_32_bits(des2) + BUF_SIZE_4KiB);
stmmac_prepare_tx_desc(priv, desc, 1, nopaged_len, csum,
STMMAC_RING_MODE, 0, !skb_is_nonlinear(skb),
skb->len);