ipq40xx: revert usage of VLAN S-TAG
authorDavid Bauer <mail@david-bauer.net>
Tue, 1 Dec 2020 17:55:27 +0000 (18:55 +0100)
committerDavid Bauer <mail@david-bauer.net>
Mon, 14 Dec 2020 00:13:30 +0000 (01:13 +0100)
This reverts the usage of the S-Tag for separating LAN and WAN port on
the embedded switch. Many users complained about not being able to
manage C-Tag addition / removal on the switch as well as degraded
performance.

Fixes: commit 9da2b567605b ("ipq40xx: fix ethernet vlan double tagging")
Signed-off-by: David Bauer <mail@david-bauer.net>
target/linux/ipq40xx/files/drivers/net/ethernet/qualcomm/essedma/edma_axi.c
target/linux/ipq40xx/files/drivers/net/phy/ar40xx.c

index 49ee31a1bdf2e387c6be993d73b307c854d0900e..68718de9f453f2d002952f20079300648ed929fb 100644 (file)
@@ -969,7 +969,7 @@ static int edma_axi_probe(struct platform_device *pdev)
                edma_netdev[i]->max_mtu = 9000;
                edma_netdev[i]->features = NETIF_F_HW_CSUM | NETIF_F_RXCSUM
                                      | NETIF_F_HW_VLAN_CTAG_RX | NETIF_F_SG |
-                                     NETIF_F_TSO | NETIF_F_GRO;
+                                     NETIF_F_TSO | NETIF_F_GRO | NETIF_F_HW_VLAN_CTAG_TX;
                edma_netdev[i]->hw_features = NETIF_F_HW_CSUM | NETIF_F_RXCSUM |
                                NETIF_F_HW_VLAN_CTAG_RX
                                | NETIF_F_SG | NETIF_F_TSO | NETIF_F_GRO;
@@ -978,20 +978,11 @@ static int edma_axi_probe(struct platform_device *pdev)
                edma_netdev[i]->wanted_features = NETIF_F_HW_CSUM | NETIF_F_SG |
                                             NETIF_F_TSO | NETIF_F_GRO;
 
-               if (of_property_read_bool(np, "qcom,single-phy") && edma_cinfo->num_gmac == 1)
-                       edma_netdev[i]->features |= NETIF_F_HW_VLAN_CTAG_TX;
-
 #ifdef CONFIG_RFS_ACCEL
-               edma_netdev[i]->features |=  NETIF_F_NTUPLE;
-               edma_netdev[i]->hw_features |=  NETIF_F_NTUPLE;
-               edma_netdev[i]->vlan_features |= NETIF_F_NTUPLE;
-               edma_netdev[i]->wanted_features |= NETIF_F_NTUPLE;
-               if (of_property_read_bool(np, "qcom,single-phy") && edma_cinfo->num_gmac == 1) {
-                       edma_netdev[i]->features |= NETIF_F_RXHASH;
-                       edma_netdev[i]->hw_features |= NETIF_F_RXHASH;
-                       edma_netdev[i]->vlan_features |= NETIF_F_RXHASH;
-                       edma_netdev[i]->wanted_features |= NETIF_F_RXHASH;
-               }
+               edma_netdev[i]->features |=  NETIF_F_NTUPLE | NETIF_F_RXHASH;
+               edma_netdev[i]->hw_features |=  NETIF_F_NTUPLE | NETIF_F_RXHASH;
+               edma_netdev[i]->vlan_features |= NETIF_F_NTUPLE | NETIF_F_RXHASH;
+               edma_netdev[i]->wanted_features |= NETIF_F_NTUPLE | NETIF_F_RXHASH;
 #endif
                edma_set_ethtool_ops(edma_netdev[i]);
 
index db21547a03dc8d51536af3cf88a682c014a18e08..18ff26affc24daf2846472a705bf95a91db8ec60 100644 (file)
@@ -1200,11 +1200,7 @@ ar40xx_init_port(struct ar40xx_priv *priv, int port)
        ar40xx_rmw(priv, AR40XX_REG_PORT_STATUS(port),
                        AR40XX_PORT_AUTO_LINK_EN, 0);
 
-       /* CPU port is setting headers to limit output ports */
-       if (port == 0)
-               ar40xx_write(priv, AR40XX_REG_PORT_HEADER(port), 0x8);
-       else
-               ar40xx_write(priv, AR40XX_REG_PORT_HEADER(port), 0);
+       ar40xx_write(priv, AR40XX_REG_PORT_HEADER(port), 0);
 
        ar40xx_write(priv, AR40XX_REG_PORT_VLAN0(port), 0);
 
@@ -1247,10 +1243,6 @@ ar40xx_init_globals(struct ar40xx_priv *priv)
        t = (AR40XX_PORT0_FC_THRESH_ON_DFLT << 16) |
              AR40XX_PORT0_FC_THRESH_OFF_DFLT;
        ar40xx_write(priv, AR40XX_REG_PORT_FLOWCTRL_THRESH(0), t);
-
-       /* set service tag to 802.1q */
-       t = ETH_P_8021Q | AR40XX_ESS_SERVICE_TAG_STAG;
-       ar40xx_write(priv, AR40XX_ESS_SERVICE_TAG, t);
 }
 
 static void
@@ -1576,10 +1568,7 @@ ar40xx_setup_port(struct ar40xx_priv *priv, int port, u32 members)
        u32 pvid = priv->vlan_id[priv->pvid[port]];
 
        if (priv->vlan) {
-               if (priv->vlan_tagged & BIT(port))
-                       egress = AR40XX_PORT_VLAN1_OUT_MODE_TAG;
-               else
-                       egress = AR40XX_PORT_VLAN1_OUT_MODE_UNMOD;
+               egress = AR40XX_PORT_VLAN1_OUT_MODE_UNMOD;
 
                ingress = AR40XX_IN_SECURE;
        } else {
@@ -1591,16 +1580,8 @@ ar40xx_setup_port(struct ar40xx_priv *priv, int port, u32 members)
        t |= pvid << AR40XX_PORT_VLAN0_DEF_CVID_S;
        ar40xx_write(priv, AR40XX_REG_PORT_VLAN0(port), t);
 
-       t = egress << AR40XX_PORT_VLAN1_OUT_MODE_S;
-
-       /* set CPU port to core port */
-       if (port == 0)
-               t |= AR40XX_PORT_VLAN1_CORE_PORT;
-
-       if (priv->vlan_tagged & BIT(port))
-               t |= AR40XX_PORT_VLAN1_PORT_VLAN_PROP;
-       else
-               t |= AR40XX_PORT_VLAN1_PORT_TLS_MODE;
+       t = AR40XX_PORT_VLAN1_PORT_VLAN_PROP;
+       t |= egress << AR40XX_PORT_VLAN1_OUT_MODE_S;
 
        ar40xx_write(priv, AR40XX_REG_PORT_VLAN1(port), t);