net: dsa: microchip: ksz8795: Fix VLAN untagged flag change on deletion
When a VLAN is deleted from a port, the flags in struct
switchdev_obj_port_vlan are always 0. ksz8_port_vlan_del() copies the
BRIDGE_VLAN_INFO_UNTAGGED flag to the port's Tag Removal flag, and
therefore always clears it.
In case there are multiple VLANs configured as untagged on this port -
which seems useless, but is allowed - deleting one of them changes the
remaining VLANs to be tagged.
It's only ever necessary to change this flag when a VLAN is added to
the port, so leave it unchanged in ksz8_port_vlan_del().
Fixes: e66f840c08
("net: dsa: ksz: Add Microchip KSZ8795 DSA driver")
Signed-off-by: Ben Hutchings <ben.hutchings@mind.be>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
8f4f58f88f
commit
af01754f9e
|
@ -1208,7 +1208,6 @@ static int ksz8_port_vlan_add(struct dsa_switch *ds, int port,
|
||||||
static int ksz8_port_vlan_del(struct dsa_switch *ds, int port,
|
static int ksz8_port_vlan_del(struct dsa_switch *ds, int port,
|
||||||
const struct switchdev_obj_port_vlan *vlan)
|
const struct switchdev_obj_port_vlan *vlan)
|
||||||
{
|
{
|
||||||
bool untagged = vlan->flags & BRIDGE_VLAN_INFO_UNTAGGED;
|
|
||||||
struct ksz_device *dev = ds->priv;
|
struct ksz_device *dev = ds->priv;
|
||||||
u16 data, pvid;
|
u16 data, pvid;
|
||||||
u8 fid, member, valid;
|
u8 fid, member, valid;
|
||||||
|
@ -1219,8 +1218,6 @@ static int ksz8_port_vlan_del(struct dsa_switch *ds, int port,
|
||||||
ksz_pread16(dev, port, REG_PORT_CTRL_VID, &pvid);
|
ksz_pread16(dev, port, REG_PORT_CTRL_VID, &pvid);
|
||||||
pvid = pvid & 0xFFF;
|
pvid = pvid & 0xFFF;
|
||||||
|
|
||||||
ksz_port_cfg(dev, port, P_TAG_CTRL, PORT_REMOVE_TAG, untagged);
|
|
||||||
|
|
||||||
ksz8_r_vlan_table(dev, vlan->vid, &data);
|
ksz8_r_vlan_table(dev, vlan->vid, &data);
|
||||||
ksz8_from_vlan(dev, data, &fid, &member, &valid);
|
ksz8_from_vlan(dev, data, &fid, &member, &valid);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue