Commit 7e092af2 authored by Vladimir Oltean's avatar Vladimir Oltean Committed by David S. Miller
Browse files

net: dsa: tag_8021q: setup tagging via a single function call



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: 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 568a36a6
Loading
Loading
Loading
Loading
+4 −11
Original line number Diff line number Diff line
@@ -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);
	rc = dsa_8021q_setup(priv->ds, enabled);
	if (rc)
		return rc;
		}
	}

	dev_info(ds->dev, "%s switch tagging\n",
		 enabled ? "Enabled" : "Disabled");
+2 −4
Original line number Diff line number Diff line
@@ -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,
@@ -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;
}
+19 −2
Original line number Diff line number Diff line
@@ -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);
@@ -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,