Skip to content

Commit f9ec572

Browse files
Ansuelkuba-moo
authored andcommitted
net: ethernet: stmicro: stmmac: move queue reset to dedicated functions
Move queue reset to dedicated functions. This aside from a simple cleanup is also required to allocate a dma conf without resetting the tx queue while the device is temporarily detached as now the reset is not part of the dma init function and can be done later in the code flow. Signed-off-by: Christian Marangi <[email protected]> Signed-off-by: Jakub Kicinski <[email protected]>
1 parent aa24649 commit f9ec572

File tree

1 file changed

+31
-28
lines changed

1 file changed

+31
-28
lines changed

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

Lines changed: 31 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,9 @@ static irqreturn_t stmmac_mac_interrupt(int irq, void *dev_id);
130130
static irqreturn_t stmmac_safety_interrupt(int irq, void *dev_id);
131131
static irqreturn_t stmmac_msi_intr_tx(int irq, void *data);
132132
static irqreturn_t stmmac_msi_intr_rx(int irq, void *data);
133+
static void stmmac_reset_rx_queue(struct stmmac_priv *priv, u32 queue);
134+
static void stmmac_reset_tx_queue(struct stmmac_priv *priv, u32 queue);
135+
static void stmmac_reset_queues_param(struct stmmac_priv *priv);
133136
static void stmmac_tx_timer_arm(struct stmmac_priv *priv, u32 queue);
134137
static void stmmac_flush_tx_descriptors(struct stmmac_priv *priv, int queue);
135138
static void stmmac_set_dma_operation_mode(struct stmmac_priv *priv, u32 txmode,
@@ -1639,9 +1642,6 @@ static int __init_dma_rx_desc_rings(struct stmmac_priv *priv, u32 queue, gfp_t f
16391642
return -ENOMEM;
16401643
}
16411644

1642-
rx_q->cur_rx = 0;
1643-
rx_q->dirty_rx = 0;
1644-
16451645
/* Setup the chained descriptor addresses */
16461646
if (priv->mode == STMMAC_CHAIN_MODE) {
16471647
if (priv->extend_desc)
@@ -1744,12 +1744,6 @@ static int __init_dma_tx_desc_rings(struct stmmac_priv *priv, u32 queue)
17441744
tx_q->tx_skbuff[i] = NULL;
17451745
}
17461746

1747-
tx_q->dirty_tx = 0;
1748-
tx_q->cur_tx = 0;
1749-
tx_q->mss = 0;
1750-
1751-
netdev_tx_reset_queue(netdev_get_tx_queue(priv->dev, queue));
1752-
17531747
return 0;
17541748
}
17551749

@@ -2635,10 +2629,7 @@ static void stmmac_tx_err(struct stmmac_priv *priv, u32 chan)
26352629
stmmac_stop_tx_dma(priv, chan);
26362630
dma_free_tx_skbufs(priv, chan);
26372631
stmmac_clear_tx_descriptors(priv, chan);
2638-
tx_q->dirty_tx = 0;
2639-
tx_q->cur_tx = 0;
2640-
tx_q->mss = 0;
2641-
netdev_tx_reset_queue(netdev_get_tx_queue(priv->dev, chan));
2632+
stmmac_reset_tx_queue(priv, chan);
26422633
stmmac_init_tx_chan(priv, priv->ioaddr, priv->plat->dma_cfg,
26432634
tx_q->dma_tx_phy, chan);
26442635
stmmac_start_tx_dma(priv, chan);
@@ -3705,6 +3696,8 @@ static int stmmac_open(struct net_device *dev)
37053696
goto init_error;
37063697
}
37073698

3699+
stmmac_reset_queues_param(priv);
3700+
37083701
ret = stmmac_hw_setup(dev, true);
37093702
if (ret < 0) {
37103703
netdev_err(priv->dev, "%s: Hw setup failed\n", __func__);
@@ -6331,6 +6324,7 @@ void stmmac_enable_rx_queue(struct stmmac_priv *priv, u32 queue)
63316324
return;
63326325
}
63336326

6327+
stmmac_reset_rx_queue(priv, queue);
63346328
stmmac_clear_rx_descriptors(priv, queue);
63356329

63366330
stmmac_init_rx_chan(priv, priv->ioaddr, priv->plat->dma_cfg,
@@ -6392,6 +6386,7 @@ void stmmac_enable_tx_queue(struct stmmac_priv *priv, u32 queue)
63926386
return;
63936387
}
63946388

6389+
stmmac_reset_tx_queue(priv, queue);
63956390
stmmac_clear_tx_descriptors(priv, queue);
63966391

63976392
stmmac_init_tx_chan(priv, priv->ioaddr, priv->plat->dma_cfg,
@@ -7319,6 +7314,25 @@ int stmmac_suspend(struct device *dev)
73197314
}
73207315
EXPORT_SYMBOL_GPL(stmmac_suspend);
73217316

7317+
static void stmmac_reset_rx_queue(struct stmmac_priv *priv, u32 queue)
7318+
{
7319+
struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];
7320+
7321+
rx_q->cur_rx = 0;
7322+
rx_q->dirty_rx = 0;
7323+
}
7324+
7325+
static void stmmac_reset_tx_queue(struct stmmac_priv *priv, u32 queue)
7326+
{
7327+
struct stmmac_tx_queue *tx_q = &priv->tx_queue[queue];
7328+
7329+
tx_q->cur_tx = 0;
7330+
tx_q->dirty_tx = 0;
7331+
tx_q->mss = 0;
7332+
7333+
netdev_tx_reset_queue(netdev_get_tx_queue(priv->dev, queue));
7334+
}
7335+
73227336
/**
73237337
* stmmac_reset_queues_param - reset queue parameters
73247338
* @priv: device pointer
@@ -7329,22 +7343,11 @@ static void stmmac_reset_queues_param(struct stmmac_priv *priv)
73297343
u32 tx_cnt = priv->plat->tx_queues_to_use;
73307344
u32 queue;
73317345

7332-
for (queue = 0; queue < rx_cnt; queue++) {
7333-
struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];
7334-
7335-
rx_q->cur_rx = 0;
7336-
rx_q->dirty_rx = 0;
7337-
}
7338-
7339-
for (queue = 0; queue < tx_cnt; queue++) {
7340-
struct stmmac_tx_queue *tx_q = &priv->tx_queue[queue];
7346+
for (queue = 0; queue < rx_cnt; queue++)
7347+
stmmac_reset_rx_queue(priv, queue);
73417348

7342-
tx_q->cur_tx = 0;
7343-
tx_q->dirty_tx = 0;
7344-
tx_q->mss = 0;
7345-
7346-
netdev_tx_reset_queue(netdev_get_tx_queue(priv->dev, queue));
7347-
}
7349+
for (queue = 0; queue < tx_cnt; queue++)
7350+
stmmac_reset_tx_queue(priv, queue);
73487351
}
73497352

73507353
/**

0 commit comments

Comments
 (0)