| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- From 64a81b24487f0d2fba0f033029eec2abc7d82cee Mon Sep 17 00:00:00 2001
- From: Florian Fainelli <[email protected]>
- Date: Mon, 21 Jun 2021 15:10:55 -0700
- Subject: [PATCH] net: dsa: b53: Create default VLAN entry explicitly
- In case CONFIG_VLAN_8021Q is not set, there will be no call down to the
- b53 driver to ensure that the default PVID VLAN entry will be configured
- with the appropriate untagged attribute towards the CPU port. We were
- implicitly relying on dsa_slave_vlan_rx_add_vid() to do that for us,
- instead make it explicit.
- Reported-by: Vladimir Oltean <[email protected]>
- Signed-off-by: Florian Fainelli <[email protected]>
- Reviewed-by: Vladimir Oltean <[email protected]>
- Signed-off-by: David S. Miller <[email protected]>
- ---
- drivers/net/dsa/b53/b53_common.c | 27 +++++++++++++++++++--------
- 1 file changed, 19 insertions(+), 8 deletions(-)
- --- a/drivers/net/dsa/b53/b53_common.c
- +++ b/drivers/net/dsa/b53/b53_common.c
- @@ -693,6 +693,13 @@ static u16 b53_default_pvid(struct b53_d
- return 0;
- }
-
- +static bool b53_vlan_port_needs_forced_tagged(struct dsa_switch *ds, int port)
- +{
- + struct b53_device *dev = ds->priv;
- +
- + return dev->tag_protocol == DSA_TAG_PROTO_NONE && dsa_is_cpu_port(ds, port);
- +}
- +
- int b53_configure_vlan(struct dsa_switch *ds)
- {
- struct b53_device *dev = ds->priv;
- @@ -713,9 +720,20 @@ int b53_configure_vlan(struct dsa_switch
-
- b53_enable_vlan(dev, -1, dev->vlan_enabled, ds->vlan_filtering);
-
- - b53_for_each_port(dev, i)
- + /* Create an untagged VLAN entry for the default PVID in case
- + * CONFIG_VLAN_8021Q is disabled and there are no calls to
- + * dsa_slave_vlan_rx_add_vid() to create the default VLAN
- + * entry. Do this only when the tagging protocol is not
- + * DSA_TAG_PROTO_NONE
- + */
- + b53_for_each_port(dev, i) {
- + v = &dev->vlans[def_vid];
- + v->members |= BIT(i);
- + if (!b53_vlan_port_needs_forced_tagged(ds, i))
- + v->untag = v->members;
- b53_write16(dev, B53_VLAN_PAGE,
- B53_VLAN_PORT_DEF_TAG(i), def_vid);
- + }
-
- /* Upon initial call we have not set-up any VLANs, but upon
- * system resume, we need to restore all VLAN entries.
- @@ -1429,13 +1447,6 @@ int b53_vlan_prepare(struct dsa_switch *
- }
- EXPORT_SYMBOL(b53_vlan_prepare);
-
- -static bool b53_vlan_port_needs_forced_tagged(struct dsa_switch *ds, int port)
- -{
- - struct b53_device *dev = ds->priv;
- -
- - return dev->tag_protocol == DSA_TAG_PROTO_NONE && dsa_is_cpu_port(ds, port);
- -}
- -
- void b53_vlan_add(struct dsa_switch *ds, int port,
- const struct switchdev_obj_port_vlan *vlan)
- {
|