Commit 9aad3e4e authored by Vladimir Oltean's avatar Vladimir Oltean Committed by David S. Miller

net: dsa: sja1105: stop using priv->vlan_aware

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: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
Reviewed-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 5146a574
...@@ -226,7 +226,6 @@ struct sja1105_private { ...@@ -226,7 +226,6 @@ struct sja1105_private {
bool rgmii_tx_delay[SJA1105_MAX_NUM_PORTS]; bool rgmii_tx_delay[SJA1105_MAX_NUM_PORTS];
phy_interface_t phy_mode[SJA1105_MAX_NUM_PORTS]; phy_interface_t phy_mode[SJA1105_MAX_NUM_PORTS];
bool fixed_link[SJA1105_MAX_NUM_PORTS]; bool fixed_link[SJA1105_MAX_NUM_PORTS];
bool vlan_aware;
unsigned long ucast_egress_floods; unsigned long ucast_egress_floods;
unsigned long bcast_egress_floods; unsigned long bcast_egress_floods;
const struct sja1105_info *info; const struct sja1105_info *info;
......
...@@ -1780,6 +1780,7 @@ static int sja1105_fdb_del(struct dsa_switch *ds, int port, ...@@ -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, static int sja1105_fdb_dump(struct dsa_switch *ds, int port,
dsa_fdb_dump_cb_t *cb, void *data) dsa_fdb_dump_cb_t *cb, void *data)
{ {
struct dsa_port *dp = dsa_to_port(ds, port);
struct sja1105_private *priv = ds->priv; struct sja1105_private *priv = ds->priv;
struct device *dev = ds->dev; struct device *dev = ds->dev;
int i; int i;
...@@ -1816,7 +1817,7 @@ static int sja1105_fdb_dump(struct dsa_switch *ds, int port, ...@@ -1816,7 +1817,7 @@ static int sja1105_fdb_dump(struct dsa_switch *ds, int port,
u64_to_ether_addr(l2_lookup.macaddr, macaddr); u64_to_ether_addr(l2_lookup.macaddr, macaddr);
/* We need to hide the dsa_8021q VLANs from the user. */ /* 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; l2_lookup.vlanid = 0;
rc = cb(macaddr, l2_lookup.vlanid, l2_lookup.lockeds, data); rc = cb(macaddr, l2_lookup.vlanid, l2_lookup.lockeds, data);
if (rc) if (rc)
...@@ -2309,11 +2310,6 @@ int sja1105_vlan_filtering(struct dsa_switch *ds, int port, bool enabled, ...@@ -2309,11 +2310,6 @@ int sja1105_vlan_filtering(struct dsa_switch *ds, int port, bool enabled,
tpid2 = ETH_P_SJA1105; tpid2 = ETH_P_SJA1105;
} }
if (priv->vlan_aware == enabled)
return 0;
priv->vlan_aware = enabled;
table = &priv->static_config.tables[BLK_IDX_GENERAL_PARAMS]; table = &priv->static_config.tables[BLK_IDX_GENERAL_PARAMS];
general_params = table->entries; general_params = table->entries;
/* EtherType used to identify inner tagged (C-tag) VLAN traffic */ /* 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, ...@@ -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]; table = &priv->static_config.tables[BLK_IDX_L2_LOOKUP_PARAMS];
l2_lookup_params = table->entries; 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++) { for (port = 0; port < ds->num_ports; port++) {
if (dsa_is_unused_port(ds, port)) if (dsa_is_unused_port(ds, port))
......
...@@ -494,13 +494,15 @@ int sja1105_vl_redirect(struct sja1105_private *priv, int port, ...@@ -494,13 +494,15 @@ int sja1105_vl_redirect(struct sja1105_private *priv, int port,
bool append) bool append)
{ {
struct sja1105_rule *rule = sja1105_rule_find(priv, cookie); 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; 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, NL_SET_ERR_MSG_MOD(extack,
"Can only redirect based on DMAC"); "Can only redirect based on DMAC");
return -EOPNOTSUPP; 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, NL_SET_ERR_MSG_MOD(extack,
"Can only redirect based on {DMAC, VID, PCP}"); "Can only redirect based on {DMAC, VID, PCP}");
return -EOPNOTSUPP; return -EOPNOTSUPP;
...@@ -568,6 +570,8 @@ int sja1105_vl_gate(struct sja1105_private *priv, int port, ...@@ -568,6 +570,8 @@ int sja1105_vl_gate(struct sja1105_private *priv, int port,
u32 num_entries, struct action_gate_entry *entries) u32 num_entries, struct action_gate_entry *entries)
{ {
struct sja1105_rule *rule = sja1105_rule_find(priv, cookie); 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 ipv = -1;
int i, rc; int i, rc;
s32 rem; s32 rem;
...@@ -592,11 +596,11 @@ int sja1105_vl_gate(struct sja1105_private *priv, int port, ...@@ -592,11 +596,11 @@ int sja1105_vl_gate(struct sja1105_private *priv, int port,
return -ERANGE; 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, NL_SET_ERR_MSG_MOD(extack,
"Can only gate based on DMAC"); "Can only gate based on DMAC");
return -EOPNOTSUPP; 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, NL_SET_ERR_MSG_MOD(extack,
"Can only gate based on {DMAC, VID, PCP}"); "Can only gate based on {DMAC, VID, PCP}");
return -EOPNOTSUPP; return -EOPNOTSUPP;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment