From cdc8d4b46f0811292fffc6094acd81e854b5f4a5 Mon Sep 17 00:00:00 2001 From: David Bauer Date: Tue, 1 Dec 2020 18:55:27 +0100 Subject: [PATCH] ipq40xx: revert usage of VLAN S-TAG 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 --- .../net/ethernet/qualcomm/essedma/edma_axi.c | 19 ++++--------- .../ipq40xx/files/drivers/net/phy/ar40xx.c | 27 +++---------------- 2 files changed, 9 insertions(+), 37 deletions(-) diff --git a/target/linux/ipq40xx/files/drivers/net/ethernet/qualcomm/essedma/edma_axi.c b/target/linux/ipq40xx/files/drivers/net/ethernet/qualcomm/essedma/edma_axi.c index 49ee31a1bdf..68718de9f45 100644 --- a/target/linux/ipq40xx/files/drivers/net/ethernet/qualcomm/essedma/edma_axi.c +++ b/target/linux/ipq40xx/files/drivers/net/ethernet/qualcomm/essedma/edma_axi.c @@ -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]); diff --git a/target/linux/ipq40xx/files/drivers/net/phy/ar40xx.c b/target/linux/ipq40xx/files/drivers/net/phy/ar40xx.c index db21547a03d..18ff26affc2 100644 --- a/target/linux/ipq40xx/files/drivers/net/phy/ar40xx.c +++ b/target/linux/ipq40xx/files/drivers/net/phy/ar40xx.c @@ -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); -- 2.30.2