#include <linux/of_mdio.h>
 
 #define MSCC_MIIM_REG_STATUS           0x0
+#define                MSCC_MIIM_STATUS_STAT_PENDING   BIT(2)
 #define                MSCC_MIIM_STATUS_STAT_BUSY      BIT(3)
 #define MSCC_MIIM_REG_CMD              0x8
 #define                MSCC_MIIM_CMD_OPR_WRITE         BIT(1)
                                  !(val & MSCC_MIIM_STATUS_STAT_BUSY), 50, 10000);
 }
 
+static int mscc_miim_wait_pending(struct mii_bus *bus)
+{
+       struct mscc_miim_dev *miim = bus->priv;
+       u32 val;
+
+       return readl_poll_timeout(miim->regs + MSCC_MIIM_REG_STATUS, val,
+                                 !(val & MSCC_MIIM_STATUS_STAT_PENDING),
+                                 50, 10000);
+}
+
 static int mscc_miim_read(struct mii_bus *bus, int mii_id, int regnum)
 {
        struct mscc_miim_dev *miim = bus->priv;
        u32 val;
        int ret;
 
-       ret = mscc_miim_wait_ready(bus);
+       ret = mscc_miim_wait_pending(bus);
        if (ret)
                goto out;
 
        struct mscc_miim_dev *miim = bus->priv;
        int ret;
 
-       ret = mscc_miim_wait_ready(bus);
+       ret = mscc_miim_wait_pending(bus);
        if (ret < 0)
                goto out;