.watchdog_ops = &mv88e6250_watchdog_ops,
        .mgmt_rsvd2cpu = mv88e6352_g2_mgmt_rsvd2cpu,
        .pot_clear = mv88e6xxx_g2_pot_clear,
-       .hardware_reset_pre = mv88e6xxx_g2_eeprom_wait,
-       .hardware_reset_post = mv88e6xxx_g2_eeprom_wait,
+       .hardware_reset_pre = mv88e6250_g1_wait_eeprom_done_prereset,
+       .hardware_reset_post = mv88e6xxx_g1_wait_eeprom_done,
        .reset = mv88e6250_g1_reset,
        .vtu_getnext = mv88e6185_g1_vtu_getnext,
        .vtu_loadpurge = mv88e6185_g1_vtu_loadpurge,
 
        return mv88e6xxx_g1_wait_bit(chip, MV88E6XXX_G1_STS, bit, 1);
 }
 
+static int mv88e6250_g1_eeprom_reload(struct mv88e6xxx_chip *chip)
+{
+       /* MV88E6185_G1_CTL1_RELOAD_EEPROM is also valid for 88E6250 */
+       int bit = __bf_shf(MV88E6185_G1_CTL1_RELOAD_EEPROM);
+       u16 val;
+       int err;
+
+       err = mv88e6xxx_g1_read(chip, MV88E6XXX_G1_CTL1, &val);
+       if (err)
+               return err;
+
+       val |= MV88E6185_G1_CTL1_RELOAD_EEPROM;
+
+       err = mv88e6xxx_g1_write(chip, MV88E6XXX_G1_CTL1, val);
+       if (err)
+               return err;
+
+       return mv88e6xxx_g1_wait_bit(chip, MV88E6XXX_G1_CTL1, bit, 0);
+}
+
+/* Returns 0 when done, -EBUSY when waiting, other negative codes on error */
+static int mv88e6xxx_g1_is_eeprom_done(struct mv88e6xxx_chip *chip)
+{
+       u16 val;
+       int err;
+
+       err = mv88e6xxx_g1_read(chip, MV88E6XXX_G1_STS, &val);
+       if (err < 0) {
+               dev_err(chip->dev, "Error reading status");
+               return err;
+       }
+
+       /* If the switch is still resetting, it may not
+        * respond on the bus, and so MDIO read returns
+        * 0xffff. Differentiate between that, and waiting for
+        * the EEPROM to be done by bit 0 being set.
+        */
+       if (val == 0xffff || !(val & BIT(MV88E6XXX_G1_STS_IRQ_EEPROM_DONE)))
+               return -EBUSY;
+
+       return 0;
+}
+
+/* As the EEInt (EEPROM done) flag clears on read if the status register, this
+ * function must be called directly after a hard reset or EEPROM ReLoad request,
+ * or the done condition may have been missed
+ */
+int mv88e6xxx_g1_wait_eeprom_done(struct mv88e6xxx_chip *chip)
+{
+       const unsigned long timeout = jiffies + 1 * HZ;
+       int ret;
+
+       /* Wait up to 1 second for the switch to finish reading the
+        * EEPROM.
+        */
+       while (time_before(jiffies, timeout)) {
+               ret = mv88e6xxx_g1_is_eeprom_done(chip);
+               if (ret != -EBUSY)
+                       return ret;
+       }
+
+       dev_err(chip->dev, "Timeout waiting for EEPROM done");
+       return -ETIMEDOUT;
+}
+
+int mv88e6250_g1_wait_eeprom_done_prereset(struct mv88e6xxx_chip *chip)
+{
+       int ret;
+
+       ret = mv88e6xxx_g1_is_eeprom_done(chip);
+       if (ret != -EBUSY)
+               return ret;
+
+       /* Pre-reset, we don't know the state of the switch - when
+        * mv88e6xxx_g1_is_eeprom_done() returns -EBUSY, that may be because
+        * the switch is actually busy reading the EEPROM, or because
+        * MV88E6XXX_G1_STS_IRQ_EEPROM_DONE has been cleared by an unrelated
+        * status register read already.
+        *
+        * To account for the latter case, trigger another EEPROM reload for
+        * another chance at seeing the done flag.
+        */
+       ret = mv88e6250_g1_eeprom_reload(chip);
+       if (ret)
+               return ret;
+
+       return mv88e6xxx_g1_wait_eeprom_done(chip);
+}
+
 /* Offset 0x01: Switch MAC Address Register Bytes 0 & 1
  * Offset 0x02: Switch MAC Address Register Bytes 2 & 3
  * Offset 0x03: Switch MAC Address Register Bytes 4 & 5