kernel: backport phylink changes from mainline Linux
[openwrt/staging/jow.git] / target / linux / generic / pending-6.1 / 732-01-net-ethernet-mtk_eth_soc-work-around-issue-with-send.patch
index c0a5a93a456302334ba5cd9d80f3fd25c02b5c4c..a1cc109050e1df8ed24a52e1989b978a986063a4 100644 (file)
@@ -16,7 +16,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 
 --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
 +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-@@ -1469,12 +1469,28 @@ static void mtk_wake_queue(struct mtk_et
+@@ -1562,12 +1562,28 @@ static void mtk_wake_queue(struct mtk_et
        }
  }
  
@@ -45,11 +45,11 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        bool gso = false;
        int tx_num;
  
-@@ -1496,6 +1512,18 @@ static netdev_tx_t mtk_start_xmit(struct
+@@ -1589,6 +1605,18 @@ static netdev_tx_t mtk_start_xmit(struct
                return NETDEV_TX_BUSY;
        }
  
-+      if (!MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2) &&
++      if (mtk_is_netsys_v1(eth) &&
 +          skb_is_gso(skb) && mtk_skb_has_small_frag(skb)) {
 +              segs = skb_gso_segment(skb, dev->features & ~NETIF_F_ALL_TSO);
 +              if (IS_ERR(segs))
@@ -64,14 +64,14 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        /* TSO: fill MSS info in tcp checksum field */
        if (skb_is_gso(skb)) {
                if (skb_cow_head(skb, 0)) {
-@@ -1511,8 +1539,14 @@ static netdev_tx_t mtk_start_xmit(struct
+@@ -1604,8 +1632,14 @@ static netdev_tx_t mtk_start_xmit(struct
                }
        }
  
 -      if (mtk_tx_map(skb, dev, tx_num, ring, gso) < 0)
 -              goto drop;
 +      skb_list_walk_safe(skb, skb, next) {
-+              if ((!MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2) &&
++              if ((mtk_is_netsys_v1(eth) &&
 +                   mtk_skb_has_small_frag(skb) && skb_linearize(skb)) ||
 +                  mtk_tx_map(skb, dev, tx_num, ring, gso) < 0) {
 +                              stats->tx_dropped++;
@@ -83,7 +83,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
                netif_tx_stop_all_queues(dev);
 --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
 +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
-@@ -258,7 +258,7 @@
+@@ -268,7 +268,7 @@
  #define MTK_CHK_DDONE_EN      BIT(28)
  #define MTK_DMAD_WR_WDONE     BIT(26)
  #define MTK_WCOMP_EN          BIT(24)