lkml.org 
[lkml]   [2017]   [Apr]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH net-next 11/18] net: dsa: mv88e6xxx: get STU entry on VTU GetNext
    Date
    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>
    ---
    drivers/net/dsa/mv88e6xxx/chip.c | 2 +-
    drivers/net/dsa/mv88e6xxx/global1.h | 2 ++
    drivers/net/dsa/mv88e6xxx/global1_vtu.c | 22 ++++++++++++++++++++++
    3 files changed, 25 insertions(+), 1 deletion(-)

    diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
    index 5441b05f519b..38c3e047fbf9 100644
    --- a/drivers/net/dsa/mv88e6xxx/chip.c
    +++ b/drivers/net/dsa/mv88e6xxx/chip.c
    @@ -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;
    }
    diff --git a/drivers/net/dsa/mv88e6xxx/global1.h b/drivers/net/dsa/mv88e6xxx/global1.h
    index 5d276cc4262b..76b49a3a4701 100644
    --- a/drivers/net/dsa/mv88e6xxx/global1.h
    +++ b/drivers/net/dsa/mv88e6xxx/global1.h
    @@ -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 */
    diff --git a/drivers/net/dsa/mv88e6xxx/global1_vtu.c b/drivers/net/dsa/mv88e6xxx/global1_vtu.c
    index b7b6e089acfe..4df03000b366 100644
    --- a/drivers/net/dsa/mv88e6xxx/global1_vtu.c
    +++ b/drivers/net/dsa/mv88e6xxx/global1_vtu.c
    @@ -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)
    {
    --
    2.12.2
    \
     
     \ /
      Last update: 2017-04-26 18:01    [W:3.216 / U:0.784 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site