* Offset 0x08: VTU/STU Data Register 2
  * Offset 0x09: VTU/STU Data Register 3
  */
-
-static int mv88e6185_g1_vtu_data_read(struct mv88e6xxx_chip *chip,
-                                     struct mv88e6xxx_vtu_entry *entry)
+static int mv88e6185_g1_vtu_stu_data_read(struct mv88e6xxx_chip *chip,
+                                         u16 *regs)
 {
-       u16 regs[3];
        int i;
 
        /* Read all 3 VTU/STU Data registers */
                        return err;
        }
 
-       /* Extract MemberTag and PortState data */
+       return 0;
+}
+
+static int mv88e6185_g1_vtu_data_read(struct mv88e6xxx_chip *chip,
+                                     struct mv88e6xxx_vtu_entry *entry)
+{
+       u16 regs[3];
+       int err;
+       int i;
+
+       err = mv88e6185_g1_vtu_stu_data_read(chip, regs);
+       if (err)
+               return err;
+
+       /* Extract MemberTag data */
        for (i = 0; i < mv88e6xxx_num_ports(chip); ++i) {
                unsigned int member_offset = (i % 4) * 4;
-               unsigned int state_offset = member_offset + 2;
 
                entry->member[i] = (regs[i / 4] >> member_offset) & 0x3;
+       }
+
+       return 0;
+}
+
+static int mv88e6185_g1_stu_data_read(struct mv88e6xxx_chip *chip,
+                                     struct mv88e6xxx_vtu_entry *entry)
+{
+       u16 regs[3];
+       int err;
+       int i;
+
+       err = mv88e6185_g1_vtu_stu_data_read(chip, regs);
+       if (err)
+               return err;
+
+       /* Extract PortState data */
+       for (i = 0; i < mv88e6xxx_num_ports(chip); ++i) {
+               unsigned int state_offset = (i % 4) * 4 + 2;
+
                entry->state[i] = (regs[i / 4] >> state_offset) & 0x3;
        }
 
                if (err)
                        return err;
 
+               err = mv88e6185_g1_stu_data_read(chip, entry);
+               if (err)
+                       return err;
+
                /* VTU DBNum[3:0] are located in VTU Operation 3:0
                 * VTU DBNum[7:4] are located in VTU Operation 11:8
                 */
                return err;
 
        if (entry->valid) {
-               /* Fetch (and mask) VLAN PortState data from the STU */
-               err = mv88e6xxx_g1_vtu_stu_get(chip, entry);
+               err = mv88e6185_g1_vtu_data_read(chip, entry);
                if (err)
                        return err;
 
-               err = mv88e6185_g1_vtu_data_read(chip, entry);
+               err = mv88e6xxx_g1_vtu_fid_read(chip, entry);
                if (err)
                        return err;
 
-               err = mv88e6xxx_g1_vtu_fid_read(chip, entry);
+               /* Fetch VLAN PortState data from the STU */
+               err = mv88e6xxx_g1_vtu_stu_get(chip, entry);
+               if (err)
+                       return err;
+
+               err = mv88e6185_g1_stu_data_read(chip, entry);
                if (err)
                        return err;
        }