@@ -572,7 +572,7 @@ static bool ftgmac100_rx_packet(struct ftgmac100 *priv, int *processed)
572
572
(* processed )++ ;
573
573
return true;
574
574
575
- drop :
575
+ drop :
576
576
/* Clean rxdes0 (which resets own bit) */
577
577
rxdes -> rxdes0 = cpu_to_le32 (status & priv -> rxdes0_edorr_mask );
578
578
priv -> rx_pointer = ftgmac100_next_rx_pointer (priv , pointer );
@@ -656,6 +656,11 @@ static bool ftgmac100_tx_complete_packet(struct ftgmac100 *priv)
656
656
ftgmac100_free_tx_packet (priv , pointer , skb , txdes , ctl_stat );
657
657
txdes -> txdes0 = cpu_to_le32 (ctl_stat & priv -> txdes0_edotr_mask );
658
658
659
+ /* Ensure the descriptor config is visible before setting the tx
660
+ * pointer.
661
+ */
662
+ smp_wmb ();
663
+
659
664
priv -> tx_clean_pointer = ftgmac100_next_tx_pointer (priv , pointer );
660
665
661
666
return true;
@@ -809,6 +814,11 @@ static netdev_tx_t ftgmac100_hard_start_xmit(struct sk_buff *skb,
809
814
dma_wmb ();
810
815
first -> txdes0 = cpu_to_le32 (f_ctl_stat );
811
816
817
+ /* Ensure the descriptor config is visible before setting the tx
818
+ * pointer.
819
+ */
820
+ smp_wmb ();
821
+
812
822
/* Update next TX pointer */
813
823
priv -> tx_pointer = pointer ;
814
824
@@ -829,7 +839,7 @@ static netdev_tx_t ftgmac100_hard_start_xmit(struct sk_buff *skb,
829
839
830
840
return NETDEV_TX_OK ;
831
841
832
- dma_err :
842
+ dma_err :
833
843
if (net_ratelimit ())
834
844
netdev_err (netdev , "map tx fragment failed\n" );
835
845
@@ -851,7 +861,7 @@ static netdev_tx_t ftgmac100_hard_start_xmit(struct sk_buff *skb,
851
861
* last fragment, so we know ftgmac100_free_tx_packet()
852
862
* hasn't freed the skb yet.
853
863
*/
854
- drop :
864
+ drop :
855
865
/* Drop the packet */
856
866
dev_kfree_skb_any (skb );
857
867
netdev -> stats .tx_dropped ++ ;
@@ -1344,7 +1354,7 @@ static void ftgmac100_reset(struct ftgmac100 *priv)
1344
1354
ftgmac100_init_all (priv , true);
1345
1355
1346
1356
netdev_dbg (netdev , "Reset done !\n" );
1347
- bail :
1357
+ bail :
1348
1358
if (priv -> mii_bus )
1349
1359
mutex_unlock (& priv -> mii_bus -> mdio_lock );
1350
1360
if (netdev -> phydev )
@@ -1543,15 +1553,15 @@ static int ftgmac100_open(struct net_device *netdev)
1543
1553
1544
1554
return 0 ;
1545
1555
1546
- err_ncsi :
1556
+ err_ncsi :
1547
1557
napi_disable (& priv -> napi );
1548
1558
netif_stop_queue (netdev );
1549
- err_alloc :
1559
+ err_alloc :
1550
1560
ftgmac100_free_buffers (priv );
1551
1561
free_irq (netdev -> irq , netdev );
1552
- err_irq :
1562
+ err_irq :
1553
1563
netif_napi_del (& priv -> napi );
1554
- err_hw :
1564
+ err_hw :
1555
1565
iowrite32 (0 , priv -> base + FTGMAC100_OFFSET_IER );
1556
1566
ftgmac100_free_rings (priv );
1557
1567
return err ;
0 commit comments