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
|
@ -1292,7 +1292,7 @@ static int _mv88e6xxx_vtu_getnext(struct mv88e6xxx_chip *chip,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mv88e6xxx_has(chip, MV88E6XXX_FLAG_STU)) {
|
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)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
|
@ -72,6 +72,8 @@ int mv88e6xxx_g1_vtu_getnext(struct mv88e6xxx_chip *chip,
|
||||||
struct mv88e6xxx_vtu_entry *entry);
|
struct mv88e6xxx_vtu_entry *entry);
|
||||||
int mv88e6xxx_g1_vtu_stu_getnext(struct mv88e6xxx_chip *chip,
|
int mv88e6xxx_g1_vtu_stu_getnext(struct mv88e6xxx_chip *chip,
|
||||||
struct mv88e6xxx_vtu_entry *vtu);
|
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);
|
int mv88e6xxx_g1_vtu_flush(struct mv88e6xxx_chip *chip);
|
||||||
|
|
||||||
#endif /* _MV88E6XXX_GLOBAL1_H */
|
#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);
|
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,
|
int mv88e6xxx_g1_vtu_getnext(struct mv88e6xxx_chip *chip,
|
||||||
struct mv88e6xxx_vtu_entry *entry)
|
struct mv88e6xxx_vtu_entry *entry)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue