]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
net: stmmac: add helper to get size of a transmit descriptor
authorRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Sat, 14 Mar 2026 09:43:21 +0000 (09:43 +0000)
committerJakub Kicinski <kuba@kernel.org>
Wed, 18 Mar 2026 03:32:09 +0000 (20:32 -0700)
Add and use a helper to get the size of the hardware transmit
descriptor.

Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Link: https://patch.msgid.link/E1w1LWj-0000000DGSp-0lhO@rmk-PC.armlinux.org.uk
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c

index 419ac4cac94e0cdf0e162733d3661739846fe7ff..ff4f844476bf62c6489e727ea4ab0ea6bab14934 100644 (file)
@@ -362,6 +362,17 @@ static inline u32 stmmac_tx_avail(struct stmmac_priv *priv, u32 queue)
                          priv->dma_conf.dma_tx_size);
 }
 
+static size_t stmmac_get_tx_desc_size(struct stmmac_priv *priv,
+                                     struct stmmac_tx_queue *tx_q)
+{
+       if (priv->extend_desc)
+               return sizeof(struct dma_extended_desc);
+       else if (tx_q->tbs & STMMAC_TBS_AVAIL)
+               return sizeof(struct dma_edesc);
+       else
+               return sizeof(struct dma_desc);
+}
+
 static struct dma_desc *stmmac_get_tx_desc(struct stmmac_priv *priv,
                                           struct stmmac_tx_queue *tx_q,
                                           unsigned int index)
@@ -1501,14 +1512,8 @@ static void stmmac_display_tx_rings(struct stmmac_priv *priv,
 
                pr_info("\tTX Queue %d rings\n", queue);
 
-               if (priv->extend_desc)
-                       desc_size = sizeof(struct dma_extended_desc);
-               else if (tx_q->tbs & STMMAC_TBS_AVAIL)
-                       desc_size = sizeof(struct dma_edesc);
-               else
-                       desc_size = sizeof(struct dma_desc);
-
                head_tx = stmmac_get_tx_desc(priv, tx_q, 0);
+               desc_size = stmmac_get_tx_desc_size(priv, tx_q);
 
                stmmac_display_ring(priv, head_tx, dma_conf->dma_tx_size, false,
                                    tx_q->dma_tx_phy, desc_size);
@@ -2186,17 +2191,14 @@ static void __free_dma_tx_desc_resources(struct stmmac_priv *priv,
        dma_free_tx_skbufs(priv, dma_conf, queue);
 
        if (priv->extend_desc) {
-               size = sizeof(struct dma_extended_desc);
                addr = tx_q->dma_etx;
        } else if (tx_q->tbs & STMMAC_TBS_AVAIL) {
-               size = sizeof(struct dma_edesc);
                addr = tx_q->dma_entx;
        } else {
-               size = sizeof(struct dma_desc);
                addr = tx_q->dma_tx;
        }
 
-       size *= dma_conf->dma_tx_size;
+       size = stmmac_get_tx_desc_size(priv, tx_q) * dma_conf->dma_tx_size;
 
        dma_free_coherent(priv->device, size, addr, tx_q->dma_tx_phy);
 
@@ -2358,14 +2360,7 @@ static int __alloc_dma_tx_desc_resources(struct stmmac_priv *priv,
        if (!tx_q->tx_skbuff)
                return -ENOMEM;
 
-       if (priv->extend_desc)
-               size = sizeof(struct dma_extended_desc);
-       else if (tx_q->tbs & STMMAC_TBS_AVAIL)
-               size = sizeof(struct dma_edesc);
-       else
-               size = sizeof(struct dma_desc);
-
-       size *= dma_conf->dma_tx_size;
+       size = stmmac_get_tx_desc_size(priv, tx_q) * dma_conf->dma_tx_size;
 
        addr = dma_alloc_coherent(priv->device, size,
                                  &tx_q->dma_tx_phy, GFP_KERNEL);
@@ -4357,12 +4352,7 @@ static void stmmac_flush_tx_descriptors(struct stmmac_priv *priv, int queue)
        struct stmmac_tx_queue *tx_q = &priv->dma_conf.tx_queue[queue];
        int desc_size;
 
-       if (likely(priv->extend_desc))
-               desc_size = sizeof(struct dma_extended_desc);
-       else if (tx_q->tbs & STMMAC_TBS_AVAIL)
-               desc_size = sizeof(struct dma_edesc);
-       else
-               desc_size = sizeof(struct dma_desc);
+       desc_size = stmmac_get_tx_desc_size(priv, tx_q);
 
        /* The own bit must be the latest setting done when prepare the
         * descriptor and then barrier is needed to make sure that