OSDN Git Service

net: dsa: sja1105: stop using priv->vlan_aware
authorVladimir Oltean <vladimir.oltean@nxp.com>
Wed, 22 Sep 2021 18:36:55 +0000 (21:36 +0300)
committerDavid S. Miller <davem@davemloft.net>
Thu, 23 Sep 2021 11:53:59 +0000 (12:53 +0100)
Now that the sja1105 driver is finally sane enough again to stop having
a ternary VLAN awareness state, we can remove priv->vlan_aware and query
DSA for the ds->vlan_filtering value (for SJA1105, VLAN filtering is a
global property).

Also drop the paranoid checking that DSA calls ->port_vlan_filtering
multiple times without the VLAN awareness state changing. It doesn't,
the same check is present inside dsa_port_vlan_filtering too.

Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/dsa/sja1105/sja1105.h
drivers/net/dsa/sja1105/sja1105_main.c
drivers/net/dsa/sja1105/sja1105_vl.c

index 6595348..618c8d6 100644 (file)
@@ -226,7 +226,6 @@ struct sja1105_private {
        bool rgmii_tx_delay[SJA1105_MAX_NUM_PORTS];
        phy_interface_t phy_mode[SJA1105_MAX_NUM_PORTS];
        bool fixed_link[SJA1105_MAX_NUM_PORTS];
-       bool vlan_aware;
        unsigned long ucast_egress_floods;
        unsigned long bcast_egress_floods;
        const struct sja1105_info *info;
index 80f7109..741e965 100644 (file)
@@ -1780,6 +1780,7 @@ static int sja1105_fdb_del(struct dsa_switch *ds, int port,
 static int sja1105_fdb_dump(struct dsa_switch *ds, int port,
                            dsa_fdb_dump_cb_t *cb, void *data)
 {
+       struct dsa_port *dp = dsa_to_port(ds, port);
        struct sja1105_private *priv = ds->priv;
        struct device *dev = ds->dev;
        int i;
@@ -1816,7 +1817,7 @@ static int sja1105_fdb_dump(struct dsa_switch *ds, int port,
                u64_to_ether_addr(l2_lookup.macaddr, macaddr);
 
                /* We need to hide the dsa_8021q VLANs from the user. */
-               if (!priv->vlan_aware)
+               if (!dsa_port_is_vlan_filtering(dp))
                        l2_lookup.vlanid = 0;
                rc = cb(macaddr, l2_lookup.vlanid, l2_lookup.lockeds, data);
                if (rc)
@@ -2309,11 +2310,6 @@ int sja1105_vlan_filtering(struct dsa_switch *ds, int port, bool enabled,
                tpid2 = ETH_P_SJA1105;
        }
 
-       if (priv->vlan_aware == enabled)
-               return 0;
-
-       priv->vlan_aware = enabled;
-
        table = &priv->static_config.tables[BLK_IDX_GENERAL_PARAMS];
        general_params = table->entries;
        /* EtherType used to identify inner tagged (C-tag) VLAN traffic */
@@ -2346,7 +2342,7 @@ int sja1105_vlan_filtering(struct dsa_switch *ds, int port, bool enabled,
         */
        table = &priv->static_config.tables[BLK_IDX_L2_LOOKUP_PARAMS];
        l2_lookup_params = table->entries;
-       l2_lookup_params->shared_learn = !priv->vlan_aware;
+       l2_lookup_params->shared_learn = !enabled;
 
        for (port = 0; port < ds->num_ports; port++) {
                if (dsa_is_unused_port(ds, port))
index ec7b65d..061a1e0 100644 (file)
@@ -494,13 +494,15 @@ int sja1105_vl_redirect(struct sja1105_private *priv, int port,
                        bool append)
 {
        struct sja1105_rule *rule = sja1105_rule_find(priv, cookie);
+       struct dsa_port *dp = dsa_to_port(priv->ds, port);
+       bool vlan_aware = dsa_port_is_vlan_filtering(dp);
        int rc;
 
-       if (!priv->vlan_aware && key->type != SJA1105_KEY_VLAN_UNAWARE_VL) {
+       if (!vlan_aware && key->type != SJA1105_KEY_VLAN_UNAWARE_VL) {
                NL_SET_ERR_MSG_MOD(extack,
                                   "Can only redirect based on DMAC");
                return -EOPNOTSUPP;
-       } else if (priv->vlan_aware && key->type != SJA1105_KEY_VLAN_AWARE_VL) {
+       } else if (vlan_aware && key->type != SJA1105_KEY_VLAN_AWARE_VL) {
                NL_SET_ERR_MSG_MOD(extack,
                                   "Can only redirect based on {DMAC, VID, PCP}");
                return -EOPNOTSUPP;
@@ -568,6 +570,8 @@ int sja1105_vl_gate(struct sja1105_private *priv, int port,
                    u32 num_entries, struct action_gate_entry *entries)
 {
        struct sja1105_rule *rule = sja1105_rule_find(priv, cookie);
+       struct dsa_port *dp = dsa_to_port(priv->ds, port);
+       bool vlan_aware = dsa_port_is_vlan_filtering(dp);
        int ipv = -1;
        int i, rc;
        s32 rem;
@@ -592,11 +596,11 @@ int sja1105_vl_gate(struct sja1105_private *priv, int port,
                return -ERANGE;
        }
 
-       if (!priv->vlan_aware && key->type != SJA1105_KEY_VLAN_UNAWARE_VL) {
+       if (!vlan_aware && key->type != SJA1105_KEY_VLAN_UNAWARE_VL) {
                NL_SET_ERR_MSG_MOD(extack,
                                   "Can only gate based on DMAC");
                return -EOPNOTSUPP;
-       } else if (priv->vlan_aware && key->type != SJA1105_KEY_VLAN_AWARE_VL) {
+       } else if (vlan_aware && key->type != SJA1105_KEY_VLAN_AWARE_VL) {
                NL_SET_ERR_MSG_MOD(extack,
                                   "Can only gate based on {DMAC, VID, PCP}");
                return -EOPNOTSUPP;