kernel: fix mtk_eth_soc issue when using secondary GMAC on MT7621/MT7622
authorFelix Fietkau <nbd@nbd.name>
Fri, 25 Nov 2022 00:56:29 +0000 (01:56 +0100)
committerFelix Fietkau <nbd@nbd.name>
Fri, 25 Nov 2022 00:56:53 +0000 (01:56 +0100)
The CDMQ ingress special tag flag needs to be set for 7986 even without DSA
untag offload, otherwise tx checksum offload seems to break

Fixes: 9b482ee22f3f ("kernel: add more fixes for mtk_eth_soc")
Signed-off-by: Felix Fietkau <nbd@nbd.name>
target/linux/generic/pending-5.15/732-14-net-ethernet-mtk_eth_soc-drop-generic-vlan-rx-offloa.patch
target/linux/ramips/patches-5.15/700-net-ethernet-mediatek-support-net-labels.patch

index 1a32c02f1db0cf053d4bdfd21e55fc5ee96e0fa0..42f98e6aff57b17f9794c4abe2f887cc726351cf 100644 (file)
@@ -111,7 +111,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        err = phylink_of_phy_connect(mac->phylink, mac->of_node, 0);
        if (err) {
                netdev_err(dev, "%s: could not attach PHY: %d\n", __func__,
        err = phylink_of_phy_connect(mac->phylink, mac->of_node, 0);
        if (err) {
                netdev_err(dev, "%s: could not attach PHY: %d\n", __func__,
-@@ -3215,6 +3160,39 @@ static int mtk_open(struct net_device *d
+@@ -3215,6 +3160,35 @@ static int mtk_open(struct net_device *d
        phylink_start(mac->phylink);
        netif_tx_start_all_queues(dev);
  
        phylink_start(mac->phylink);
        netif_tx_start_all_queues(dev);
  
@@ -141,17 +141,13 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 +              val &= ~MTK_CDMP_STAG_EN;
 +              mtk_w32(eth, val, MTK_CDMP_IG_CTRL);
 +
 +              val &= ~MTK_CDMP_STAG_EN;
 +              mtk_w32(eth, val, MTK_CDMP_IG_CTRL);
 +
-+              val = mtk_r32(eth, MTK_CDMQ_IG_CTRL);
-+              val &= ~MTK_CDMQ_STAG_EN;
-+              mtk_w32(eth, val, MTK_CDMQ_IG_CTRL);
-+
 +              mtk_w32(eth, 0, MTK_CDMP_EG_CTRL);
 +      }
 +
        return 0;
  }
  
 +              mtk_w32(eth, 0, MTK_CDMP_EG_CTRL);
 +      }
 +
        return 0;
  }
  
-@@ -3508,10 +3486,9 @@ static int mtk_hw_init(struct mtk_eth *e
+@@ -3508,10 +3482,9 @@ static int mtk_hw_init(struct mtk_eth *e
        if (!MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
                val = mtk_r32(eth, MTK_CDMP_IG_CTRL);
                mtk_w32(eth, val | MTK_CDMP_STAG_EN, MTK_CDMP_IG_CTRL);
        if (!MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
                val = mtk_r32(eth, MTK_CDMP_IG_CTRL);
                mtk_w32(eth, val | MTK_CDMP_STAG_EN, MTK_CDMP_IG_CTRL);
@@ -164,7 +160,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
  
        /* set interrupt delays based on current Net DIM sample */
        mtk_dim_rx(&eth->rx_dim.work);
  
        /* set interrupt delays based on current Net DIM sample */
        mtk_dim_rx(&eth->rx_dim.work);
-@@ -4132,7 +4109,7 @@ static int mtk_add_mac(struct mtk_eth *e
+@@ -4132,7 +4105,7 @@ static int mtk_add_mac(struct mtk_eth *e
                eth->netdev[id]->hw_features |= NETIF_F_LRO;
  
        eth->netdev[id]->vlan_features = eth->soc->hw_features &
                eth->netdev[id]->hw_features |= NETIF_F_LRO;
  
        eth->netdev[id]->vlan_features = eth->soc->hw_features &
index c447793eaef76543cd67e32f882dc28d86b9ad7e..8e666ec53dc5d5196be6b8ae8ba22a4fa2b9a182 100644 (file)
@@ -14,7 +14,7 @@ Signed-off-by: RenĂ© van Dorst <opensource@vdorst.com>
 
 --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
 +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
 
 --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
 +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-@@ -4021,6 +4021,7 @@ static const struct net_device_ops mtk_n
+@@ -3994,6 +3994,7 @@ static const struct net_device_ops mtk_n
  
  static int mtk_add_mac(struct mtk_eth *eth, struct device_node *np)
  {
  
  static int mtk_add_mac(struct mtk_eth *eth, struct device_node *np)
  {
@@ -22,7 +22,7 @@ Signed-off-by: RenĂ© van Dorst <opensource@vdorst.com>
        const __be32 *_id = of_get_property(np, "reg", NULL);
        phy_interface_t phy_mode;
        struct phylink *phylink;
        const __be32 *_id = of_get_property(np, "reg", NULL);
        phy_interface_t phy_mode;
        struct phylink *phylink;
-@@ -4149,6 +4150,9 @@ static int mtk_add_mac(struct mtk_eth *e
+@@ -4122,6 +4123,9 @@ static int mtk_add_mac(struct mtk_eth *e
                register_netdevice_notifier(&mac->device_notifier);
        }
  
                register_netdevice_notifier(&mac->device_notifier);
        }