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: Vladimir Oltean <vladimir.oltean@nxp.com> Reviewed-by: Florian Fainelli <f.fainelli@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
568a36a69b
commit
7e092af2f3
@ -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)
|
static int sja1105_setup_8021q_tagging(struct dsa_switch *ds, bool enabled)
|
||||||
{
|
{
|
||||||
struct sja1105_private *priv = ds->priv;
|
struct sja1105_private *priv = ds->priv;
|
||||||
int rc, i;
|
int rc;
|
||||||
|
|
||||||
for (i = 0; i < SJA1105_NUM_PORTS; i++) {
|
rc = dsa_8021q_setup(priv->ds, enabled);
|
||||||
priv->expect_dsa_8021q = true;
|
if (rc)
|
||||||
rc = dsa_port_setup_8021q_tagging(ds, i, enabled);
|
return rc;
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
dev_info(ds->dev, "%s switch tagging\n",
|
dev_info(ds->dev, "%s switch tagging\n",
|
||||||
enabled ? "Enabled" : "Disabled");
|
enabled ? "Enabled" : "Disabled");
|
||||||
|
@ -25,8 +25,7 @@ struct dsa_8021q_crosschip_link {
|
|||||||
|
|
||||||
#if IS_ENABLED(CONFIG_NET_DSA_TAG_8021Q)
|
#if IS_ENABLED(CONFIG_NET_DSA_TAG_8021Q)
|
||||||
|
|
||||||
int dsa_port_setup_8021q_tagging(struct dsa_switch *ds, int index,
|
int dsa_8021q_setup(struct dsa_switch *ds, bool enabled);
|
||||||
bool enabled);
|
|
||||||
|
|
||||||
int dsa_8021q_crosschip_bridge_join(struct dsa_switch *ds, int port,
|
int dsa_8021q_crosschip_bridge_join(struct dsa_switch *ds, int port,
|
||||||
struct dsa_switch *other_ds,
|
struct dsa_switch *other_ds,
|
||||||
@ -57,8 +56,7 @@ bool vid_is_dsa_8021q(u16 vid);
|
|||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
int dsa_port_setup_8021q_tagging(struct dsa_switch *ds, int index,
|
int dsa_8021q_setup(struct dsa_switch *ds, bool enabled)
|
||||||
bool enabled)
|
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -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
|
* 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);
|
int upstream = dsa_upstream_port(ds, port);
|
||||||
u16 rx_vid = dsa_8021q_rx_vid(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;
|
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,
|
static int dsa_8021q_crosschip_link_apply(struct dsa_switch *ds, int port,
|
||||||
struct dsa_switch *other_ds,
|
struct dsa_switch *other_ds,
|
||||||
|
Loading…
Reference in New Issue
Block a user