static int _mv88e6xxx_port_based_vlan_map(struct mv88e6xxx_chip *chip, int port)
 {
        struct net_device *bridge = chip->ports[port].bridge_dev;
-       const u16 mask = (1 << mv88e6xxx_num_ports(chip)) - 1;
        struct dsa_switch *ds = chip->ds;
        u16 output_ports = 0;
-       u16 reg;
-       int err;
        int i;
 
        /* allow CPU port or DSA link(s) to send frames to every port */
        if (dsa_is_cpu_port(ds, port) || dsa_is_dsa_port(ds, port)) {
-               output_ports = mask;
+               output_ports = ~0;
        } else {
                for (i = 0; i < mv88e6xxx_num_ports(chip); ++i) {
                        /* allow sending frames to every group member */
        /* prevent frames from going back out of the port they came in on */
        output_ports &= ~BIT(port);
 
-       err = mv88e6xxx_port_read(chip, port, PORT_BASE_VLAN, ®);
-       if (err)
-               return err;
-
-       reg &= ~mask;
-       reg |= output_ports & mask;
-
-       return mv88e6xxx_port_write(chip, port, PORT_BASE_VLAN, reg);
+       return mv88e6xxx_port_set_vlan_map(chip, port, output_ports);
 }
 
 static void mv88e6xxx_port_stp_state_set(struct dsa_switch *ds, int port,
 
 
        return 0;
 }
+
+/* Offset 0x06: Port Based VLAN Map */
+
+int mv88e6xxx_port_set_vlan_map(struct mv88e6xxx_chip *chip, int port, u16 map)
+{
+       const u16 mask = GENMASK(mv88e6xxx_num_ports(chip) - 1, 0);
+       u16 reg;
+       int err;
+
+       err = mv88e6xxx_port_read(chip, port, PORT_BASE_VLAN, ®);
+       if (err)
+               return err;
+
+       reg &= ~mask;
+       reg |= map & mask;
+
+       err = mv88e6xxx_port_write(chip, port, PORT_BASE_VLAN, reg);
+       if (err)
+               return err;
+
+       netdev_dbg(chip->ds->ports[port].netdev, "VLANTable set to %.3x\n",
+                  map);
+
+       return 0;
+}
 
 
 int mv88e6xxx_port_set_state(struct mv88e6xxx_chip *chip, int port, u8 state);
 
+int mv88e6xxx_port_set_vlan_map(struct mv88e6xxx_chip *chip, int port, u16 map);
+
 #endif /* _MV88E6XXX_PORT_H */