Skip to content

Commit

Permalink
net: dsa: tag_8021q: setup tagging via a single function call
Browse files Browse the repository at this point in the history
There is no point in calling dsa_port_setup_8021q_tagging for each
individual port. Additionally, it will become more difficult to do that
when we'll have a context structure to tag_8021q (next patch). So
refactor this now.

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>
  • Loading branch information
Vladimir Oltean authored and David S. Miller committed Sep 12, 2020
1 parent 568a36a commit 7e092af
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 17 deletions.
15 changes: 4 additions & 11 deletions drivers/net/dsa/sja1105/sja1105_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -1934,18 +1934,11 @@ static void sja1105_crosschip_bridge_leave(struct dsa_switch *ds,
static int sja1105_setup_8021q_tagging(struct dsa_switch *ds, bool enabled)
{
struct sja1105_private *priv = ds->priv;
int rc, i;
int rc;

for (i = 0; i < SJA1105_NUM_PORTS; i++) {
priv->expect_dsa_8021q = true;
rc = dsa_port_setup_8021q_tagging(ds, i, enabled);
priv->expect_dsa_8021q = false;
if (rc < 0) {
dev_err(ds->dev, "Failed to setup VLAN tagging for port %d: %d\n",
i, rc);
return rc;
}
}
rc = dsa_8021q_setup(priv->ds, enabled);
if (rc)
return rc;

dev_info(ds->dev, "%s switch tagging\n",
enabled ? "Enabled" : "Disabled");
Expand Down
6 changes: 2 additions & 4 deletions include/linux/dsa/8021q.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,7 @@ struct dsa_8021q_crosschip_link {

#if IS_ENABLED(CONFIG_NET_DSA_TAG_8021Q)

int dsa_port_setup_8021q_tagging(struct dsa_switch *ds, int index,
bool enabled);
int dsa_8021q_setup(struct dsa_switch *ds, bool enabled);

int dsa_8021q_crosschip_bridge_join(struct dsa_switch *ds, int port,
struct dsa_switch *other_ds,
Expand Down Expand Up @@ -57,8 +56,7 @@ bool vid_is_dsa_8021q(u16 vid);

#else

int dsa_port_setup_8021q_tagging(struct dsa_switch *ds, int index,
bool enabled)
int dsa_8021q_setup(struct dsa_switch *ds, bool enabled)
{
return 0;
}
Expand Down
21 changes: 19 additions & 2 deletions net/dsa/tag_8021q.c
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,7 @@ static int dsa_8021q_vid_apply(struct dsa_switch *ds, int port, u16 vid,
* +-+-----+-+-----+-+-----+-+-----+-+ +-+-----+-+-----+-+-----+-+-----+-+
* swp0 swp1 swp2 swp3 swp0 swp1 swp2 swp3
*/
int dsa_port_setup_8021q_tagging(struct dsa_switch *ds, int port, bool enabled)
static int dsa_8021q_setup_port(struct dsa_switch *ds, int port, bool enabled)
{
int upstream = dsa_upstream_port(ds, port);
u16 rx_vid = dsa_8021q_rx_vid(ds, port);
Expand Down Expand Up @@ -275,7 +275,24 @@ int dsa_port_setup_8021q_tagging(struct dsa_switch *ds, int port, bool enabled)

return err;
}
EXPORT_SYMBOL_GPL(dsa_port_setup_8021q_tagging);

int dsa_8021q_setup(struct dsa_switch *ds, bool enabled)
{
int rc, port;

for (port = 0; port < ds->num_ports; port++) {
rc = dsa_8021q_setup_port(ds, port, enabled);
if (rc < 0) {
dev_err(ds->dev,
"Failed to setup VLAN tagging for port %d: %d\n",
port, rc);
return rc;
}
}

return 0;
}
EXPORT_SYMBOL_GPL(dsa_8021q_setup);

static int dsa_8021q_crosschip_link_apply(struct dsa_switch *ds, int port,
struct dsa_switch *other_ds,
Expand Down

0 comments on commit 7e092af

Please sign in to comment.