Skip to content

Commit

Permalink
net: dsa: mv88e6xxx: move VTU flush
Browse files Browse the repository at this point in the history
Move the VTU flush operation to global1_vtu.c and call it from a
mv88e6xxx_vtu_setup helper, similarly to the ATU and PVT setup.

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>
  • Loading branch information
Vivien Didelot authored and David S. Miller committed May 1, 2017
1 parent 332aa5c commit b486d7c
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 16 deletions.
28 changes: 12 additions & 16 deletions drivers/net/dsa/mv88e6xxx/chip.c
Original file line number Diff line number Diff line change
Expand Up @@ -1263,17 +1263,6 @@ static void mv88e6xxx_port_fast_age(struct dsa_switch *ds, int port)
netdev_err(ds->ports[port].netdev, "failed to flush ATU\n");
}

static int _mv88e6xxx_vtu_stu_flush(struct mv88e6xxx_chip *chip)
{
int ret;

ret = mv88e6xxx_g1_vtu_op_wait(chip);
if (ret < 0)
return ret;

return mv88e6xxx_g1_vtu_op(chip, GLOBAL_VTU_OP_FLUSH_ALL);
}

static int _mv88e6xxx_vtu_stu_data_read(struct mv88e6xxx_chip *chip,
struct mv88e6xxx_vtu_entry *entry,
unsigned int nibble_offset)
Expand Down Expand Up @@ -1412,6 +1401,14 @@ static int _mv88e6xxx_vtu_getnext(struct mv88e6xxx_chip *chip,
return 0;
}

static int mv88e6xxx_vtu_setup(struct mv88e6xxx_chip *chip)
{
if (!chip->info->max_vid)
return 0;

return mv88e6xxx_g1_vtu_flush(chip);
}

static int mv88e6xxx_port_vlan_dump(struct dsa_switch *ds, int port,
struct switchdev_obj_port_vlan *vlan,
int (*cb)(struct switchdev_obj *obj))
Expand Down Expand Up @@ -2599,11 +2596,6 @@ static int mv88e6xxx_g1_setup(struct mv88e6xxx_chip *chip)
if (err)
return err;

/* Clear all the VTU and STU entries */
err = _mv88e6xxx_vtu_stu_flush(chip);
if (err < 0)
return err;

/* Configure the IP ToS mapping registers. */
err = mv88e6xxx_g1_write(chip, GLOBAL_IP_PRI_0, 0x0000);
if (err)
Expand Down Expand Up @@ -2684,6 +2676,10 @@ static int mv88e6xxx_setup(struct dsa_switch *ds)
goto unlock;
}

err = mv88e6xxx_vtu_setup(chip);
if (err)
goto unlock;

err = mv88e6xxx_pvt_setup(chip);
if (err)
goto unlock;
Expand Down
1 change: 1 addition & 0 deletions drivers/net/dsa/mv88e6xxx/global1.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,5 +52,6 @@ int mv88e6xxx_g1_atu_remove(struct mv88e6xxx_chip *chip, u16 fid, int port,

int mv88e6xxx_g1_vtu_op_wait(struct mv88e6xxx_chip *chip);
int mv88e6xxx_g1_vtu_op(struct mv88e6xxx_chip *chip, u16 op);
int mv88e6xxx_g1_vtu_flush(struct mv88e6xxx_chip *chip);

#endif /* _MV88E6XXX_GLOBAL1_H */
13 changes: 13 additions & 0 deletions drivers/net/dsa/mv88e6xxx/global1_vtu.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,3 +31,16 @@ int mv88e6xxx_g1_vtu_op(struct mv88e6xxx_chip *chip, u16 op)

return mv88e6xxx_g1_vtu_op_wait(chip);
}

/* VLAN Translation Unit Operations */

int mv88e6xxx_g1_vtu_flush(struct mv88e6xxx_chip *chip)
{
int err;

err = mv88e6xxx_g1_vtu_op_wait(chip);
if (err)
return err;

return mv88e6xxx_g1_vtu_op(chip, GLOBAL_VTU_OP_FLUSH_ALL);
}

0 comments on commit b486d7c

Please sign in to comment.