2015-11-03 16:02:34

by Vivien Didelot

[permalink] [raw]
Subject: [PATCH net] net: dsa: mv88e6xxx: include DSA ports in VLANs

DSA ports must be members of a VLAN in order to ensure frame bridging
between chained switch chips.

Thus tag them in addition to the CPU port when adding a VLAN, and skip
them when deleting a VLAN and reporting VLAN members.

Also use the UNMODIFIED egress policy, so that frames egress on these
ports as they ingress, tagged or untagged.

Fixes: 0d3b33e60206 ("net: dsa: mv88e6xxx: add VLAN Load support")
Reported-by: Andrew Lunn <[email protected]>
Signed-off-by: Vivien Didelot <[email protected]>
---
drivers/net/dsa/mv88e6xxx.c | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/net/dsa/mv88e6xxx.c b/drivers/net/dsa/mv88e6xxx.c
index 3bec315..161e45c 100644
--- a/drivers/net/dsa/mv88e6xxx.c
+++ b/drivers/net/dsa/mv88e6xxx.c
@@ -1536,11 +1536,11 @@ static int _mv88e6xxx_vlan_init(struct dsa_switch *ds, u16 vid,
};
int i;

- /* exclude all ports except the CPU */
+ /* exclude all ports except the CPU and DSA ports */
for (i = 0; i < ps->num_ports; ++i)
- vlan.data[i] = dsa_is_cpu_port(ds, i) ?
- GLOBAL_VTU_DATA_MEMBER_TAG_TAGGED :
- GLOBAL_VTU_DATA_MEMBER_TAG_NON_MEMBER;
+ vlan.data[i] = dsa_is_cpu_port(ds, i) || dsa_is_dsa_port(ds, i)
+ ? GLOBAL_VTU_DATA_MEMBER_TAG_UNMODIFIED
+ : GLOBAL_VTU_DATA_MEMBER_TAG_NON_MEMBER;

if (mv88e6xxx_6097_family(ds) || mv88e6xxx_6165_family(ds) ||
mv88e6xxx_6351_family(ds) || mv88e6xxx_6352_family(ds)) {
@@ -1639,7 +1639,7 @@ int mv88e6xxx_port_vlan_del(struct dsa_switch *ds, int port, u16 vid)

/* keep the VLAN unless all ports are excluded */
for (i = 0; i < ps->num_ports; ++i) {
- if (dsa_is_cpu_port(ds, i))
+ if (dsa_is_cpu_port(ds, i) || dsa_is_dsa_port(ds, i))
continue;

if (vlan.data[i] != GLOBAL_VTU_DATA_MEMBER_TAG_NON_MEMBER) {
@@ -1712,7 +1712,7 @@ int mv88e6xxx_vlan_getnext(struct dsa_switch *ds, u16 *vid,
clear_bit(port, ports);
clear_bit(port, untagged);

- if (dsa_is_cpu_port(ds, port))
+ if (dsa_is_cpu_port(ds, port) || dsa_is_dsa_port(ds, port))
continue;

if (next.data[port] == GLOBAL_VTU_DATA_MEMBER_TAG_TAGGED ||
--
2.6.2


2015-11-03 16:35:25

by David Miller

[permalink] [raw]
Subject: Re: [PATCH net] net: dsa: mv88e6xxx: include DSA ports in VLANs

From: Vivien Didelot <[email protected]>
Date: Tue, 3 Nov 2015 10:52:52 -0500

> DSA ports must be members of a VLAN in order to ensure frame bridging
> between chained switch chips.
>
> Thus tag them in addition to the CPU port when adding a VLAN, and skip
> them when deleting a VLAN and reporting VLAN members.
>
> Also use the UNMODIFIED egress policy, so that frames egress on these
> ports as they ingress, tagged or untagged.
>
> Fixes: 0d3b33e60206 ("net: dsa: mv88e6xxx: add VLAN Load support")
> Reported-by: Andrew Lunn <[email protected]>
> Signed-off-by: Vivien Didelot <[email protected]>

Applied.