mirror of
https://github.com/torvalds/linux
synced 2024-11-05 18:23:50 +00:00
net: dsa: mv88e6xxx: get STU entry on VTU GetNext
Now that the code reads both VTU and STU data on VTU GetNext operation, fetch the STU entry data of a VTU entry at the same time. The STU data bits are masked with the VTU data bits and they are now all read at the same time a VTU GetNext operation is issued. Signed-off-by: Vivien Didelot <vivien.didelot@savoirfairelinux.com> Reviewed-by: Andrew Lunn <andrew@lunn.ch> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
66a8e1f933
commit
ef6fcea37f
3 changed files with 25 additions and 1 deletions
|
@ -1292,7 +1292,7 @@ static int _mv88e6xxx_vtu_getnext(struct mv88e6xxx_chip *chip,
|
|||
}
|
||||
|
||||
if (mv88e6xxx_has(chip, MV88E6XXX_FLAG_STU)) {
|
||||
err = mv88e6xxx_g1_vtu_sid_read(chip, &next);
|
||||
err = mv88e6xxx_g1_vtu_stu_get(chip, &next);
|
||||
if (err)
|
||||
return err;
|
||||
}
|
||||
|
|
|
@ -72,6 +72,8 @@ int mv88e6xxx_g1_vtu_getnext(struct mv88e6xxx_chip *chip,
|
|||
struct mv88e6xxx_vtu_entry *entry);
|
||||
int mv88e6xxx_g1_vtu_stu_getnext(struct mv88e6xxx_chip *chip,
|
||||
struct mv88e6xxx_vtu_entry *vtu);
|
||||
int mv88e6xxx_g1_vtu_stu_get(struct mv88e6xxx_chip *chip,
|
||||
struct mv88e6xxx_vtu_entry *vtu);
|
||||
int mv88e6xxx_g1_vtu_flush(struct mv88e6xxx_chip *chip);
|
||||
|
||||
#endif /* _MV88E6XXX_GLOBAL1_H */
|
||||
|
|
|
@ -194,6 +194,28 @@ int mv88e6xxx_g1_vtu_stu_getnext(struct mv88e6xxx_chip *chip,
|
|||
return mv88e6xxx_g1_vtu_vid_read(chip, entry);
|
||||
}
|
||||
|
||||
int mv88e6xxx_g1_vtu_stu_get(struct mv88e6xxx_chip *chip,
|
||||
struct mv88e6xxx_vtu_entry *vtu)
|
||||
{
|
||||
struct mv88e6xxx_vtu_entry stu;
|
||||
int err;
|
||||
|
||||
err = mv88e6xxx_g1_vtu_sid_read(chip, vtu);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
stu.sid = vtu->sid - 1;
|
||||
|
||||
err = mv88e6xxx_g1_vtu_stu_getnext(chip, &stu);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
if (stu.sid != vtu->sid || !stu.valid)
|
||||
return -EINVAL;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int mv88e6xxx_g1_vtu_getnext(struct mv88e6xxx_chip *chip,
|
||||
struct mv88e6xxx_vtu_entry *entry)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue