@@ -130,6 +130,9 @@ static irqreturn_t stmmac_mac_interrupt(int irq, void *dev_id);
130130static irqreturn_t stmmac_safety_interrupt (int irq , void * dev_id );
131131static irqreturn_t stmmac_msi_intr_tx (int irq , void * data );
132132static 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 );
133136static void stmmac_tx_timer_arm (struct stmmac_priv * priv , u32 queue );
134137static void stmmac_flush_tx_descriptors (struct stmmac_priv * priv , int queue );
135138static 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}
73207315EXPORT_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