Commit bb03b280 authored by Tobias Waldekranz's avatar Tobias Waldekranz Committed by David S. Miller

net: dsa: mv88e6xxx: Support policy entries in the VTU

A VTU entry with policy enabled is used in combination with a port's
VTU policy setting to override normal switching behavior for frames
assigned to the entry's VID.

A typical example is to Treat all frames in a particular VLAN as
control traffic, and trap them to the CPU. In which case the relevant
user port's VTU policy would be set to TRAP.
Signed-off-by: default avatarTobias Waldekranz <tobias@waldekranz.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 7af4a361
...@@ -179,6 +179,7 @@ struct mv88e6xxx_vtu_entry { ...@@ -179,6 +179,7 @@ struct mv88e6xxx_vtu_entry {
u16 fid; u16 fid;
u8 sid; u8 sid;
bool valid; bool valid;
bool policy;
u8 member[DSA_MAX_PORTS]; u8 member[DSA_MAX_PORTS];
u8 state[DSA_MAX_PORTS]; u8 state[DSA_MAX_PORTS];
}; };
......
...@@ -46,6 +46,7 @@ ...@@ -46,6 +46,7 @@
/* Offset 0x02: VTU FID Register */ /* Offset 0x02: VTU FID Register */
#define MV88E6352_G1_VTU_FID 0x02 #define MV88E6352_G1_VTU_FID 0x02
#define MV88E6352_G1_VTU_FID_VID_POLICY 0x1000
#define MV88E6352_G1_VTU_FID_MASK 0x0fff #define MV88E6352_G1_VTU_FID_MASK 0x0fff
/* Offset 0x03: VTU SID Register */ /* Offset 0x03: VTU SID Register */
......
...@@ -27,7 +27,7 @@ static int mv88e6xxx_g1_vtu_fid_read(struct mv88e6xxx_chip *chip, ...@@ -27,7 +27,7 @@ static int mv88e6xxx_g1_vtu_fid_read(struct mv88e6xxx_chip *chip,
return err; return err;
entry->fid = val & MV88E6352_G1_VTU_FID_MASK; entry->fid = val & MV88E6352_G1_VTU_FID_MASK;
entry->policy = !!(val & MV88E6352_G1_VTU_FID_VID_POLICY);
return 0; return 0;
} }
...@@ -36,6 +36,9 @@ static int mv88e6xxx_g1_vtu_fid_write(struct mv88e6xxx_chip *chip, ...@@ -36,6 +36,9 @@ static int mv88e6xxx_g1_vtu_fid_write(struct mv88e6xxx_chip *chip,
{ {
u16 val = entry->fid & MV88E6352_G1_VTU_FID_MASK; u16 val = entry->fid & MV88E6352_G1_VTU_FID_MASK;
if (entry->policy)
val |= MV88E6352_G1_VTU_FID_VID_POLICY;
return mv88e6xxx_g1_write(chip, MV88E6352_G1_VTU_FID, val); return mv88e6xxx_g1_write(chip, MV88E6352_G1_VTU_FID, val);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment